- - PR -
C# Bitmapクラスでカラーパレットを指定する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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"); } |
|
投稿日時: 2005-04-17 20:32
ここが参考になるかもしれません。
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=436 |
|
投稿日時: 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