2011-04-11 44 views
19

我一直在编写PCX解码器,到目前为止,PCX图像本身解析得很好,但我无法弄清楚如何设置位图的调色板。无法在位图中设置调色板

我已创建的位图如下所示:

Bitmap bmp = new Bitmap(width, 
         height, 
         stride2, 
         System.Drawing.Imaging.PixelFormat.Format8bppIndexed, 
         pixels); 

但我似乎不能使用下面的方法来设置调色板:

for (int i = 0; i < 256; i += 3) 
{ 
    Color b = new Color(); 
    b = Color.FromArgb(palette[i], palette[i + 1], palette[i + 2]); 
    bmp.Palette.Entries.SetValue(b, i); 
} 

在本例中,我已通过每个读字节在pcx文件的调色板中,并存储在调色板[]中。从那里,我用它来设置位图的调色板中的条目。我如何设置颜色?

+0

不用担心,现在修好了。 – user646265 2011-04-20 09:45:05

回答

29

这让我感到困惑。它似乎bitmap.Palette返回位图的调色板的克隆。一旦你修改了你的副本,你需要使用bitmap.Palette = palette来重置位图的调色板。

ColorPalette palette = bitmap.Palette; 
Color entries = palette.Entries; 
.... 
entries[i] = new Color(...); 
.... 
bitmap.Palette = palette; // The crucial statement 

http://www.charlespetzold.com/pwcs/PaletteChange.html

+0

是的,我认为你是对的,它会返回一个克隆,这是我知道的唯一解释。 – Pedro77 2013-12-13 14:33:07