使用Graphics.DrawImage
时遇到了一个奇怪的问题。
在e.Graphics.DrawImage(Image, Point)
中使用OnPaint
在控件上绘制位图“缓冲区”时,会显示图像的某些部分被省略。缓冲区使用辅助方法填充,该方法使用从中构造的Bitmap
直接绘制到Graphics
。当控件绘制时,缓存的位图将在控件上绘制。
位图本身似乎没有遗漏任何东西,因为当我将位图保存到光盘并检查它时,它就在那里。 (见下图)
这就是位图缓冲区的样子:
(来源: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);
}
}
答案 0 :(得分:2)
当调用OnPaint时,Windows具有允许绘制的无效区域,并且其他所有内容都被剪切。如果要更新矩形控件,则应在Windows API中调用InvalidateRect以确保整个矩形是无效区域的一部分。只要控件的任何部分无效,就会自动调用OnPaint。
答案 1 :(得分:1)
你可以尝试几种不同的东西。
调试这个的几个选项,只是缩小范围。
答案 2 :(得分:1)
查看System.Windows.Forms.ControlStyles.ResizeRedraw