Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't set palette in bitmap

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?

like image 992
user646265 Avatar asked Apr 11 '11 20:04

user646265


1 Answers

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

like image 64
Stephen Avatar answered Oct 15 '22 04:10

Stephen