2011-01-10 12 views
2

C#で4ビットのPNGファイルを作成しようとしていますが、コードが機能しません。ここC#で4ビットPNGを作成するにはどうすればよいですか?

コードがある:

Bitmap bmp = new Bitmap(200, 50, PixelFormat.Format4bppIndexed); 
string f = bmp.PixelFormat.ToString(); 
Graphics gImage = Graphics.FromImage(bmp); 
gImage.FillRectangle(Brushes.Red, 0, 0, bmp.Width - 20, bmp.Height - 20); 
gImage.DrawRectangle(Pens.White, 0, 0, bmp.Width - 20, bmp.Height - 20); 
gImage.DrawString("Test", SystemFonts.DefaultFont, Brushes.White, 5, 8); 
bmp.Save("C:\\buttons_normal1.png",ImageFormat.Png); 

コード起因Format4bppIndexedに設定PixelFormatプロパティにグラフィックgImageラインで例外をスロー。最終的なビットマップが4ビットに変換できることを示唆した解決策を見ましたが、そのコードは私のために働いたことはありません。

提案がありますか?

答えて

1

問題は、インデックス付きピクセル形式のGraphicsオブジェクトを作成できないことです。

1つの解決策は、描画を行うために別の形式でGraphicsオブジェクトを作成し、PixelFormat.Format4bppIndexed形式で空のビットマップを作成し、各ピクセルを1つのイメージから別のイメージにコピーすることです。

+0

各ピクセルのコピー方法のサンプルコードを投稿できますか? –

+0

@Mert - Bitmap.GetPixelとBitmap.SetPixelを使って個々のピクセルを読み書きすることはできますが、これはかなり遅くなる可能性があります。より速い方法は、LockBitsを使用してメモリ内のピクセルデータに直接アクセスすることです。 Bob Powellはこのための優れたリソースです:http://www.bobpowell.net/lockingbits.htm – mbeckish

関連する問題