2012-06-22 3 views
1

리소스에서 PNG 파일을로드하려고합니다. 이 (CResourceStream 포함) 대략 MFC-방법 :리소스에서 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의 적절한 implementation 쉽게 PNG 데이터에서 HBITMAP의를 만들 수 있습니다 the 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 +에서이 스트리밍 할 수있다 IStream 또는 파일이지만 리소스에서 IStream로 이동하는 데는 약간의 작업이 필요합니다.

stream이 IStream * 변수 인 CreateStreamOnHGlobal (NULL, TRUE, & stm)을 호출하면 기본적으로 임시 메모리 내 스트림을 제공합니다. FindResource, LoadResource, LockResource 및 SizeofResource를 사용하여 리소스 데이터 및 해당 크기에 대한 포인터를 가져올 수 있습니다. 일단이 두 가지가 있으면 IStream :: Write를 사용하여 리소스의 데이터를 IStream에 복사 할 수 있습니다.

PNG 데이터가있는 IStream이 있으면 IStream을 GDI + Bitmap constructor에 전달하고 GetHBITMAP method을 사용하여 HBITMAP을 가져옵니다.

+0

@VincentProvirk 리소스 포인터에서 리소스 데이터를 작성하는 방법 istream? – Mavie

관련 문제