我正在尝试将非bmp图像(在我的情况下为png)从我应用中的资源加载到Bitmap / Image实例中。由于Bitmap构造函数只有位图资源的重载,这就是我的意思:
我在全局堆上分配内存,然后将资源数据复制到其中。然后我为该全局内存块创建一个IStream(使用CreateStreamOnHGlobal)并使用获取该流的Image / Bitmap构造函数。基本上它可以工作,虽然我不确定这是最好的方法: 我注意到如果我在创建图像后释放该内存块,则不会被绘制(调用DrawImage将不会产生任何内容)。这提出了两个问题:
如何管理该内存块的生命周期?我怀疑它会因图像的破坏而被解除分配。
Image / Bitmap类是否使用压缩形式的png数据,并在每次调用DrawImage时将其转换为原始数据?似乎效率很低。
任何sugestions?
答案 0 :(得分:2)
使用非位图资源时,我的代码来自codeproject。
IStream* pStream = NULL;
::CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream)
m_pBitmap = Gdiplus::Bitmap::FromStream(pStream);
pStream->Release();
在从流中创建位图后查看该代码,然后在流上调用Release()
以删除流上的引用计数,从而将流的生命周期与Bitmap绑定。
然后你可以使用你希望管理该指针的任何机制。
答案 1 :(得分:0)
将位图转换为CachedBitmap,然后摆脱内存。