强制一个PictureBox以保持其形象在拍摄时就在vb.net中使用代码绘制

StackOverflow https://stackoverflow.com/questions/1529211

  •  20-09-2019
  •  | 
  •  

我pictureboxes有时清除所有附图中当它们被创建完成一个图像,或者有时中途。绘制开始前调用GC.Collect的()让它吸引更多的它清除之前,但我怎么能阻止它从完全清除?

这是在vb.net

谢谢!

有帮助吗?

解决方案

一个简单的方法在净坚持绘制的图像是做绘图到单独的位图对象,然后将图片框的图像属性等于设置为位图,这样的:

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

对不起这是C#,但应说明的原则确定。

要坚持绘制图像的另一种方法是做在图片框的Paint事件绘制,但这意味着你的绘制代码将执行每一个控件需要重绘自己的时间(发生时的另一种形式被拖到它等顶级)。上述方法(设置控件的图像属性)是简单的事情。

其他提示

在上面的情况下,当“BMP”或“G”对象超出范围和垃圾收集,在PictureBox图像变化。我认为,图像始终引用复制。我试图bmp.clone的图像复制到图片框,但仍然是垃圾回收BMP时,PictureBox的图像消失。在我的情况下,我有一个号码的(在运行时确定的)这样的图像被分配给运行时创建pictureboxes。

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()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top