GDI+初始化bitmap对象

2025-05-01 07:13:28
推荐回答(1个)
回答1:

你这个都没指定图片的路径。这里有个装载图片的例子,指定路径及图片的后缀名即可。

	/////////////////////////////////////////////////////////////////////
// Defined class for GDI Plus Image.
class CImageHelper
{
// Constructor and destructor.
public:
CImageHelper() : m_pImage(NULL), m_pBitmap(NULL)
{

}

~CImageHelper()
{
DeleteOldImage();
}

// Data members.
public:
Image* m_pImage;
Bitmap* m_pBitmap;

// Operations.
private:
void DeleteOldImage()
{
if (m_pBitmap)
{
delete m_pBitmap;
m_pBitmap = NULL;
m_pImage = NULL;
}
}

public:
// Load image from resource manager.
Image* Load_Image(ATL::_U_STRINGorID resource, ATL::_U_STRINGorID type = (UINT) 0)
{
DeleteOldImage();

// Load image from path.
if ( HIWORD(resource.m_lpstr) != NULL)
{
m_pImage = new Image(resource.m_lpstr);
if (m_pImage != NULL)
{
m_pBitmap = static_cast(m_pImage);
return m_pImage;
}

ATLASSERT(FALSE);
return NULL;
}
// Load PNG, JPG or JPEG...
else if (type.m_lpstr != NULL && type.m_lpstr != RT_BITMAP)
{
CResource res;
if( !res.Load(type, resource) ) return NULL;

DWORD dwSize = res.GetSize();
HANDLE hMemory = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
if( hMemory == NULL ) return NULL;

// Copy resource to memory.
memcpy(GlobalLock(hMemory), res.Lock(), dwSize);
GlobalUnlock(hMemory);

// Create stream that write to image.
IStream* pStream = NULL;
CreateStreamOnHGlobal(hMemory, TRUE, &pStream);
m_pBitmap = new Bitmap(pStream);
m_pImage = static_cast(m_pBitmap);
pStream->Release();
}
else
{
// This only loads BMP resources
m_pBitmap = new Gdiplus::Bitmap(_Module.GetResourceInstance(), (LPCWSTR) (UINT) resource.m_lpstr);
m_pImage = static_cast(m_pBitmap);
}

return m_pImage;
}

inline float GetWidth()
{
return (float)m_pImage->GetWidth();
}

inline float GetHeight()
{
return (float)m_pImage->GetHeight();
}
};