首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将ID2D1Bitmap转换为ImageSource

如何将ID2D1Bitmap转换为ImageSource
EN

Stack Overflow用户
提问于 2016-11-12 05:48:27
回答 2查看 1.2K关注 0票数 0

我正在使用Direct2D呈现目标,并且我有一个ID2D1Bitmap类型的对象。我需要在WPF窗口中显示这个位图,并且我正在考虑将这个位图托管到一个Image控件中。为了做到这一点,一个解决方案可以是将ID2D1Bitmap对象转换为System::Windows::Media::ImageSource对象,或者将位图保存到一个文件中,该文件可以在以后加载。

我试图寻找不同的方法,但没有任何结果,因为Direct2D API没有提供任何解决方案。

有没有办法做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2016-11-15 14:57:03

我为WPF和UWP应用找到的最好的解决方案是SharpDX。请参阅SharpDX website

我在过去曾尝试使用D2DWrappers (see the Microsoft site),但在我的UWP开发中,我发现SharpDX代码更易于使用。我也会对WPF有同样的想法,因为它也是C#代码。

票数 0
EN

Stack Overflow用户

发布于 2016-11-15 21:59:24

Direct2D位图是依赖于硬件设备的资源,通常不容易从系统的CPU端访问。因此,获取ID2D1Bitmap的像素是困难的,它既不是设计出来的,也不打算那样使用。任何从Direct2D位图中获取原始字节的机制通常都是通过创建一个WIC位图来访问字节流。通过这种方式,您可以将其写入文件甚至字节数组中,并使用某种互操作在C#中访问它。如果您想要将其写入文件并在WPF中读取它,此机制将会起作用。如果在处理过程中的某个时间将位图数据放在IWICBitmapSource对象中,并且可以对其进行缓存,则工作会更容易。这里回答了将System.Drawing.Bitmap转换为System.Windows.Media.ImageSource的问题:Converting Bitmap to ImageSource (感谢@MSL在评论中指出了上面的答案)。

在这一点上,您使用它的方式有点不清楚,更多一点关于预期用途的信息或一个简短的示例在这里会很有帮助。

EDIT 1:看看这个,所以Qn:Save ID2D1Bitmap to file和将ID2D1Bitmap保存到文件中的代码版本的注释。它实际上完成了到IWICBitmap的转换,并将其写出到文件中。在这一步,由于IWICBitmap继承自IWICBitmapSource,如果您愿意的话,您甚至可以使用CopyPixels()方法将位图数据转储到字节数组中。

现在,如果您采用将其保存到文件的方法,那么获取System.Drawing.Bitmap就像下面这样简单:

代码语言:javascript
运行
复制
bitmap = new Bitmap("<YOUR_BITMAP_FILENAME>")

您可以将其转换为BitmapImage,以便在WPF中使用,如下所示:

代码语言:javascript
运行
复制
using(MemoryStream memstream = new MemoryStream())
{
    bitmap.Save(memstream, ImageFormat.Bmp);
    memstream.Position = 0;
    BitmapImage bitmapImage = new BitmapImage();
    bitmapImage.BeginInit();
    bitmapImage.StreamSource = memstream;
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
    bitmapImage.EndInit();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40556759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档