Сглаживаются пиксели в PictureBox
Во время вывода картинки маленького размера в PictureBox возникла проблема. Пиксели отображаются не четко( желаемый резльтат ), а сглажено. Создаю Bitmap, затем копирую его в более большой. Результата нет. Как это исправить?
Bitmap Pic1 = new Bitmap(160, 90);
Bitmap Pic2 = new Bitmap(Pic, new Size(picturebox1.Height, picturebox1.Wight));
picturebox1.Image = Pic2;
Ответы (2 шт):
Нельзя лит написать размеры картинки и picturebox?
Из вопроса непонятно.: вы уменьшаете картинку или увеличиваете?
Если уменьшаете - можно делать это с использованием того или иного метода ресайза, подробнее - здесь
Пиксели при этом всё равно поплывут, но это будет не так заметно.
Если увеличиваете - а чего тогда вы ожидаете? Что комп дорисует пиксели, чтобы картинка оставалась четкой? Есть простой способ - увеличивать в кратное количество раз, напрмиер 48x64 в 96x128
Можно отрисовать изображение с качеством 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;
Результат будет такой же, как в вашем изначальном варианте.
Чтобы добиться лучшего результата, нужно использовать какие-либо внешние библиотеки для работы с растровой графикой.
Идеальным вариантом будет использование векторной графики. Её можно растягивать и сжимать как угодно без потери качества.