2017-09-11 25 views
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 

ありがとうございます。

答えて

0

私はそうのように、これを解決した:これは最高の/最もefficent方法(より提案を開いて)ですが、それが動作するように見える場合

public BitmapSource convertBitmap(Bitmap source) 
     { 
      return Imaging.CreateBitmapSourceFromHBitmap(source.GetHbitmap(), IntPtr.Zero, 
    Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); 
     } 


IntPtr frame = GetBlankFrame(); 
       Bitmap blank = new Bitmap(600, 800, 3 * 600, System.Drawing.Imaging.PixelFormat.Format24bppRgb, frame); 

       BitmapSource src = convertBitmap(blank); 

わかりません。

関連する問題