I have been writing a PCX decoder and, so far, the PCX image itself parses fine, but I can't work out how to set the palette of a bitmap.
I have created a bitmap like so:
Bitmap bmp = new Bitmap(width, height, stride2, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, pixels);
But I can't seem to set the palette using the following method:
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); }
In this example, I have read through each byte in the palette of the pcx file and stored them in palette[]. from there, I have used this to set the entries in the palette of the bitmap. How do I set the colours?
This had me confused too. It seems bitmap.Palette returns a clone of the bitmap's palette. Once you've modified your copy, you need to reset the bitmap's pallete by using bitmap.Palette = palette
, e.g.
ColorPalette palette = bitmap.Palette; palette.Entries[i] = new Color(...); .... bitmap.Palette = palette; // The crucial statement
See http://www.charlespetzold.com/pwcs/PaletteChange.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With