【发布时间】:2011-02-05 07:09:49
【问题描述】:
我正在尝试编辑 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 位图的颜色表?
【问题讨论】: