- PR -

C# Bitmapクラスでカラーパレットを指定する方法

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-04-17 18:22
Bitmapクラスでカラーパレットを指定したいのですが、Paletteプロパティに渡すColorPaletteの生成方法が分かりません。例えばColor構造体の配列を作成しましたが、これをどう操作すればColorPaletteクラスのインスタンスに変換できるのでしょうか

課題 9bit Grayスケールのbitmapファイルを作成したい。

private void button1_Click(object sender, System.EventArgs e)
{
// ***** カラーパレットの作成 *****
//
// 8bit Grayのパレット
//
// A,R,G,B
// パレット0 = 255,0,0,0
// パレット1 = 255,1,1,1
// パレット2 = 255,2,2,2
// ...
// パレット255 = 255,255,255,255
//
Color[] color = new Color[256];
for(int i = 0;i < 256;i++)
{
color[i] = Color.FromArgb(255,i,i,i);
}
//
// 疑問
// カラーパレットをBitmapクラスに知らせる方法が分からない
// Color[] → ColorPaletteクラス → bmp.Paletteプロパティ
//
ColorPalette palette = ???

// FrameのBitmap情報を生成する
byte[] data = new byte[640*480];
for(int i = 0;i < 480;i++)
{
for(int j = 0;j < 640;j++)
{
data[i*640+j] = (byte)(i % 256);
}
}

Bitmap bmp;
unsafe
{
fixed(byte* ptr1 = &data[0])
{
IntPtr ptr2 = (IntPtr)ptr1;
// 640*480 8bitGray
bmp = new Bitmap(640,480,640,PixelFormat.Format8bppIndexed,ptr2);
// カラーパレットを8bit Gray調整する
bmp.Palette = palette;

}
}
bmp.Save(@"c:\data\test123.bmp");


}

burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-04-17 20:32
ここが参考になるかもしれません。
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=436
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2005-04-17 21:37
ありがとうございます。下記のように修正してうまくいきました。

private void button1_Click(object sender, System.EventArgs e)
{
// FrameのBitmap情報を生成する
byte[] data = new byte[640*480];
for(int i = 0;i < 480;i++)
{
for(int j = 0;j < 640;j++)
{
data[i*640+j] = (byte)(i % 256);
}
}

Bitmap bmp;
unsafe
{
fixed(byte* ptr1 = &data[0])
{
IntPtr ptr2 = (IntPtr)ptr1;
// 640*480 8bitGray
bmp = new Bitmap(640,480,640,PixelFormat.Format8bppIndexed,ptr2);
// カラーパレットを8bit Gray調整する
ColorPalette palette = bmp.Palette;
for(int i = 0;i < palette.Entries.Length;i++)
{
palette.Entries[i] = Color.FromArgb(i,i,i);
}
bmp.Palette = palette;
}
}
bmp.Save(@"c:\data\test123.bmp",ImageFormat.Bmp);
}
1

スキルアップ/キャリアアップ(JOB@IT)