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
此函数将图像绘制到从函数返回的位图类型的变量“backbuffer”的hdc中。但是我对这个功能的两次大幅增加(我的形象很大)不满意:
在线
Dim backbuffer As System.Drawing.Bitmap = New Bitmap(PW, PH)
并在第
行Dim hdc As IntPtr = g.GetHdc()
所以,我有一个问题:
为什么第二行增加了与我的图像相同大小的大小的内存
为什么如果我进入hdc,我得到绘制的位图,我返回(可能首先是拳击,第二个是拆箱)?
如果我绘制hdc(我的图像的具体绘图表面的优化副本),我的绘图如何从该优化副本回到原始的“backbuffer”Bitmap?
答案 0 :(得分:0)
我认为这是因为当您创建位图类的新实例然后g.hdc()强制它创建相当于您所述页面大小的新位图文件,因此这些内存使用峰值不会异常你不应该担心它们。
还要确保在函数末尾放置后缓冲区变量,以确保释放该对象使用的所有内存。