如何在 C++/WinRT (WinUI3) 中将图像从内存读取到 ImageSource?

问题描述 投票:0回答:1
xaml windows-runtime winui-3 memorystream c++-winrt
1个回答
0
投票

使用Stream已经彻底解决了这个问题。如前四期所述。

至于附加问题:

★1

使用 CreatStreamOnHGlobal 而不是 SHCreatMemStream

因为SHCreatMemStream在调用过程中会对传入的内存块参数进行另一次内存复制。

CreatStreamOnHGlobal 创建流后不执行内存复制。您可以先通过GlobalAlloc分配内存,写入所需的图像数据,然后调用CreatStreamOnHGlobal,无需任何时间开销。另外,可以将CreatStreamOnHGlobal的第二个参数设置为true,自动释放GlobalAlloc分配的内存。

通过进程内存监控,我发现对于同一个程序,使用CreatStreamOnHGlobal的速度是SHCreatMemStream的两倍,并且不会导致内存泄漏。

★2

创建的Stream需要调用Release方法减少一个引用。

IRandomAccessStream作为局部变量,会自动析构,无需主动释放。

并且BitmapImage还管理一部分引用,这些引用在离开作用域后被释放。

通过测试COM对象上Release方法的返回值,发现整个程序结束后引用计数又回到了0

© www.soinside.com 2019 - 2024. All rights reserved.