将图像结构从本机代码导出到托管

时间:2014-07-06 15:50:27

标签: wpf mfc c++-cli interop marshalling

我有一个本机代码库,每50毫秒创建一个图像。我想使用WPF将此图像渲染到WPF GUI视图中。

该图像是一个由boost :: numeric :: ublas :: matrix类型的数据结构构成的hbitmap。即我从一个浮点值矩阵开始,然后我创建一个HBITMAP,然后使用MFC的设备上下文绘制这个HBITMAP。但现在,我想用WPF GUI替换我的MFC GUI,因为它看起来更好。我计划使用C ++ / CLI来实现互操作。

我的问题如下:我应该如何设置跨越互操作边界的图像传输?

当它仍然是浮动结构时,我应该将它转移过来,还是在创建位图后转移?我听说编组工作对效率有很大影响,因此必须非常小心地处理。是否存在托管和本地通用的类型,可用于此?

我是一个完整的新手,我们非常感谢您分享的任何其他相关资源。

或者,有没有办法完全避免转移? - 通过从本机代码绘制到WPF GUI视图

我的应用程序对性能非常敏感,您建议的任何替代方案都会非常受欢迎。

1 个答案:

答案 0 :(得分:1)

我已经通过相同的选项发现 - 至少对于.NET 4.5 - InteropBitmap是最好的方式,只要你的图像保持相同的大小(例如某些东西)喜欢视频流。)

简而言之,您创建了一个内存映射文件(使用C ++ / CLI或带有p / invoke的C#),并将其用作像素数据的源。 InteropBitmap是在同一个内存映射文件上创建的,您可以在WPF中将其用作ImageSource

在我的应用程序中,后台线程更新MMF并使InteropBitmap无效,WPF前端正常绑定到图像源。