Сглаживаются пиксели в PictureBox

Во время вывода картинки маленького размера в PictureBox возникла проблема. Пиксели отображаются не четко( желаемый резльтат ), а сглажено. Создаю Bitmap, затем копирую его в более большой. Результата нет. Как это исправить?

Bitmap Pic1 = new Bitmap(160, 90);
Bitmap Pic2 = new Bitmap(Pic, new Size(picturebox1.Height, picturebox1.Wight));
picturebox1.Image = Pic2;

Ответы (2 шт):

Автор решения: S.H.

Нельзя лит написать размеры картинки и picturebox?

Из вопроса непонятно.: вы уменьшаете картинку или увеличиваете?

Если уменьшаете - можно делать это с использованием того или иного метода ресайза, подробнее - здесь

Пиксели при этом всё равно поплывут, но это будет не так заметно.

Если увеличиваете - а чего тогда вы ожидаете? Что комп дорисует пиксели, чтобы картинка оставалась четкой? Есть простой способ - увеличивать в кратное количество раз, напрмиер 48x64 в 96x128

→ Ссылка
Автор решения: Alexander Petrov

Можно отрисовать изображение с качеством HighQualityBicubic. Это даст несколько лучший результат.

var pic2 = new Bitmap(pictureBox1.Width, pictureBox1.Height);

using (var g = Graphics.FromImage(pic2))
{
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.DrawImage(pic1, 0, 0, pic2.Width, pic2.Height);
}

pictureBox1.Image = pic2;

Но всё равно сильно увеличенное изображение будет мутным.
Здесь pic1 - оригинальное изображение.


Кстати, PictureBox имеет свойство SizeMode. Достаточно задать ему значение Zoom и можно обойтись без ручного создания увеличенного изображения. То есть pic2 создавать не нужно.

pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
pictureBox1.Image = pic1;

Результат будет такой же, как в вашем изначальном варианте.


Чтобы добиться лучшего результата, нужно использовать какие-либо внешние библиотеки для работы с растровой графикой.

Идеальным вариантом будет использование векторной графики. Её можно растягивать и сжимать как угодно без потери качества.

→ Ссылка