PixelFormat转换麻烦

时间:2013-04-07 06:34:16

标签: c# .net image-processing aforge 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);

结果为: screenshot

为什么结果不符合Oo?我必须在“ MAIN BLOCK ”中更改

1 个答案:

答案 0 :(得分:2)

img = new UnmanagedImage(..., img.Stride, PixelFormat.Format8bppIndexed);

这是问题开始的陈述。你正在传递像素数据和24bpp图像的步幅,但撒谎说它是一个8bpp的图像。结果仍然是24bpp图像和彻底混淆的过滤器。

这不起作用,从24bpp到8bpp的转换更为复杂。 8bpp图像不仅具有不同的像素格式和步幅,还需要颜色表(也称为调色板)。创建一个256色的好色表,很难产生合理匹配的8bpp图像。

你需要AForge.Imaging.ColorReduction命名空间中的一个类来完成这项工作。