Полная потеря качества при изменении размера небольшого размера System.Drawing.Bitmap

Я сталкиваюсь с полной потерей качества при изменении размера System.Drawing.Bitmap меньшего размера. Я использовал растровое изображение размером 8 X 8 (в пикселях).

В то время как я изменяю его размер до 1 X 1, содержимое изображения полностью пустое.

Я подозревал, что это проблема размера, поэтому я снова изменил размер результирующего изображения (1 X 1) до 8 X 8. Выходное изображение снова пустое. Это показывает, что при изменении размеров растровых изображений произошла полная потеря качества.

Не могли бы вы сообщить мне, является ли это известной проблемой или есть какое-то решение для ее преодоления?

Найдите приведенные ниже шаги репликации и фрагмент кода.

Bitmap originalImage;
Bitmap resizedImage_1;
Bitmap resizedImage_2;

Шаг 1. Сохранение исходного образа на диск (для целей тестирования, чтобы проверить потери при доступе и сохранить его на локальный диск) - Потери не произошло

originalImage=(Bitmap)Image.FromFile("../../Images/Tiling image.bmp", true); // Size : 8 X 8 in pixel
originalImage.Save("original.bmp");

Шаг 2. Изменение размера изображения до 1 X 1 - потеря произошла

resizedImage_1 = new Bitmap(1, 1);
Graphics formGraphics = System.Drawing.Graphics.FromImage(resizedImage_1);
formGraphics.DrawImage(originalImage, new Rectangle(0, 0, 1, 1));
resizedImage_1.Save("Resized_1.bmp");
formGraphics.Dispose();

Шаг 3: Изменение размера результирующего изображения с шага 1 до 8 X 8 - потеря произошла

resizedImage_2 = new Bitmap(8, 8);
Graphics formGraphics = System.Drawing.Graphics.FromImage(resizedImage_2);
formGraphics.DrawImage(resizedImage_1, new RectangleF(0, 0, 1, 1));
resizedImage_2.Save("Resized_2.bmp");
formGraphics.Dispose();

Пожалуйста, найдите оригинальное изображение, используемое ниже.

Исходное изображение

Ваш совет будет с благодарностью.

Спасибо,

1 ответ

Изменение размера до одного пикселя всегда приведет к потере каждой детали, которая у вас есть. И увеличение размера на один пиксель... ну... Вы, вероятно, также потеряете цвет, потому что алгоритм изменения размера выбирает пиксели вокруг обрабатываемого пикселя, чтобы определить новый целевой пиксель. Это хорошо работает даже на небольших изображениях, например, на 80 пикселей, но в вашем случае на самом деле нет данных для начала.

В целом, масштабирование, кажется, работает хорошо, потому что результирующий одиночный пиксель имеет серый цвет, который является более или менее средним от источника:)

Если вам нужна уменьшенная версия изображений, я бы сказал, что нужно создавать их вручную.

Другие вопросы по тегам