そこには多くのピクチャーボックスの質問があるようですが、ピクチャーボックスの内容を単にファイルからロードされたのではないビットマップに変更することを扱っているものは見つかりませんでした。
私のアプリケーションはバイトの配列を取り、それらからビットマップを生成します。中間の処理ステップとしてファイルに書き込むことは本当に避けたいです。
これはバイトの配列であり、2バイトの単語ではないため、グレースケールパレットを使用してインデックス付きビットマップを作成する必要がありました。
次に、インデックス付きのビットマップを通常のビットマップ(24ビットRGB)に変換しました。
これは私にとってエラーを引き起こしているコードです:
pictureBox1.Image = (System.Drawing.Image)bmp2;
フォームを表示すると(画像ボックスが描画しようとします)、スレッドは「System.Drawing.Image.get_RawFormat()のパラメーターが無効です」というメッセージを表示して実行を停止します。
私は何が間違っているのですか?ピクチャーボックス用の安全なビットマップを作成するにはどうすればよいですか?
これが「bmp2」を作成するものです。
//creating the bitmap from the array
System.Drawing.Bitmap bmp1 = new System.Drawing.Bitmap(100, 100, 100, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, MyIntPtr);
//creating a proper indexed palette
System.Drawing.Imaging.ColorPalette GrayPalette = bmp1.Palette;
for (int i = 0; i < GrayPalette.Entries.Length; i++)
{
GrayPalette.Entries[i] = Color.FromArgb(i, i, i);
}
bmp1.Palette = GrayPalette;
//creating a non-indexed, 24bppRGB bitmap for picturebox compatibility
System.Drawing.Bitmap bmp2 = new Bitmap(bmp1.Width, bmp1.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics gr = Graphics.FromImage(bmp2);
gr.DrawImage(bmp1, 0, 0);
gr.Dispose();
bmp1.Save(@ "testfile.bmp")を使用すると、異常がないように見える完全に許容できるビットマップが得られます。
ビットマップをpicturebox.Imageとして使用できないのはなぜですか?新しいビットマップをロードする前に変更する必要があるピクチャーボックスの追加パラメーターはありますか?