2
Public Shared Function Render(ByRef pdfDoc As PDFLibNet.PDFWrapper) As System.Drawing.Bitmap
Try
If pdfDoc IsNot Nothing Then
Dim PW As Integer = pdfDoc.PageWidth
Dim PH As Integer = pdfDoc.PageHeight
Dim backbuffer As System.Drawing.Bitmap = New Bitmap(PW, PH)
pdfDoc.ClientBounds = New Rectangle(0, 0, pdfDoc.PageWidth, pdfDoc.PageHeight)
Dim g As Graphics = Graphics.FromImage(backbuffer)
Using g
Dim hdc As IntPtr = g.GetHdc()
pdfDoc.DrawPageHDC(hdc)
g.ReleaseHdc()
End Using
g.Dispose()
Return backbuffer
End If
Catch ex As Exception
Throw ex
Return Nothing
End Try
Return Nothing
End Function
該函數繪製圖像入變量類型位圖,從功能返回的「後備緩衝區」的HDC。但我的兩個內存的大幅增長感到不滿(我的形象是很大的)這個函數:
在行爲什麼System.Drawing.Graphics.GetHdc()增加內存使用
Dim backbuffer As System.Drawing.Bitmap = New Bitmap(PW, PH)
,並在線路
Dim hdc As IntPtr = g.GetHdc()
所以,我有一個問題:
爲什麼第二行增加了一個與我的圖像大小相當的內存大小,以及爲什麼如果我繪製到hdc中,我得到了繪製的位圖,我返回了(也許第一個是裝箱,第二個是拆箱)?
如果我繪製到hdc(具體繪圖表面的圖像的優化副本),我的繪圖如何從該優化副本回到原始「backbuffer」位圖?
你爲什麼處理g以及它在using()中? – 2013-02-28 10:08:45
但你期望什麼? HDC實際上是一種針對混凝土繪圖表面優化的位圖。它的大小等於該表面的大小。 – 2013-02-28 10:16:36
謝謝!如果我繪製成hdc,我的繪圖如何回到原始的「backbuffer」位圖上? – 2013-02-28 10:34:44