はじめての C#(3)

C# って言語もスゴイけど、.NET Framework もスゴイ。


ちょっとビットマップのパレット変換をやりたいと思ったんだけど、System.Drawing.Bitmap だとどうせ内部で ARGB8888 とかに変換してるだろうから、unsafe コードを使わないと無理だろうなぁとか思ってた訳です。
でも、違ってた。Bitmap クラスはちゃんとパレット変換出来るみたい(ノ∀`)

System.Drawing.Bitmap bitmap = new Bitmap(filename);
ColorPalette palette = bitmap.Palette;
for (int i = 0; i < palette.Entries.Length; i++)
{
    palette.Entries[i] = Color.FromArgb( i , i , i );
}
bitmap.Palette = palette;

しかもこれ、ちゃんと 1bit, 4bit, 8bit のインデックスカラーに対応してる。


フォーマット変換も一瞬

Bitmap bitmap2 = bitmap.Clone(
    new Rectangle(0, 0, bitmap.Width, bitmap.Height),
    PixelFormat.Format32bppArgb);

.NET sugeeeeeee!!