Как растянуть растровое изображение, чтобы заполнить PictureBox - PullRequest
3 голосов
/ 27 октября 2011

Мне нужно растянуть растровые изображения разных размеров, чтобы заполнить PictureBox. PictureBoxSizeMode.StretchImage делает то, что мне нужно, но не могу придумать, как правильно добавить текст или строки к изображению, используя этот метод. Изображение ниже - растровое изображение размером 5x5 пикселей, растянутое до 380x150 PictureBox.

using pictureBox.SizeMode = PictureBoxSizeMode.StretchImage

pictureBox.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox.Image = bmp;

Я пытался адаптировать этот пример и этот пример таким образом

using (var bmp2 = new Bitmap(pictureBox.Width, pictureBox.Height))
using (var g = Graphics.FromImage(bmp2))
{
    g.InterpolationMode = InterpolationMode.NearestNeighbor;
    g.DrawImage(bmp, new Rectangle(Point.Empty, bmp2.Size));
    pictureBox.Image = bmp2;
}

но получите это

using g.DrawImage(bmp, new Rectangle(Point.Empty, bmp2.Size))

Чего мне не хватает?

Ответы [ 2 ]

5 голосов
/ 27 октября 2011

Похоже, вы выбрасываете растровое изображение (bmp2), которое хотели бы видеть в окне с картинками! Блок using из примера, который вы разместили , используется, потому что код больше не нуждается в объекте Bitmap после возврата кода. В вашем примере вам нужно, чтобы Bitmap зависал, следовательно, нет using -блока для переменной bmp2.

Должно работать следующее:

using (bmp)
{
    var bmp2 = new Bitmap(pictureBox.Width, pictureBox.Height);
    using (var g = Graphics.FromImage(bmp2))
    {
        g.InterpolationMode = InterpolationMode.NearestNeighbor;
        g.DrawImage(bmp, new Rectangle(Point.Empty, bmp2.Size));
        pictureBox.Image = bmp2;
    }
}
3 голосов
/ 27 октября 2011

Красный X на белом фоне появляется, когда у вас есть исключение в методе рисования.

Ваша ошибка состоит в том, что вы пытаетесь назначить удаленное растровое изображение в качестве источника изображения вашего окна рисунка.Использование ключевого слова «using» приведет к удалению растрового изображения, которое вы используете в окне «картинка»!

Так что, я знаю, вашим исключением будет ObjectDisposedException:)

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

void ReplaceResizedPictureBoxImage(Bitmap bmp)
{
    var oldBitmap = pictureBox.Image;

    var bmp2 = new Bitmap(pictureBox.Width, pictureBox.Height);
    using (var g = Graphics.FromImage(bmp2))
    {
        g.InterpolationMode = InterpolationMode.NearestNeighbor;
        g.DrawImage(bmp, new Rectangle(Point.Empty, bmp2.Size));
        pictureBox.Image = bmp2;
    }

    if (oldBitmap != null)
        oldBitmap.Dispose();
}

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

...