Vb.net 使用位图没有结果
下面是一段代码片段:Vb.net 使用位图没有结果,vb.net,visual-studio-2012,Vb.net,Visual Studio 2012,下面是一段代码片段: Dim BMf As Bitmap BMf = New Bitmap(PicBox.Width, PicBox.Height) Call FourierPlot(PlotHeight, PlotWidth, RPMArray, CoefArray, Count, 2, BMf) Me.PicBox.Image = BMf BMf.Dispose() 子例程中包含以下代码: Dim myGraphics As Graphics = Graphics.FromIm
Dim BMf As Bitmap
BMf = New Bitmap(PicBox.Width, PicBox.Height)
Call FourierPlot(PlotHeight, PlotWidth, RPMArray, CoefArray, Count, 2, BMf)
Me.PicBox.Image = BMf
BMf.Dispose()
子例程中包含以下代码:
Dim myGraphics As Graphics = Graphics.FromImage(BMf)
Dim myPen As New Pen(colr)
....
myGraphics.DrawLine(myPen, lastx, lasty, temp1, temp2)
....
myPen.Dispose()
myGraphics.Dispose()
显示的PicBox由一个边界矩形组成,该矩形带有从相对角绘制的线(我认为这是一个“错误图像”)
关于我做错了什么,有什么建议吗(希望是非常简单的建议?你不应该调用
BMf.Dispose()
,因为图像将被图片框使用
更新:
好的,小更新,因为这似乎让OP和其他人感到困惑
当你说Me.PicBox.Image=BMf
时,你设置了对位图的引用。BMf
和PicBox.Image
现在都指向同一个对象。因此,你不应该处理它,因为这样它就不能再使用了。同样,这不是副本,这是同一个对象
以及关于泄漏。删除此行不会导致任何内存或其他泄漏。.NET正在为您管理此项。一旦不需要位图(这意味着没有人引用它=您的图片框将加载另一个图像),它将不再需要,并在下一次运行垃圾回收器时进行处理。这是自动的
如果您确实需要关心资源,例如,如果您经常调用代码并创建新位图,那么您可能需要手动处理它。但在这种情况下,您最好强制垃圾收集器在可能会导致用户延迟的地方运行。您可以这样做:
GC.Collect()
您得到了Dispose()调用。您应该处理旧图像,而不是新图像。因此,在分配image属性之前,请使用
如果Me.PicBox.image不是空的话,那么使用Me.PicBox.image.Dispose()
。那么他应该怎么做?您的答案不完整。他应该删除这一行,这很明显?”指向“对我来说,指针的行为使我清醒过来。再次感谢你的帮助。