[英]Graphics.DrawImage Doesn't Always Paint The Whole Bitmap?
使用Graphics.DrawImage
时遇到一个奇怪的问题。
在OnPaint
使用e.Graphics.DrawImage(Image, Point)
在控件上绘制位图“缓冲区”时,图像的某些部分似乎被省略了。 缓冲区以帮助程序方法填充,该方法使用从其构造的Graphics
直接绘制Bitmap
。 控件绘制时,将在控件上绘制缓存的位图。
在位图本身上似乎没有什么被遗漏,因为当我将位图保存到光盘并对其进行检查时,它就在那里了。 (参见下图)
这是位图缓冲区的样子:
(来源: zachjohnson.net )
控件上将显示以下内容:
(来源: zachjohnson.net )
这就是我在OnPaint
所做的一切:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.bufferInvalid)
{
this.UpdateBuffer();
}
if (this.buffer != null)
{
e.Graphics.DrawImage(this.buffer, Point.Empty);
}
}
调用OnPaint时,Windows具有允许绘画的无效区域,其他所有内容均被裁剪。 如果要更新矩形控件,则应在Windows API中调用InvalidateRect,以确保整个矩形是无效区域的一部分。 只要控件的任何部分无效,就会自动调用OnPaint。
您可以尝试几种不同的方法。
调试的选项很多,仅需缩小范围即可。
签出System.Windows.Forms.ControlStyles.ResizeRedraw
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.