C #: Почему уменьшение размера изображений приводит к очень плохому качеству этих изображений?Все, что я могу сделать - PullRequest
2 голосов
/ 29 ноября 2010

Несколько дней назад я задал вопрос о , как уменьшить размер изображения при сохранении размеров его отношения .Я наконец смог заставить это работать.Теперь, когда пользователь загружает изображение, его 3 копии (с разными размерами) сохраняются в базе данных.

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

Должен ли я ожидать такого снижения качества?изображение выглядит очень плохо (как фото газеты).

Что я могу сделать?могущественная опция, которую мне нужно настроить в моем коде.

Спасибо за помощь

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

Я не совсем уверен, как работает код, на который вы ссылаетесь.

Вот лучший пример.

Изменение размера фотографического изображения с помощью GDI + для .NET

Суть этого:

Bitmap bmPhoto = new Bitmap(destWidth, destHeight, 
                            PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolution, 
                      imgPhoto.VerticalResolution);

Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;

grPhoto.DrawImage(imgPhoto, 
                  new Rectangle(destX,destY,destWidth,destHeight),
                  new Rectangle(sourceX,sourceY,sourceWidth,sourceHeight),
                  GraphicsUnit.Pixel);

Посмотрите на настройки как InterpolationMode, который позволяет вам контролировать качество (скорость обработки по сравнению с качеством).

3 голосов
/ 29 ноября 2010

Причина в том, что используемая вами функция Image.GetThumbnailImage предназначена только для создания изображений низкого качества.

См. Эти замечания в документации MSDN по GetThumbnailImage:

Метод GetThumbnailImage работает хорошо, когда запрашивается миниатюра изображение имеет размер около 120 х 120 пиксели. Если вы запросите большой уменьшенное изображение (например, 300 х 300) из изображения, которое имеет встроенный эскиз, может быть заметная потеря качества в уменьшенное изображение. Может быть лучше масштабировать основное изображение (вместо масштабирование встроенного эскиза) вызов метода DrawImage.

Хороший пример того, как выполнить высококачественное масштабирование изображения в C #, см. В этом вопросе:

Высокое качество масштабирования изображения C #

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