C # PictureBox очистить и правильно увеличить - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь очистить PictureBox в моем приложении Windows Form перед размещением изображения после его интерполяции.Я искал похожие ситуации, но такие вещи, как:

pictureBox1.Image=null;
pictureBox1.InitialImage=null;
pictureBox1.Invalidate();
pictureBox1.Dispose();

не работают ни в одной комбинации.Я использовал этот метод, чтобы открыть изображение и поместить его на PictureBox:

void openImage()
{
    DialogResult dr = openFileDialog1.ShowDialog();

    if (dr == DialogResult.OK)
    {
        file = System.Drawing.Image.FromFile(openFileDialog1.FileName);
        pictureBox1.Image = file;
        opened = true;
    }
}

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

Есть ли способ удалить исходное изображение и увеличить результат в окне?

Метод интерполяции (виновная часть кода): void bicubic (int newHeight, int newWidth) {

        Bitmap newImage = new Bitmap(file);
        using (Graphics gr = Graphics.FromImage(newImage))
        {
            gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gr.DrawImage(newImage, 0, 0, newWidth, newHeight);
        }
        pictureBox1.Image.Dispose();
        pictureBox1.Image = null;
        pictureBox1.Refresh();
       //pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox1.Image = newImage;
    }

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вы должны создать изображение без размера.В вашем коде вы создаете новое изображение с исходным размером

        Bitmap OrgImage = new Bitmap(file);
        Bitmap newImage = new Bitmap(newWidth, newHeight);
        using (Graphics gr = Graphics.FromImage(newImage))
        {
            gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
            gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
            gr.DrawImage(OrgImage, 0, 0, newWidth, newHeight);
        }
        pictureBox1.Image = newImage;

, это может решить вашу проблему

0 голосов
/ 27 мая 2018

PictureBox.SizeMode = PictureBoxSizeMode.StretchImage растянет изображение для вас.

Если вам нужны другие свойства размеров, просто прокрутите список PictureBoxSizeMode .

Что касается переназначения, настройка*1001* свойство Image для null должно быть достаточно

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