我正在尝试编辑 8bpp 的像素。由于此 PixelFormat 已编入索引,因此我知道它使用颜色表来映射像素值。尽管我可以通过将位图转换为 24bpp 来编辑位图,但 8bpp 的编辑速度要快得多(13 毫秒对 3 毫秒)。但是,在访问 8bpp 位图时更改每个值会导致一些随机 rgb 颜色,即使 PixelFormat 仍然是 8bpp。
我目前正在用c#开发,算法如下:
(C#)
1- 以 8bpp 加载原始位图
2-创建与原始大小相同的 8bpp 空临时位图
两个位图的 3-LockBits,并使用 P/Invoke 调用 c++ 方法,其中我传递每个 BitmapData 对象的 Scan0。(我使用了 C++ 方法,因为它在遍历位图的像素时提供了更好的性能)
(C++)
4- 根据一些参数创建一个 int[256] 调色板,并通过将原始像素值传递给调色板来编辑临时位图字节。
(C#)
5-解锁比特。
我的问题是如何在没有奇怪的 rgb 颜色的情况下编辑像素值,或者更好地编辑 8bpp 位图的颜色表?