是否可以从 System.Drawing.Bitmap 创建 Avalonia.Media.Imaging.Bitmap?
Posted
技术标签:
【中文标题】是否可以从 System.Drawing.Bitmap 创建 Avalonia.Media.Imaging.Bitmap?【英文标题】:Is it possible to create Avalonia.Media.Imaging.Bitmap from System.Drawing.Bitmap? 【发布时间】:2020-12-03 01:33:06 【问题描述】:我正在 Avalonia 中编写一个应用程序并使用 OpenCvSharp 从相机中获取帧。这适用于 WPF - 我刚刚调用了
Image.Source = Mat.ToBitmapSource();
但这在 Avalonia 中不起作用,因为有不同类型的 Image 控件,以及不同类型的 Source 属性。
我尝试通过 MemoryStream 执行此操作,但随后 Bitmap 构造函数因 ArgumentNullException 而崩溃(尽管流不为空)。
【问题讨论】:
你有没有找到解决这个问题的方法?自从 System.Drawing 添加到 .NET 核心后,我现在正在探索同样的事情。 【参考方案1】:当然,我一问你,我就找到了解决办法。将图像加载到内存中,然后将其回调。
我遇到了相同类型的错误,但在我实现 using 语句后已解决。
//Place this in your class to create a class variable and create the System.Drawing.Bitmap Bitmap
private System.Drawing.Bitmap irBitmap = new System.Drawing.Bitmap(256, 192, PixelFormat.Format24bppRgb);
//Add this using statement to the function you're converting inside of
//to convert the System.Drawing.Bitmap to Avalonia compatible image for view/viewmodel
using (MemoryStream memory = new MemoryStream())
irBitmap.Save(memory, ImageFormat.Png);
memory.Position = 0;
//AvIrBitmap is our new Avalonia compatible image. You can pass this to your view
Avalonia.Media.Imaging.Bitmap AvIrBitmap = new Avalonia.Media.Imaging.Bitmap(memory);
如果您有任何问题或如何将其具体地与您的应用联系起来,请告诉我。之前提供的代码不多,所以我不知道如何为您的特定用例命名变量。
【讨论】:
完美!此代码有效。非常感谢,ryano!以上是关于是否可以从 System.Drawing.Bitmap 创建 Avalonia.Media.Imaging.Bitmap?的主要内容,如果未能解决你的问题,请参考以下文章