Рисование на изображении, загруженном в поле для картинок - PullRequest
0 голосов
/ 09 августа 2011

Я загрузил изображение машины в поле вот так.

   private void btn_LoadPattern_Click(object sender, EventArgs e)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "JPEG Files|*.jpg";

        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            pictureBox1.ImageLocation = openFileDialog.FileName;
        }
    }

Я хотел бы нарисовать прямоугольник над этим изображением и добавить кнопки со стрелками в той же форме, чтобы пользователь мог перемещать прямоугольник, чтобы указать, где на картинке находится регистрационная табличка.

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

Любая помощь будет высоко ценится.

1 Ответ

2 голосов
/ 10 августа 2011

В этом случае я бы не использовал PictureLocation, я бы сделал это вместо:

pictureBox1.BackgroundImage = Image.FromFile(openFileDialog.FileName);

Теперь, если вы нарисуете прямоугольник в PictureBox, он должен нарисоваться поверх изображения машины.

Во-вторых, используйте Paint событие PictureBox.
Нечто подобное должно сработать.

Rectangle MyRectangle;
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    // Create a local version of the graphics object for the PictureBox.
    Graphics g = e.Graphics;

    g.DrawRectangle(Pens.Black, MyRectangle);
}

И вы должны иметь возможность обрабатывать нажатия клавиш для изменения MyRectangle в соответствии с клавишами со стрелками, а затем вызвать pictureBox1.Invalidate(), чтобы событие Paint перерисовало прямоугольник в новом месте.

...