C++ WTL中怎么加载外部的图片显示到PICTRUE或者其他控件上,不是添加到资源..求教,在线等。。
1个回答
展开全部
我这里有个源代码例子,可以用GDI+的接口,将指定路径的图片,加载到内存中。
这里有个WTL GDI+的代码,你试试,指定好路径及文件类型。
ATLINLINE HBITMAP AtlLoadGdiplusImage(ATL::_U_STRINGorID bitmap, ATL::_U_STRINGorID type = (UINT) 0)
{
USES_CONVERSION;
static bool s_bInitied = false;
if( !s_bInitied ) {
s_bInitied = true;
Gdiplus::GdiplusStartupInput gsi;
Gdiplus::GdiplusStartupOutput gso;
ULONG uToken = 0;
Gdiplus::GdiplusStartup(&uToken, &gsi, &gso);
}
Gdiplus::Bitmap* pBitmap = NULL;
if( HIWORD(bitmap.m_lpstr) != NULL ) {
// Load from filename
pBitmap = new Gdiplus::Bitmap(T2CW(bitmap.m_lpstr));
}
else if( type.m_lpstr != NULL && type.m_lpstr != RT_BITMAP ) {
// Loading PNG, JPG resources etc
WTL::CResource res;
if( !res.Load(type, bitmap) ) return NULL;
DWORD dwSize = res.GetSize();
HANDLE hMemory = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
if( hMemory == NULL ) return NULL;
::memcpy(::GlobalLock(hMemory), res.Lock(), dwSize);
::GlobalUnlock(hMemory);
IStream* pStream = NULL;
if( FAILED( ::CreateStreamOnHGlobal(hMemory, TRUE, &pStream) ) ) {
::GlobalFree(hMemory);
return FALSE;
}
pBitmap = new Gdiplus::Bitmap(pStream);
pStream->Release();
}
else {
// This only loads BMP resources
pBitmap = new Gdiplus::Bitmap(_Module.GetResourceInstance(), (LPCWSTR) (UINT) bitmap.m_lpstr);
}
if( pBitmap == NULL ) return NULL;
HBITMAP hBitmap = NULL;
pBitmap->GetHBITMAP(NULL, &hBitmap);
delete pBitmap;
return hBitmap;
}
追问
- -就是加载显示一张外部图片啊,这个是不是太复杂了。。。有没有简单些的办法呢
追答
这个很简单啊,直接返回HBITMAP给你,你拿到HBITMAP,就可以用CDC来画了。而且支持PNG和JPG等图片格式。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询