我试图使用绘制图像方法,但无法使其工作

时间:2012-05-24 03:27:47

标签: c# oop drawimage

我正在尝试在我的表单上绘制一个图像,在一个图片框的顶部,该图片框上有一个用户选择的背景。根据我的研究,我认为使用这种方法是在图像的任何地方画出图像的最佳方法。我是新手使用这种方法,这就是我所拥有的:

private void button3_Click(object sender, PaintEventArgs e)
    {
        // Create image.
        Image newImage =  Image.FromFile(@"C:\Users\Administrator\Documents\logoGreyHybridText.png");

        // Create coordinates for upper-left corner.

        // of image and for size of image.
        int x = 100;
        int y = 100;
        int width = 450;
        int height = 150;

        // Draw image to screen.
        e.Graphics.DrawImage(newImage, x, y, width, height);

    }

如果有人有一些建议,或者如果我使用这个错误,请随意发出声音,因为我只有一个学期的OOP。 (我们仍然在课堂上使用控制台应用程序; - ])

2 个答案:

答案 0 :(得分:3)

正如Hans所说 - 你似乎有一个奇怪的陈述,你将click事件与paint事件混合在一起。

如果您将此方法连接到click事件:

button3.Click += button3_Click;

button3_Click的方法参数将是

private void button3_Click(object sender, EventArgs e) { // code here // }

我不清楚你究竟想做什么。 (即您是否尝试在图片框中绘制的图像上绘制此图像?x,y坐标为100,100是相对于图片框或其他控制对象的位置?)

同样,请尝试使用以下代码,与现在相比,它可以让您走上更好的轨道。

假设您正在使用上面描述的click事件,而不是paint事件,您的代码将如下所示:

我将向您展示两种方法 - 首先是'错误的方式',但这更接近您的上述方式。

private void button3_Click(object sender, EventArgs e)
{
    // If this is only an exercise this is acceptable, otherwise you should
    // store the image as a resource
    Image newImage = Image.FromFile(@"C:\Users\Administrator\Documents\logoGreyHybridText.png");

    Graphics graphics = controlToDrawOver.CreateGraphics();

    // Note rectangle x,y coordinates are relative to 
    // the 'controlToDrawOver' object.
    Rectangle rectangleAreaToDrawImage = new Rectangle(100, 100, 450, 150);
    graphics.DrawImage(newImage, rectangleAreaToDrawImage);

}

*重要提示* 无论上面的代码如何,您都应该在控件绘制事件处理程序中绘制,而不是在代码显示时显示控件click事件处理程序。每次重新控制控件时,您的更改都将丢失。

因此 - 这是'更好的方式':

如果您必须等待点击该按钮,您可以执行以下操作:

private void button3_Click(object sender, EventArgs e)
{
    controlToDrawOver.Paint -= ControlPaintEventHandler;
    controlToDrawOver.Paint += ControlPaintEventHandler;
}

private void ControlPaintEventHandler(object sender, PaintEventArgs e)
{
    // If this is only an exercise this is acceptable, otherwise you should
    // store the image as a resource
    Image newImage = Image.FromFile(@"C:\Users\Administrator\Documents\logoGreyHybridText.png");

    // Note rectangle x,y coordinates are relative to 
    // the 'controlToDrawOver' object.
    Rectangle rectangleAreaToDrawImage = new Rectangle(100, 100, 450, 150);
    e.Graphics.DrawImage(newImage, rectangleAreaToDrawImage);

}

答案 1 :(得分:0)

将处理程序添加到PictruBox.Paint事件并尝试绘制它。 您也可以直接将图像设置为PictureBox.Image属性,它会在图片框上绘制图像。

通过您的代码,plase提供完整的表单代码。我认为主要错误 - 您在窗体坐标系中绘制图片,因此可能是您从PictureBox中绘制图像。还有什么事情会影响你的方法?