画像をいじる時に使うSystem.Drawing.Bitmapクラス。
PixelFormatをFormat1bppIndexedとかFormat8bppIndexedとかにするとピクセルデータの他にカラーテーブルを持つ。
カラーテーブルはPaletteプロパティ。
このようにカラーテーブルを持つフォーマットの場合、色はPaletteプロパティの値を変えるのだが、以下のようなコードではうまくセットされない。
ダメな例
var bitmap = new System.Drawing.Bitmap(8, 8, System.Drawing.Imaging.PixelFormat.Format1bppIndexed); bitmap.Palette.Entries[0] = System.Drawing.Color.FromArgb(255, 255, 0, 0); bitmap.Palette.Entries[1] = System.Drawing.Color.FromArgb(255, 255, 255, 255);
どうやら、Paletteプロパティは、カラーテーブルの参照を返すのではなくクローンが帰ってくるらしい。
なので、カラーテーブルを取得して値を変えた後、Paletteプロパティへセットし直さなければならない。
(ちなみにColorPaletteクラスはコンストラクタが無いのでPaletteプロパティから取るしかない)
正しい例
var bitmap = new System.Drawing.Bitmap(8, 8, System.Drawing.Imaging.PixelFormat.Format1bppIndexed); var palette = bitmap.Palette; palette.Entries[0] = System.Drawing.Color.FromArgb(255, 255, 0, 0); palette.Entries[1] = System.Drawing.Color.FromArgb(255, 255, 255, 255); bitmap.Palette = palette;
コメントをお書きください