目前我自己只知道三种方法
一、LoadBitmap
功能:
可从一个执行模块中载入指定的位图。
原型:
HBITMAP LoadBitmap( __in HINSTANCE hInstance, __in LPCTSTR lpBitmapName);
参数:
hInstance [in]
包含位图的模块句柄
lpBitmapName [in]
以’/0’结尾的字符串,包含将要载入位图资源名字。可使用MAKEINTRESOURCE将资源ID号转换。
返回值:
如果成功,返回位图句柄,否则返回NULL。
备注:
如果文件名不存在或内存不足,函数执行失败。
当不再使用LoadBitmap对象时,调用DeleteObject删除该对象。
示例:
HBITMAP hBitmap = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BMP));
二、SHLoadImageResource
功能:
将视图文件转换成位图文件。视图资源文件必须在资源文件中包含。
原型:
HBITMAP SHLoadImageResource (HINSTANCE hinst,UINT uIdImageFile);
参数:
hinst
【in】资源句柄
uIdImageFile
【in】视图文件标号
返回值:
如果成功,返回位图句柄,否则返回NULL。
备注:
转换文件的类型包括GIF、PNG、JPG、ICO、BMP
当不再使用SHLoadImageResource对象时,调用DeleteObject删除该对象。
示例:
HBITMAP hBitmap = SHLoadImageResource(g_hInstance, IDR_IMAGE);
三、SHLoadImageFile
功能:
读取视图文件,解压并返回位图句柄。
原型:
HBITMAP SHLoadImageFile ( LPCTSTR pszFileName);
参数:
pszFileName
[in] 将要载入的视图文件名
返回值:
如果成功,返回位图句柄,否则返回NULL。
备注:
转换文件的类型包括GIF、PNG、JPG、ICO、BMP
当不再使用SHLoadImageResource对象时,调用DeleteObject删除该对象。
示例:
HBITMAP hBmp = SHLoadImageFile((TEXT(//My Documents//My Pictures//Waterfall.jpg)));
HDC hBitmapDC;
HBITMAP hBitmap;
hBitmapDC = CreateCompatibleDC(hdc); //SHLoadImageResource(g_hInst,IDR_GIF1);//ok
hBitmap =SHLoadImageFile((TEXT("//My Documents//My Pictures//Waterfall.jpg")));
//SHLoadImageResource(g_hInst,IDR_GIF1);
CreateCompatibleBitmap(hdc,w,h);
SelectObject(hBitmapDC,hBitmap);
StretchBlt(hdc,20,30,w,h,hBitmapDC,0,0,w,h,SRCCOPY);
////////////////////////////////
#include <Imaging.h>
#pragma comment (lib,"Ole32.lib")
IImagingFactory *pImageFactory = NULL;
IImage *pImage = NULL;
HRESULT hr;
if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED)))
{
break;
}
HRESULT hrCreInstance = CoCreateInstance( CLSID_ImagingFactory, NULL,CLSCTX_INPROC_SERVER,IID_IImagingFactory, (void **)&pImageFactory);
HRESULT hrLoadFile = pImageFactory->CreateImageFromFile(TEXT("//My Documents//My Pictures//Waterfall.jpg"), &pImage);
if (S_OK != hrCreInstance || S_OK != hrLoadFile)
{
AfxMessageBox(L"加载图片失败!!!");
return;
}
pImage->Draw(hdc, &rt, NULL );
pImage->Release();
pImageFactory->Release();