以下方法将位图的克隆分配给类中的本地位图变量。第二个参数告诉我们在赋值后是否处理源位图,这是为了方便。
Public Sub setBitmap(ByRef SourceBitmap As Bitmap, DisposeSource As Boolean)
uBitmap = SourceBitmap.Clone
If DisposeSource AndAlso SourceBitmap IsNot Nothing Then
SourceBitmap.Dispose()
SourceBitmap = Nothing
end if
End Sub
如果源位图是新的位图,那么它应该被丢弃吗?换句话说,在这个例子中第二个参数应该是True还是False?
mView.setBitmap(New Bitmap(2000, 2000, pFormat), False)
从另一个函数返回新位图的时间怎么样?
rview.setBitmap(readThumbnail(...), False)
答案 0 :(得分:5)
处理来电者的对象通常是不好的形式。就个人而言,我会完全删除该功能。这样会更正确:
using newBitmap As New Bitmap(2000, 2000, pFormat)
mView.setBitmap(newBitmap)
end using
答案 1 :(得分:2)
在调用中创建新位图时,应该让方法处理它:
mView.setBitmap(New Bitmap(2000, 2000, pFormat), True)
您创建的每个一次性对象都应该被处理掉,并且由于您没有对其进行引用,因此唯一的处理方法就是让方法执行此操作。
如果使用方法创建位图,也是如此。如果你没有保留对它的引用以便你可以处理它,那么方法必须这样做。
如果你创建一个位图并保留对它的引用以便以后可以处理它,你可以发送False
作为第二个参数:
Dim img As New Bitmap(2000, 2000, pFormat)
mView.setBitmap(img, False)
' ...
img.Dispose()
通常,您会使用发送False
作为第二个参数的表单。如果创建对象的级别也负责处理它,则更容易遵循代码。确保其正常工作的代码也可以更简单地编写(例如使用Using
关键字来确保处理对象。)