gpt4 book ai didi

c# - 从C++调用uv *作为cv::Mat到WPF应用程序BitmapSource?

转载 作者:行者123 更新时间:2023-12-02 16:38:09 25 4
gpt4 key购买 nike

我在C++中有一个基于opencv的dll。我需要在dll中加载cv::Mat镜像,然后从C#UI调用它。我曾在WinForms中工作,但现在正转向WPF。

我在dll中公开了以下功能:

__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;

}

在winForms应用程序中,我曾经使用它来创建位图:
 [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应用程序。为了显示图像,似乎我需要使用 BitmapSource而不是 Bitmap

我在尝试:
 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

我要去哪里错了?

谢谢。

最佳答案

我已经这样解决了:

   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);

不确定这是否是最好/最有效的方法(可以接受更多建议),但它似乎正在起作用。

关于c# - 从C++调用uv *作为cv::Mat到WPF应用程序BitmapSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46154805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com