3

我的图片框有时会在完成创建图像时清除所有绘图,或者有时在中途。在绘图开始之前调用 GC.Collect() 可以让它在清除之前绘制更多,但是我怎样才能阻止它完全清除呢?

这是在 vb.net

谢谢!

4

2 回答 2

2

在 .Net 中持久保存绘制图像的一种简单方法是在单独的 Bitmap 对象上进行绘制,然后将 PictureBox 的 Image 属性设置为等于 Bitmap,如下所示:

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
    // draw whatever
}
pictureBox1.Image = bmp;

对不起,这是C#,但它应该说明原理OK。

保存绘制图像的另一种方法是在 PictureBox 的 Paint 事件中进行绘制,但这意味着您的绘制代码将在每次控件需要重新绘制自身时执行(每当另一个窗体被拖到它上面时都会发生这种情况等)。上面的方法(设置控件的Image属性)做起来比较简单。

于 2009-10-07T02:39:53.873 回答
0

在上述情况下,当“bmp”或“g”对象超出范围并被垃圾回收时,图片框图像会发生变化。我认为图像总是参考复制。我尝试 bmp.clone 将图像复制到图片框,但是当 bmp 被垃圾收集时,图片框图像消失了。就我而言,我有许多(在运行时确定)这样的图像要分配给运行时创建的图片框。

Dim bm As New Bitmap("C:\picture.bmp")
Dim thumb As New Bitmap(42, 30)
Dim g As Graphics = Graphics.FromImage(thumb)

g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bm, New Rectangle(0, 0, 42, 30), New Rectangle(0, 0, bm.Width, _bm.Height), GraphicsUnit.Pixel)
pbxHead.Image = thumb.Clone()

g.Dispose()
bm.Dispose()
thumb.Dispose()
于 2010-04-14T20:10:21.673 回答