我想从我的应用程序中的资源加载一个非BMP图像(在我的情况下,PNG)到一个位图/图像实例。由于位图构造函数只对位图资源负载过重,所以我这样做了:如何使用GDI +从资源加载图像?
我在全局堆上分配内存,然后将资源数据复制到其中。然后,我为该全局内存块(使用CreateStreamOnHGlobal)创建一个IStream,并使用接受该流的Image/Bitmap构造函数。基本上它的工作原理,虽然我不确定这是最好的方式: 我注意到,如果我创建图像后释放内存块,它不会被绘制(调用DrawImage不会产生任何东西)。这引发了两个问题:
如何管理该内存块的生存期?我怀疑它会在图像被破坏时被释放。
Image/Bitmap类是否使用压缩格式的png数据,并在每次调用DrawImage时将其转换为原始数据?看起来非常没有效率。
任何消耗?
CachedBitmap的问题在于它不能从Image继承,所以需要将其与“常规”位图区别对待。 我已经设法解决内存使用寿命问题,fortunatlly图像有一个虚拟的解构器,所以它很简单。但是,我仍然不确定这是否正确。 – Meat 2009-04-27 14:09:11