Пожалуйста, помогите мне с image.GetThumbnailImage (это создает изображение очень низкого качества) - PullRequest
1 голос
/ 19 октября 2010

Я использую этот код для создания миниатюр

System.Drawing.Image.GetThumbnailImageAbort abort = new System.Drawing.Image.GetThumbnailImageAbort(this.ThumbnailCallback);
System.Drawing.Image image2 = image.GetThumbnailImage((int)Math.Round((double)wid / difference), (int)Math.Round((double)hei / difference), abort, IntPtr.Zero);
image2.Save(str2, System.Drawing.Imaging.ImageFormat.Jpeg);
image2.Dispose();

, но я получаю это изображение очень низкого качества

alt text

, но оно должно быть такимодин

alt text

что я делаю неправильно или как этого добиться

1 Ответ

2 голосов
/ 19 октября 2010

Ваша проблема не в методе GetThumbnailImage(), а в том, как вы сохраняете файл. Вам необходимо указать уровень качества сохраняемого вами JPEG-файла, или, по-видимому, он всегда имеет очень низкое значение.

Рассматривайте этот код как руководство (он взят из старого проекта .NET 2.0; код все еще отлично работает, скомпилированный под 4.0, но в 4.0 может быть более прямой метод; у меня никогда не было причин проверять) *

ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo jpegEncoder = null;
for (int x = 0; x < encoders.Length; x++) {
    if (string.Compare(encoders[x].MimeType, "image/jpeg", true) == 0) {
        jpegEncoder = encoders[x];
        break;
    }
}
if (jpegEncoder == null) throw new ApplicationException("Could not find JPEG encoder!");
EncoderParameters prms = new EncoderParameters(1);
prms.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80L);
bitmap.Save(fileName, jpegEncoder, prms);
...