选择区域来剪切图像

时间:2011-03-06 16:09:21

标签: c# .net winforms image

您好我会选择区域来剪切picturebox控件上的图像。

我有以下代码:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{

public partial class Form1 : Form
{
    private Rectangle rect;
    private Pen p;

    public Form1()
    {
        InitializeComponent();
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        if (this.p == null)
            this.p = new Pen(Color.FromArgb(100, 200, 200, 200), 5);
        if (this.rect.Width > 0)
            e.Graphics.DrawRectangle(this.p, this.rect);
    }

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {

        if (e.X < this.rect.X)
        {
            this.rect.Width = this.rect.X - e.X;
            this.rect.X = e.X;
        }
        else
        {
            this.rect.Width = e.X - this.rect.X;
        }

        if (e.Y < this.rect.Y)
        {
            this.rect.Height = this.rect.Y - e.Y;
            this.rect.Y = e.Y;
        }
        else
        {
            this.rect.Height = e.Y - this.rect.Y;
        }

        this.Invalidate(this.rect);

    }

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        this.rect.X = e.X;
        this.rect.Y = e.Y;
    }

}

}

这里返回错误:

Application.Run(new Form1());

为什么?

感谢所有回复; p

3 个答案:

答案 0 :(得分:3)

您不应该丢弃作为PaintEventArgs的一部分传递的Graphics对象。这可能是导致你的问题的原因。

答案 1 :(得分:1)

尝试使用此优化代码,如果您在此处仍然收到错误(编辑原始问题),我们会看到。

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
   if (this.p == nulll)
      this.p = new Pen(Color.FromArgb(100, 200, 200, 200), 5);
   if (this.rect.Width > 0)
      e.Graphics.DrawRectangle(this.p, this.rect);
}

答案 2 :(得分:0)

错误是什么?

你正在泄漏Pen的。对于每一条油漆信息,你都会创建一支新笔并抛弃旧笔而不进行处理。

离开我的头顶我不记得你是否应该处理你从事件args中获得的图形对象