public static Mat ToMat(SoftwareBitmap source)
{
var writable = new WriteableBitmap(source.PixelWidth, source.PixelHeight);
source.CopyToBuffer(writable.PixelBuffer);
var buffer = writable.PixelBuffer;
using var reader = DataReader.FromBuffer(buffer);
var bytes = new byte[buffer.Length];
reader.ReadBytes(bytes);
var mat = new Mat(source.PixelHeight, source.PixelWidth, DepthType.Cv8U, 4);
mat.SetTo(bytes);
return mat;
}
2条答案
按热度按时间9gm1akwq1#
作为一个可能的解决方案-您可以将所需的C++编写的库链接到您的C#项目。
mf98qq942#
在玩了几个小时这些东西之后。我带来了解决方案。我唯一不喜欢的是它必须在UI线程上执行(如果它在WinUI 3中调用不同,请抱歉)。
字符串
我在行为中执行这段代码,所以我像这样运行它。如果我在线程池中的线程中运行代码,我会得到一个异常。第一个月
型
更新另一种方法是使用Emgu.CV.Bitmap库将Mat转换为Bitmap对象
型
之后,Bitmap可以转换为
SoftwareBitmap
或直接在应用程序中使用。Bitmap
可以显示在WinUI3Image
控件上。