WinForms-加载窗体时如何使用PaintEventArgs运行函数?

时间:2019-05-05 18:43:35

标签: c# image winforms

我试图理解这些图形,并且在Graphics.FromImage文档中,以它为例:

private void FromImageImage(PaintEventArgs e)
{

    // Create image.
    Image imageFile = Image.FromFile("SampImag.jpg");

    // Create graphics object for alteration.
    Graphics newGraphics = Graphics.FromImage(imageFile);

    // Alter image.
    newGraphics.FillRectangle(new SolidBrush(Color.Black), 100, 50, 100, 100);

    // Draw image to screen.
    e.Graphics.DrawImage(imageFile, new PointF(0.0F, 0.0F));

    // Dispose of graphics object.
    newGraphics.Dispose();
}

我对C#和Windows Forms还是陌生的,并且正在努力了解所有这些如何结合在一起。该代码如何运行,例如第一次加载表单或何时按下按钮?

1 个答案:

答案 0 :(得分:1)

也许这会有所帮助。我有一个既利用Paint事件进行绘制,又利用现有Image进行绘制的示例。我创建了一个带有两个图片框的表单。每种情况一个。 pictureBox1具有.Paint事件的事件处理程序,而pictureBox2仅在按下按钮时绘制。

form design

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        pictureBox1.BackColor=Color.Black;
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        // The code below will draw on the surface of pictureBox1
        // It gets triggered automatically by Windows, or by
        // calling .Invalidate() or .Refresh() on the picture box.
        DrawGraphics(e.Graphics, pictureBox1.ClientRectangle);
    }

    private void toolStripButton1_Click(object sender, EventArgs e)
    {
        // The code below will draw on an existing image shown in pictureBox2
        var img = new Bitmap(pictureBox2.Image);
        var g = Graphics.FromImage(img);

        DrawGraphics(g, pictureBox2.ClientRectangle);
        pictureBox2.Image=img;
    }

    void DrawGraphics(Graphics g, Rectangle target)
    {
        // draw a red rectangle around the moon 
        g.DrawRectangle(Pens.Red, 130, 69, 8, 8);
    }
}

因此,当您启动该应用程序时,由于尚未按下按钮,因此仅在左侧显示一个红色矩形。

before click

,当按下按钮时,红色矩形显示在pictureBox2中显示的图像上方。

after click

没什么大不了的,但是确实可以。因此,根据您需要的操作模式(用户图形或图像批注),使用示例代码来了解如何进行操作。