C # изменение размера индексированного цветового изображения и сохранение цветов - PullRequest
0 голосов
/ 28 января 2012

У меня есть Bitmap в индексированном формате с 256 цветами, мне нужно изменить его размер, чтобы я создал новый Bitmap в 24-битном формате RGB и нарисовал его, используя объект Graphics, поскольку не могу создать графический объект из индексированного растрового изображения. Затем мне нужно сохранить изображение с измененным размером обратно в формате индексированного цвета, поэтому я использую FormatConvertedBitmap для преобразования в индексированный цвет следующим образом:

BitmapSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
FormatConvertedBitmap converted = new FormatConvertedBitmap();
converted.BeginInit();
converted.Source = bitmapSource;
converted.DestinationFormat = System.Windows.Media.PixelFormats.Indexed8;
converted.DestinationPalette = new BitmapPalette(bitmapSource, 256);
converted.EndInit();

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

1 Ответ

1 голос
/ 28 января 2012

Да, это довольно неизбежно.Основное свойство, которым вы хотите управлять, чтобы повлиять на это, Graphics.InterpolationMode.Высококачественный выбор, такой как Bicubic, добавит много цветов к измененному изображению.Попытка вернуть 256 цветов приведет к зернистому изображению.Вместо этого вы можете использовать NearestNeighbor, чтобы уменьшить количество добавляемых цветов, но в итоге вы получите блочное изображение.

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

...