【问题标题】:Draw on Image in Winforms在 Winforms 中绘制图像
【发布时间】:2018-06-08 21:28:18
【问题描述】:

我正在图片框内的图像上绘制一个矩形。我遇到的问题是矩形是在图像后面绘制的。请看附图。

如何在图像上绘制?

我的图片如下。我的颜料在我的画框上——我想知道这是不是问题所在?但是图像上没有油漆?

Rectangle ZoomRect1 = new Rectangle(Math.Min(ZoomToRectangleLeftButtonLocation.X, ZoomToRectangleCurrentButtonLocation.X),
                                               Math.Min(ZoomToRectangleLeftButtonLocation.Y, ZoomToRectangleCurrentButtonLocation.Y),
                                               Math.Abs(ZoomToRectangleLeftButtonLocation.X - ZoomToRectangleCurrentButtonLocation.X),
                                               Math.Abs(ZoomToRectangleLeftButtonLocation.Y - ZoomToRectangleCurrentButtonLocation.Y));


Graphics g1 = e.Graphics;
                Pen pen = new Pen(Color.Red, 2);
                g1.DrawRectangle(pen, ZoomRect1);
                pen.Dispose();

【问题讨论】:

  • 看看this的帖子!

标签: c#


【解决方案1】:

我相信你正在使用表单的 OnPaint 方法!不是图片框,这就是矩形的形式。 要在 PictureBox 上绘制记录,您必须这样做:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
   {

    Rectangle ee = new Rectangle(10, 10, 30, 30);
    using (Pen pen = new Pen(Color.Red, 2))
        {
            e.Graphics.DrawRectangle(pen, ee);
        }

    }

这里的图形 e 是用于图片框而不是表单本身。

编辑

如果第一个答案没有帮助:试试这个。

在任何你想要的地方添加这个方法并调用它

 public void paintOnPictureBox()
        {
            Rectangle ee = new Rectangle(10, 10, 50, 50);
            Graphics gr = Graphics.FromImage(pictureBox1.Image);
            using (Pen pen = new Pen(Color.Green, 2))
            {
                gr.DrawRectangle(pen, ee);
            }
        }

不要忘记:在 pictureBox OnPaint 事件中,添加这一行:

this.Refresh();

结果:

编辑 2:

添加不好

this.Refresh();

在 onPaint 方法中,因为它可能导致其他组件闪烁。因为它会减慢表单的显示和操作速度!

最好在画法的末尾加上:

public void paintOnPictureBox()
        {
            Rectangle ee = new Rectangle(10, 10, 50, 50);
            Graphics gr = Graphics.FromImage(pictureBox1.Image);
            using (Pen pen = new Pen(Color.Green, 2))
            {
                gr.DrawRectangle(pen, ee);
            }
this.Refresh();
        }

【讨论】:

  • 我肯定用的是图片框画图
  • 我肯定在使用图片框绘画:这似乎值得怀疑。更好地展示整个 Paint 事件!并确保它连接到 PBox 而不是 Form!所有绘图都在 Image 和 BackgroundImage 上。 (在任何嵌套控件下方。)
  • 我已经用其他方法编辑了答案。测试和工作
【解决方案2】:

我猜你正在设置图像源来控制

尝试绘制图像,而不是矩形

Graphics g1 = e.Graphics;
g1.DrawImage(...);
Pen pen = new Pen(Color.Red, 2);
g1.DrawRectangle(pen, ZoomRect1);
pen.Dispose();

【讨论】:

  • 这是否意味着我的图像将被绘制多次?
  • 是的,但即使你设置了源代码也是一样的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
相关资源
最近更新 更多