我的图片框在创建图像时有时会清除所有图纸,有时甚至是中途。在绘图开始之前调用GC.Collect()让它在清除之前绘制更多,但是如何阻止它完全清除?
这是在vb.net
谢谢!
答案 0 :(得分:1)
在.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#,但它应该说明原则确定。
另一种保留绘制图像的方法是在PictureBox的Paint事件中进行绘制,但这意味着每次控件需要重绘自身时都会执行绘图代码(每当另一个表单被拖到其上时会发生这种情况等) )。上面的方法(设置控件的Image属性)更简单。
答案 1 :(得分: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()