如何在图片框中绘制圆圈和线条?

如何在图片框中绘制圆圈和线条?

图片框是一个控件,有一个图像作为源 – 所以你必须在图像上绘制并将图像传递给控件以显示它

MyImage = new Bitmap(fileToDisplay); pictureBox1.ClientSize = new Size(xSize, ySize); pictureBox1.Image = MyImage; 

要么:

  private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawLine( new Pen(Color.Red,2f), new Point(0,0), new Point(pictureBox1.Size.Width, pictureBox1.Size.Height )); e.Graphics.DrawEllipse( new Pen(Color.Red, 2f), 0,0, pictureBox1.Size.Width, pictureBox1.Size.Height ); } 

处理图片框的绘画事件并在那里进行自定义绘图。

最好的方法是不在图片框中画圆圈和线条! 它不是为此目的而设计的。

来自Bob Powell的GDI +博客:

这个问题的根源是Windows编程的基本规则已被打破。 而且由于图片框被归咎于一些真正不是它的错误。 为了帮助解释原因,下面的四点概述了在这种情况下出了什么问题。

  • PictureBox控件用于显示图像。 它不是图形界面的方便占位符。

  • Windows是一个事件驱动的系统,其中每个事件必须在正确的上下文中提供服务,并且不能使用指定处理按钮单击或鼠标移动事件的事件来绘制屏幕或其他奇怪的东西。

  • PictureBox通过绘制存储在其Image属性中的基于System.Drawing.Image的对象来刷新自身。 如果没有图像,它将显示背景颜色。

  • 窃取和绘制任何控件的Graphics对象并不是一种好的做法,应该强烈建议不要在正确的时间违反在正确的地方处理事件的规则。 基本上如果你这样做会导致你疼痛。 当你把头撞到墙上时会引起疼痛。 这表明你应该停止这样做。 对于PictureBox.CreateGraphics调用,它是相同的。

正确的方法。

遵循事件驱动系统的规则很容易,但需要一点预见。 因此,如果你想绘制一些图形并让它保持在那里,当一个窗口在它前面移动并再次离开或者当你最小化和恢复时,你必须为你想要的任何对象提供Paint事件。画上。 PictureBox随身携带行李,这对于这种应用来说是不必要的。 如果您只想在一个地方绘制内容,请通过响应Form.Paint事件在表单上绘制它。 如果您想要一个在设置范围内工作的图形的方便占位符,请使用Panel控件并为其设置Paint事件。 如果要为公司映像反复复制图形,请创建一个控件并在OnPaint覆盖中执行绘制。

原始链接(不再有效): http : //bobpowell.net/picturebox.htm

注意:Bob Powell博客的原始链接不再有效。 我把它留在这里是出于历史目的。 截至本文编辑之日,仍可在互联网档案( https://web.archive.org/web/20120330003635/http://bobpowell.net/picturebox.htm )上查看该页面的内容。