我正在尝试编辑一个8bpp像素。由于这个
尽管我可以通过将其转换为24bpp来编辑位图,但8bpp的编辑速度更快(13ms vs 3ms)。但是,在访问8bpp位图时更改每个值会导致一些随机的RGB颜色,即使PixelFormat仍然是8bpp。
我目前在C#中进行开发,算法如下:
PixelFormat
是indexed
,我知道它使用颜色表来映射像素值。尽管我可以通过将其转换为24bpp来编辑位图,但8bpp的编辑速度更快(13ms vs 3ms)。但是,在访问8bpp位图时更改每个值会导致一些随机的RGB颜色,即使PixelFormat仍然是8bpp。
我目前在C#中进行开发,算法如下:
- 以8bpp加载原始位图
- 创建与原始大小相同的8bpp空临时位图
- 锁定两个位图的位并使用P/Invoke调用C++方法,在其中传递每个
BitmapData
对象的Scan0
。(我使用C++方法是因为在迭代位图的像素时提供了更好的性能) - 根据某些参数创建一个
int[256]
调色板,并通过调色板将原始像素值传递到临时位图字节中进行编辑。 - 解锁位。