//Эта статья была переведена www.blue1000.com , исходный адрес: http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx.
//Уважайте плоды чужого труда, при перепечатке указывайте источник.
GDI+ часто используется при написании программ. Он может сохранить темное изображение размером 32 бита на пиксель в виде файла gif, и этот процесс относительно прост. И прежде чем сохранять это gif-изображение с помощью метода CreateThumnailImage, вы также можете настроить его размер.
Часто используемые коды:
Приведенный выше код может завершить рисование и сохранение файлов gif, но вскоре вы обнаружите проблему: сгенерированная миниатюра Качество изображения файла .gif намного ниже наших ожиданий.
Эффект изображения:
Показанное выше низкокачественное зернистое изображение также требует обработки «квантования цвета» (палитизации). Это происходит потому, что GDI+ по умолчанию использует 256 цветов, не учитывая фактический цвет самого изображения.
После этого мы попытались создать свою «палитру», но результат оказался еще хуже :). Хороший алгоритм «квантования цвета» должен учитывать заполнение пространства между двумя пиксельными частицами переходным цветом, похожим на цвет двух пикселей, обеспечивая более видимое цветовое пространство.
Это алгоритм «Октри». Алгоритм Octree позволяет нам подключить собственный алгоритм для квантования наших изображений.
Вот две статьи Microsoft, которые могут быть нам полезны: KB 319061 и Оптимизация квантования цвета для изображений ASP.NET (Морган Скиннер, Microsoft). Морган Скиннер предоставляет хороший код алгоритма Octree, который вы можете скачать для справки.
Использовать OctreeQuantizer легко:
System.Drawing.Bitmap b = новый System.Drawing.Bitmap("c:\original_image.gif");
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
OctreeQuantizer quantizer = новый OctreeQuantizer (255, 8);
используя (Растровое изображение квантовано = quantizer.Quantize (thmbnail) )
{
quantized.Save("c:\thumnail.gif", System.Drawing.Imaging.ImageFormat.Gif);
}
OctreeQuantizer Grayquantizer = новый GrayscaleQuantizer ();
используя (Bitmap Quantized = Grayquantizer.Quantize (thmbnail))
{
quantized.Save("c:\thumnail.gif", System.Drawing.Imaging.ImageFormat.Gif);
}
Картинка эффекта следующая (намного красивее?):