2012-06-22 56 views
1

我想從資源加載PNG文件。有一個大致MFC-方式(與CResourceStream):從資源中加載png文件(無MFC,ATL)

CImage img; 
CResourceStream str(0, MAKEINTRESOURCE(id), _T("PNG")); 
img.Load(&str); 
CBitmap *bmp(CBitmap::FromHandle(img.operator HBITMAP()); 

但是一個項目是MFC-越來越ATL少。如何編寫以nonMFC風格加載png?據我瞭解,這個目的可以通過GDI實現+

編輯:在加載png適當implementationthe answer

+0

你可以試試libpng:http://gnuwin32.sourceforge.net/packages/libpng.htm或者這個:http://www.codeproject.com/Articles/3537/Loading-JPG-PNG-resources-using- GDI – fritzone

回答

2

那麼,GDI +流可以輕鬆地創建PNG數據的HBITMAP一個IStream或文件,但從一個資源到一個IStream需要一些工作。

如果您調用CreateStreamOnHGlobal(NULL,TRUE,& stm),其中stm是一個IStream *變量,它基本上會爲您提供臨時內存中的流。您可以使用FindResource,LoadResource,LockResource和SizeofResource來獲取指向您的資源數據及其大小的指針。一旦你有了這兩件事情,你就可以使用IStream :: Write將資源中的數據複製到IStream中。

將IStream與PNG數據相關後,將IStream傳遞給GDI + Bitmap constructor,並使用GetHBITMAP method獲取HBITMAP。

+0

@VincentProvirk如何將資源數據從資源指針寫入istream? – Mavie