私はかなり大きな画像(2550by4500)を表示するpictureBoxがあるwinformアプリケーションを持っています。このビットマップ イメージは、次のように、安全でないポインターを使用してバイト配列から変換されます。
Bitmap img;
unsafe
{
fixed (Byte* intPtr = &outBuffer[0])
img = new Bitmap(_width, _height, _width * 3, System.Drawing.Imaging.PixelFormat.Format24bppRgb, new IntPtr(intPtr));
}
これまでのところ、問題はありません。画像を表示した後、この DLL ( http://www.mathworks.com/matlabcentral/fileexchange/16319 )を使用して、ピクセル値を Matlab .mat ファイルに保存しました。それでも、保存には問題ありません。
しかし、pictureBox 内の画像はノイズの多い白黒画像のようになり、元の画像は完全に失われました。
私が試したこと:
- ウォッチ ウィンドウにビットマップを追加し、ピクセル値がすべて変更されたことを確認しました。ビットマップが壊れています。
- 保存後に毎回この安全でない変換を再度実行すると、別の問題が発生します:「Drawing.dll の AccessViolationException」。
保存をスキップしてもまったく問題ないため、何かが .mat 保存部分に関係している必要があります。しかし、それらがどのように関連しているかはわかりません、記憶ですか?小さいサイズの画像を試してみましたが、問題ありません。だから私は、「.mat を保存」プロセスがビットマップを破損したと仮定していますか?
どんなアイデアでも役に立ちます!ありがとうございました