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