выделенная область, чтобы вырезать изображение - PullRequest
1 голос
/ 06 марта 2011

Привет! Я бы выбрал выделенную область, чтобы вырезать изображение на 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 ]

3 голосов
/ 06 марта 2011

Вы не должны избавляться от объекта Graphics, который передается как часть PaintEventArgs.Это, вероятно, то, что вызывает вашу проблему.

1 голос
/ 06 марта 2011

Попробуйте использовать этот оптимизированный код, если вы все равно получите сообщение об ошибке здесь (отредактируйте исходный вопрос), и мы увидим.

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);
}
0 голосов
/ 06 марта 2011

в чем ошибка?

у вас течет ручка.Для каждого сообщения рисования вы создаете новую ручку и выбрасываете старую без утилизации.

От макушки головы я не могу вспомнить, нужно ли вам избавляться от графического объекта, который вы получаете из аргументов события

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...