图片框绘制事件与其他方法

本文关键字:其他 方法 事件 绘制 | 更新日期: 2023-09-27 18:33:34

我的表单中只有一个图片框,我想在这个图片框中使用方法绘制圆圈,但我不能这样做并且不起作用。方法是:

private Bitmap Circle()
    {
        Bitmap bmp;
        Graphics gfx;
        SolidBrush firca_dis=new SolidBrush(Color.FromArgb(192,0,192));
            bmp = new Bitmap(40, 40);
            gfx = Graphics.FromImage(bmp);
            gfx.FillRectangle(firca_dis, 0, 0, 40, 40);
        return bmp;
    }

图片框

 private void pictureBox2_Paint(object sender, PaintEventArgs e)
    {
        Graphics gfx= Graphics.FromImage(Circle());
        gfx=e.Graphics;
    }

图片框绘制事件与其他方法

你需要决定你想做什么:

  • 绘制到图像中
  • 绘制到控件上

您的代码是两者的混合,这就是它不起作用的原因。

以下是绘制Control的方法:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawEllipse(Pens.Red, new Rectangle(3, 4, 44, 44));
    ..
}

以下是如何绘制PictureBoxImage

void drawIntoImage()
{
    using (Graphics G = Graphics.FromImage(pictureBox1.Image))
    {
        G.DrawEllipse(Pens.Orange, new Rectangle(13, 14, 44, 44));
        ..
    }
    // when done with all drawing you can enforce the display update by calling:
    pictureBox1.Refresh();
}

两种绘制方式都是持久的。后者更改为图像的像素,前者不会。

因此,如果像素被绘制到图像中,并且您缩放、拉伸或移动图像,则像素将随之而去。绘制到图片框控件顶部的像素不会这样做!

当然,对于这两种绘制方式,您可以更改所有常用部分,例如绘图命令,也许在DrawEllipse之前添加一个FillEllipsePensBrushes及其画笔类型和Colors以及尺寸。

private static void DrawCircle(Graphics gfx)
{    
    SolidBrush firca_dis = new SolidBrush(Color.FromArgb(192, 0, 192));
    Rectangle rec = new Rectangle(0, 0, 40, 40); //Size and location of the Circle
    gfx.FillEllipse(firca_dis, rec); //Draw a Circle and fill it
    gfx.DrawEllipse(new Pen(firca_dis), rec); //draw a the border of the cicle your choice
}