我试图编辑8bpp的像素。由于这PixelFormat索引,我知道它使用颜色表来映射像素值。尽管我可以通过将位图转换为24bpp来编辑位图,但8bpp编辑速度更快(13ms vs 3ms)。但是,访问8bpp位图时更改每个值会导致一些随机的rgb颜色,即使PixelFormat保持8bpp。编辑8bpp索引位图
我目前正在开发在C#和算法如下:
(C#)在8bpp的
2-
1-加载原始位图与和8bpp的创建空临时位图与原始大小相同
这两个位图的3-LockBits以及使用P/Invoke调用每个BitmapData对象的Scan0的C++方法。 (I使用C++方法通过位图的像素迭代时,因为它提供更好的性能)
(C++)
4-创建INT根据一些参数[256]调色板和通过使编辑临时位图字节原始像素值通过调色板。
(C#)
5- UnlockBits。
我的问题是如何编辑像素值,而不会有奇怪的RGB颜色,甚至更好,编辑8bpp位图的颜色表?
感谢您的回答。我知道我可以通过更改位图的调色板属性来修改位图的调色板。但是这样做太慢了。我希望有人能告诉我如何访问颜色表指针,以便我可以直接修改它。 SetPixel不起作用,也非常缓慢。 我不明白为什么像素被分配了rgb颜色,当我将其值从0(黑色)更改为100(应该是灰色,但是是红色)。 – 2010-04-07 15:20:15
嗯。 'Bitmap'从'Image'继承,因此具有相同的调色板。你可以简单地用'bm2.Palette = bm1.Palette'复制调色板。 – Nyerguds 2018-01-22 21:48:04