C#_C++ からもらった Bitmap^ を PictureBox.Image に代入しスクロールをすると赤バツ

OpenCV_画像を IplImage型 で読み込んで System::Drawing::Bitmap^ に変換 の続き。

Debug で動かしてたが、ネイティブコードのデバッグを有効にしていなかった。
有効にすると下記のエラー。

Application.Run(new FormMain());
読み取り中にアクセス違反が発生しました。
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。
他のメモリが壊れていることが考えられます。

 

Graphics を追記してみたが NG 。 

    Bitmap bmp = C++/CLI から Bitmap を受け取るメソッド
    using (Graphics graphic = Graphics.FromImage(bmp))
    {
        graphic.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
    }
    pictureBox.Image = bmp;

graphic.DrawImage で「読み取り中にアクセス違反が発生しました」エラー。

C++/CLI で cv::Ptr<IplImage> の個所を IplImage* に変更すると、
正常に表示され、スクロールバーを動かしても問題ないようになった。

IplImage * Bitmap 同じ場所参照しているから
IplImage * 消えると Bitmap も消えるもよう。

 

 

しかし、IplImage 型のポインタ を解放する必要があるのだけど。
LockBits / UnlockBits でコピーするらしい…。逆もしかり。

こちらから。
https://imagingsolution.net/program/opencv/iplimage2bitmap/

以上。