0
私はopencvベースのdllをC++で持っています。私はcv :: matイメージをdllにロードし、それをC#のUIから呼び出す必要があります。私はこれをWinFormsで動作させましたが、現在はWPFに移行しています。C++からWPFアプリケーションBitmapSourceへのuchar *としてのcv :: Matの呼び出し?
私はDLL内の次の関数を公開している:WinFormsのアプリケーションで
__declspec(dllexport)uchar* GetBlankFrame(void)
{
cv::Mat img = cv::imread("D://data/TestPattern.jpg", 1);
static cv::Mat tmp;
cv::cvtColor(img, tmp, CV_BGRA2BGR);
return tmp.data;
}
、私はビットマップを作成するためにこれを使用するために使用:
[DllImport("tester.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr GetBlankFrame();
IntPtr frame = GetBlankFrame();
Bitmap blank = new Bitmap(600, 800, 3 * 600, System.Drawing.Imaging.PixelFormat.Format24bppRgb, GetBlankFrame());
これが正常に動作します。
今、この機能をWPFアプリケーションに移行しようとしています。画像を表示するには、Bitmap
の代わりにBitmapSource
を使用する必要があるようです。
私がしようとしています:
IntPtr frame = GetBlankFrame();
BitmapSource srcFrame = Imaging.CreateBitmapSourceFromHBitmap(frame, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
をそれは私を与える:
私が間違っているつもりですAn unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in PresentationCore.dll
?
ありがとうございます。