Проблема преобразования PixelFormat
Это мой код:
BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
UnmanagedImage img = new UnmanagedImage(bmpData);
//MAIN BLOCK
BayerDithering filter = new BayerDithering();
img = new UnmanagedImage(img.ImageData, img.Width, img.Height, img.Stride, PixelFormat.Format8bppIndexed);
filter.ApplyInPlace(img);
//END MAIN BLOCK
bitmap.UnlockBits(bmpData);
Это результат: скриншот
Почему результат не компилируется? И что я должен изменить только в "ГЛАВНОМ БЛОКЕ"?
1 ответ
img = new UnmanagedImage(..., img.Stride, PixelFormat.Format8bppIndexed);
Это утверждение, где проблема началась. Вы передаете данные пикселей и шаг 24-битного изображения, но солгали и сказали, что это 8-битное изображение. В результате получается изображение с разрешением 24 бит на пиксель и тщательно запутанный фильтр.
Это не может работать, преобразование из 24bpp в 8bpp намного сложнее. Изображение 8bpp не только будет иметь другой формат пикселя и шаг, оно также требует таблицу цветов (иначе палитра). Трудно создать хорошую таблицу цветов с 256 цветами, которая дает разумно совпадающее изображение с 8bpp.
Вам понадобится один из классов в пространстве имен AForge.Imaging.ColorReduction, чтобы выполнить эту работу.