GDIでPNGを読み込む

GDIでは通常PNGファイルを読み込むことはできないらしい。

どうしても読み込む必要があったのでちょっと調べてみた

http://code.logos.com/blog/2008/09/displaying_a_splash_screen_with_c_part_i.html

このやり方でうまく読み込めるのだが、どうやらマシンによっては読み込みにFailする。一応XPSP3から使えるとなっているのだが。。。

仕方がないのでGDI+を用いました。

HBITMAP LoadImage( HINSTANCE hinst, LPCTSTR pszName, LPCTSTR pszType )
{
		HRSRC hRes = FindResource(hinst, pszName, pszType);
		DWORD Size = SizeofResource(hinst, hRes);
		HGLOBAL hData = LoadResource(hinst, hRes);
		const void *pData = LockResource(hData);
		HGLOBAL hBuffer = GlobalAlloc(GMEM_MOVEABLE, Size);
		void *pBuffer = GlobalLock(hBuffer);
		CopyMemory(pBuffer, pData, Size);
		GlobalUnlock(hBuffer);

		IStream *pStream;
		CreateStreamOnHGlobal(hBuffer, TRUE, &pStream) ;
	 IStream *pStream=CreateStreamOnResource(hinst,pszName,pszType);

		Gdiplus::Bitmap* pBitmap = Gdiplus::Bitmap::FromStream(pStream);
		pStream->Release();
		HBITMAP ret;
		pBitmap->GetHBITMAP(Color(0,0,0,0),&ret);
		delete pBitmap;
	return ret;
}

GDIでPNGを読み込む” への2件のフィードバック

  1. utsubo

    ああ、そうですか
    どうもありがとうございます

  2. egtra

    Windows XPでWICが使える条件は、たしか.NET Frameworkの3.0あたりがインストールされていることだった気がします。

コメントは停止中です。