Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET formin tulostus tarkemmaksi

Kisälli [30.09.2004 09:52:52]

#

Ongelmana on formin tulostuksen himmeys.. Jos näytöstä ottaa normaalin printsceenin ja tulostaa niin jälki on huomattavasti tarkempaa, mutta ohjelman oma tulostus ei miellytä. (Tulostimen asetuksia on kokeiltu moneen lähtöön, mutta ei auta)

Tässä koodia, miten toteutin tulostuksen:

Private PrintPageSettings As New PageSettings()
Private StringToPrint As String
Private PrintFont As New Font("Arial", 10)

Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _
   hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _
   Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _
   hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _
   ByVal dwRop As System.Int32) As Long


Dim memoryImage As Bitmap

Private Sub CaptureScreen()
    Dim mygraphics As Graphics = Me.CreateGraphics()
    Dim s As Size = Me.Size
    memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
    Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
    Dim dc1 As IntPtr = mygraphics.GetHdc
    Dim dc2 As IntPtr = memoryGraphics.GetHdc
    BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, _
       Me.ClientRectangle.Height, dc1, 0, 0, 13369376)
    mygraphics.ReleaseHdc(dc1)
    memoryGraphics.ReleaseHdc(dc2)
End Sub

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _
   ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
   PrintDocument1.PrintPage
    e.Graphics.DrawImage(memoryImage, 50, 100)
End Sub

Tulostus painiketta käsketään:

Try

            PrintDocument1.DefaultPageSettings = PrintPageSettings

            PrintDialog1.Document = PrintDocument1
            Dim result As DialogResult = PrintDialog1.ShowDialog()

            If result = DialogResult.OK Then
                PrintDocument1.Print()
            End If
        Catch ex As Exception

            MessageBox.Show(ex.Message)
        End Try

Ja tietysti vielä löytyy tietyn objektin takaa:

CaptureScreen()

Osaisiko joku kertoa, miten tuosta saataisiin resoluutio tarkemmaksi? (Kokoahan, korkeus-leveys, ei tarvitse muuttaa.)

tnb [30.09.2004 17:43:08]

#

Kokeile näitä ennen piirtämistä:

e.Graphics.SmoothingMode =Drawing.Drawing2D.SmoothingMode.AntiAlias

e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit

En kokeillut itse.

Kisälli [01.10.2004 09:46:48]

#

Kiitos tnb.

Täytyy viikonloppuna kokeilla tuota.

Kisälli [07.10.2004 13:32:55]

#

Ei parantunut tuollakaan...

Olisiko parempia ehdotuksia kellään mielessä?

Vaikka ihan alusta loppuun eritavalla.?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta