Опираясь на PictureBox внутри панели - C # - PullRequest
0 голосов
/ 29 ноября 2011

Вопрос, который я здесь задаю, является своего рода партером 2.

У меня есть картинка, которая расположена внутри панели.Когда я открываю изображение, размер окна изображения изменяется до размера изображения, тогда как размер панели остается прежним.На панели просто есть полосы прокрутки, чтобы увидеть все изображение.

В этом есть две проблемы.

  1. Когда я изменяю размер окна рисунка, по какой-то причине я могу тольконарисуйте в предыдущей части картинки.Ex.По умолчанию окно изображения начинается с размера 200x200.Я открываю изображение размером 500х400.И я все еще могу рисовать только часть изображения размером 200x200.

  2. Вторая проблема, с которой я сталкиваюсь, заключается в том, что, когда я рисую в этой части изображения, когда я прокручиваютуда, где моя картина не видна, и возвращайся, изображение, которое я нарисовал, исчезло.Я знаю, что мне нужен какой-то picturebox.invalidate().Я просто не уверен, как его использовать.

Вот мой код, чтобы хорошо понять, что я делаю.

public Form1()
    {
        InitializeComponent();

        DrawArea = new Bitmap(pictureBox1.Size.Width, pictureBox1.Size.Height );
        pictureBox1.Image = DrawArea;

        objGraphics = this.pictureBox1.CreateGraphics();
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
            drawImage(e);
    }

    public void drawImage(MouseEventArgs e)
    {
        Rectangle rDraw = new Rectangle();

        if (e.Button == MouseButtons.Left)
        {
            rDraw.X = e.X;
            rDraw.Y = e.Y;
            rDraw.Width = 3;
            rDraw.Height = 3;
            objGraphics.DrawEllipse(System.Drawing.Pens.Black, rDraw);
        }
    }

    private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "Image Files(*.jpg; *.bmp)|*.jpg; *.bmp";
            if (open.ShowDialog() == DialogResult.OK)
            {
                Bitmap bit = new Bitmap(open.FileName);

                pictureBox1.Size = bit.Size;
                DrawArea = bit;
                pictureBox1.Image = bit;
            }
        }
        catch (Exception)
        {
            throw new ApplicationException("Failed loading image");
        }
    }

Большое спасибо!

1 Ответ

0 голосов
/ 29 ноября 2011

Вам необходимо нарисовать событие Paint в окне рисунка.

Вы (почти) никогда не должны рисовать на CreateGraphics().

...