在C#中绘制图片框

时间:2015-01-01 23:29:21

标签: c# winforms

我正在开发一个WinForms应用程序,无法弄清楚如何解决PictureBox的问题。在我的程序中,我使用PictureBox作为Panel的子控件,并使Panel可自动调整并可自动滚动以显示大图像。现在我需要在PictureBox中的图片上绘制一个圆圈等标记。标记必须始终位于相对于图片可见部分的相同位置。有没有办法做到这一点?提前谢谢。

1 个答案:

答案 0 :(得分:2)

使用Graphics类在PictureBox中绘图,你可以从几个控件中获取图形类,在你的例子中看看如何获​​取Graphics类并画一个圆圈:

Graphics g = pictBox.CreateGraphics();
Pen pen = new Pen(Color.Red);
g.DrawEllipse(pen, 10, 10, 20, 20);

如果您使用动画绘图需要更高的速度,在这种情况下更好的方法是使用事件绘制并启用双缓冲,请参阅如何启用双缓冲:

private void Form1_Load(object sender, System.EventArgs e)
{
    DoubleBuffered = true;
    this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
}

使用paint事件可以绘制更多的速度,paint函数的一个参数获取控件的图形类,请参见下面的示例:

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    Graphics g = e.Graphics;
    // Clear picture box with blue color
    g.Clear(Color.Blue);
    // Create a pen to draw Ellipse
    Pen pen = new Pen(Color.Red);
    g.DrawEllipse(pen, 10, 10, 20, 20);
}

要使用Paint事件每次绘制,您需要在某个循环中调用pict.Invalidate()来调用Paint事件。