|
Azulean さん
C#初心者の私にここまで教えていただきありがとうございます。 サイトのサンプルをかなり参考にさせていただきましたが、ようやく画像表示のプログラムができました。 C#移行の第一歩ですので、今後もご教授いただくかもしれません。
完成したプログラムのコードを下に書いておきます。 また、扱うraw画像は2Byteといっていましたが、もっと詳細にいうと10bitの画像でした。 ゆえに2bitシフトでプログラムは書いています。
C#特有のメソッドがまだ詳しくわかっていませんが、これから勉強していきます。 LockBits、stride、scan0、UnlockBitsなど。 C++ buildeになかったものは、やはり勉強しないと厳しいですねー。。
private void openRawButton_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() != DialogResult.OK) return;
short []image; int width, height;
width = height = 512;
image = new short [width * height];
//画像ファイルの読み込み BinaryReader fp = new BinaryReader(File.Open(openFileDialog1.FileName, FileMode.Open));
for (int i = 0; i < width * height; i++) image[i] = fp.ReadInt16();
fp.Close();
//Bitmapに画像を登録し、表示する Bitmap img = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData imgData = img.LockBits( new Rectangle(0, 0, img.Width, img.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
IntPtr currentPointer = imgData.Scan0;
int stride = imgData.Stride; byte[] oneLineData = new byte[width * 3]; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { // 3bytes per pixel byte value = (byte)(image[width * y + x] >> 2); oneLineData[x * 3] = value; oneLineData[x * 3 + 1] = value; oneLineData[x * 3 + 2] = value; } Marshal.Copy(oneLineData, 0, currentPointer, width * 3); currentPointer += stride; }
img.UnlockBits(imgData);
pictureBox1.Image = img; }
|