C++ でビルドされた DLL があり、Mat オブジェクトを返します。その画像情報は 384*384*24 色です。
C# コード
Bitmap a = new Bitmap(384, 384, 3 * 384, PixelFormat.Format24bppRgb, test1());
pictureBox0.Image = a;
C++ コード
uchar* DLL_EXPORT test1(void)
{
Mat OriginalImg = imread("c:\\20100812133.jpg", 1 );
return OriginalImg.data;
}
コード上は問題ありませんが、画像を灰色で読みたいです。画像処理(例:Threshod)を行い、色に変換し、C# に戻って表示します。
C++ コード
uchar* DLL_EXPORT test0(void)
{
Mat OriginalImg = imread("c:\\20100812133.jpg", 0 );
threshold(OriginalImg,OriginalImg,0,255,THRESH_OTSU);
cvtColor(OriginalImg,OriginalImg,CV_GRAY2BGR);
return OriginalImg.data;
}
C++ コードが失敗しました。助けてもらえますか?
アップデータ http://ppt.cc/h2SI写真が失敗です。原因はメモリだと思います。C# コードの 3 番目のパラメーター 3*384 を 2*384 に修正します。C# は正常に実行されますが、画像は次のように壊れていますhttp://ppt.cc/IRfd
-- 更新
Bitmap a = new Bitmap(384, 384, 1 * 384, PixelFormat.Format24bppRgb, test0());
Bitmap a = new Bitmap(384, 384, 2 * 384, PixelFormat.Format24bppRgb, test0());
Bitmap a = new Bitmap(384, 384, 3 * 384, PixelFormat.Format24bppRgb, test0());
Bitmap a = new Bitmap(384, 384, 2 * 384, PixelFormat.Format32bppRgb, test0());
Bitmap a = new Bitmap(384, 384, 3 * 384, PixelFormat.Format32bppRgb, test0());
Bitmap a = new Bitmap(384, 384, 4 * 384, PixelFormat.Format32bppRgb, test0());
私は6を試して、実行はOKですが、画像は壊れています。