• 締切済み

C# データ配列から画像を作成する方法について

お世話になります。 ファイルからではなく、パレットやパターンのデータ配列から、 内部でイメージを作成して、表示できるようにする 方法を教えてください。 Javaでいうところの、MemoryImageSourceに当たると思うのですが、 表示までの流れを知りたいのです。 初心者で申し訳ありませんが、何卒よろしくお願いいたします。

みんなの回答

  • i-kujou
  • ベストアンサー率50% (13/26)
回答No.2

ビットマップイメージのバイト列は既に生成されている、という認識でよいでしょうか? BITMAPFILEHEADERを含むBITMAPイメージデータを byte[] bitmapimage で持っているとした場合、 Bitmap bmp = new Bitmap(new System.IO.MemoryStream(bitmapimage)); pictureBox1.Image = bmp; でビットマップを作成して、ピクチャーボックスに設定することで画像を表示できます。 ビットマップイメージを作るのが面倒という場合は、 Bitmap bmp = new Bitmap(width, height, pixelformat); で無地のビットマップを作成して、 BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); IntPtr ptr = bmpdata.Scan0; とすることにより、パターンのデータ配列を取得できるのでデータ配列をコピーすればよいと思います。 ただし、この方法ですとパレットを操作する方法はちょっと分かりませんでした。

tatapata
質問者

補足

i-kujouさん、ありがとうございます。 やはり、パレットのイメージは作成できないのでしょうか…。 そのところをクリアしたかったのですが、もう少し 方法を探ってみます。 引き続き、よろしくお願いいたします。

回答No.1

 こんばんは。  例えば、ピクチャーボックスが有り、ボタンが押されたら、データから読み込んでピクチャーボックスに表示される様にする場合、Bitmapクラスをパターン(イメージデータ)のサイズに合わせて作成し、ループで回転しながらパターンからデータを読んでSetPixel()で色彩を設定してあげれば良いのでは?  ただし、スピードは素晴らしく遅いみたいです。以下参考程度に。 //ボタンが押されたら・・・ private void button1_Click(object sender, EventArgs e) { //色彩テーブル(本当は何処かから引っ張ってくる) byte[,,] rgbTable = new byte[96, 64, 3]; //ビットマップクラスの作成 Bitmap bitmap = new Bitmap(96, 64); //ループで回転して書き込む for (int y = 0; y < bitmap.Height; ++y) { for (int x = 0; x < bitmap.Width; ++x) { //0がR、1がG、2がB Color color = Color.FromArgb(rgbTable[x, y, 0], rgbTable[x, y, 1], rgbTable[x, y, 2]); //色彩をビットマップにセットする bitmap.SetPixel(x, y, color); } } //ピクチャーボックスにビットマップクラスを渡す this.pictureBox1.Image = bitmap; //ピクチャーボックスの画面を更新する this.pictureBox1.Invalidate(); }

tatapata
質問者

補足

machongolaさん、ご返答ありがとうございます。 速度的に遅いというのは、少し問題です。 また、説明に書き忘れましたが、Directではなく IndexのImageで扱えるほうが希望です。 再び質問の継続をいたします。 わざわざお答えいただいたのに、すみません。

関連するQ&A