2010-10-19 1 views
1

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

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

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

ответ

2

Вашей проблемы на самом деле не с помощью метода 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); 
+0

спасибо - я дам ему попробовать, когда я рядом с моим компьютером и отправит u aagain - спасибо – Mariam