GDI+를 이용하여 PNG 파일을 로드하고 화면에 그리는 방법…
// PNG 드로잉
Graphics G2(dc.GetSafeHdc());
G2.DrawImage( m_bitmap, 60, 60 , m_bitmap->GetWidth(), m_bitmap->GetHeight() );
// PNG 파일 로드
Bitmap* Cpng_test1Dlg::PngFromResource(IN HINSTANCE hInst, IN const LPTSTR pName, IN const LPTSTR pType )
{
Bitmap* bitmap = NULL;
HRSRC hResource = ::FindResource(hInst, pName, pType);
if (!hResource) return NULL;
DWORD imageSize = ::SizeofResource(hInst, hResource);
if (!imageSize) return NULL;
const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
if (!pResourceData) return NULL;
HGLOBAL hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
if (hBuffer)
{
void* pBuffer = ::GlobalLock(hBuffer);
if (pBuffer)
{
CopyMemory(pBuffer, pResourceData, imageSize);
IStream* pStream = NULL;
if (::CreateStreamOnHGlobal(hBuffer, FALSE, &pStream) == S_OK)
{
bitmap = Bitmap::FromStream(pStream);
pStream->Release();
if (bitmap)
{
if (bitmap->GetLastStatus() != Ok)
{
delete bitmap;
bitmap = NULL;
}
}
}
::GlobalUnlock(hBuffer);
}
::GlobalFree(hBuffer);
}
return bitmap;
}
// PNG 드로잉
Graphics G2(dc.GetSafeHdc());
G2.DrawImage( m_bitmap, 60, 60 , m_bitmap->GetWidth(), m_bitmap->GetHeight() );
// PNG 파일 로드
Bitmap* Cpng_test1Dlg::PngFromResource(IN HINSTANCE hInst, IN const LPTSTR pName, IN const LPTSTR pType )
{
Bitmap* bitmap = NULL;
HRSRC hResource = ::FindResource(hInst, pName, pType);
if (!hResource) return NULL;
DWORD imageSize = ::SizeofResource(hInst, hResource);
if (!imageSize) return NULL;
const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
if (!pResourceData) return NULL;
HGLOBAL hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
if (hBuffer)
{
void* pBuffer = ::GlobalLock(hBuffer);
if (pBuffer)
{
CopyMemory(pBuffer, pResourceData, imageSize);
IStream* pStream = NULL;
if (::CreateStreamOnHGlobal(hBuffer, FALSE, &pStream) == S_OK)
{
bitmap = Bitmap::FromStream(pStream);
pStream->Release();
if (bitmap)
{
if (bitmap->GetLastStatus() != Ok)
{
delete bitmap;
bitmap = NULL;
}
}
}
::GlobalUnlock(hBuffer);
}
::GlobalFree(hBuffer);
}
return bitmap;
}
// PNG 드로잉 Graphics G2(dc.GetSafeHdc()); G2.DrawImage( m_bitmap, 60, 60 , m_bitmap->GetWidth(), m_bitmap->GetHeight() ); // PNG 파일 로드 Bitmap* Cpng_test1Dlg::PngFromResource(IN HINSTANCE hInst, IN const LPTSTR pName, IN const LPTSTR pType ) { Bitmap* bitmap = NULL; HRSRC hResource = ::FindResource(hInst, pName, pType); if (!hResource) return NULL; DWORD imageSize = ::SizeofResource(hInst, hResource); if (!imageSize) return NULL; const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource)); if (!pResourceData) return NULL; HGLOBAL hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize); if (hBuffer) { void* pBuffer = ::GlobalLock(hBuffer); if (pBuffer) { CopyMemory(pBuffer, pResourceData, imageSize); IStream* pStream = NULL; if (::CreateStreamOnHGlobal(hBuffer, FALSE, &pStream) == S_OK) { bitmap = Bitmap::FromStream(pStream); pStream->Release(); if (bitmap) { if (bitmap->GetLastStatus() != Ok) { delete bitmap; bitmap = NULL; } } } ::GlobalUnlock(hBuffer); } ::GlobalFree(hBuffer); } return bitmap; }