在VC中使用GDI+从自定义资源中加载图片

取之于网络,用之于网络

原来的网址:http://haohello.blog.163.com/blog/static/29566820111015104423311/


在VC中使用GDI+从自定义资源中加载图片

resources文件夹上点右键,选“Insert”,在弹出的“Insert Resource”对话框上点按钮“Import”,
打开一个“Import Resource”对话框,在对话框的下面有一个“Open as”选择“Custom”,
然后选择要导入的图片文件,在“Resource type”里输入导入的资源类型,
比如png文件,就输入“png”,bmp文件,就输入“bmp”(不带引号),或者从文本框下的列表框选择也可以。

完成后,点OK。

BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image * & pImg);
nID 资源ID
sTR 资源类型:"bmp","png","gif",...
pImg 指向一个Image类的引用的指针


调用时,首先定义一个Image:
Image * img = NULL;
然后调用函数:
ImageFromIDResource(IDR_BMP1,  "bmp",(Image*&)img);
其中IDR_BMP1为自定义资源的ID,bmp为自定义资源类型
然后就可以调用GDI+绘图了:
Graphics g(hdc);
g.DrawImage(img,0,0,0,0,48,48,UnitPixel);
最后要释放资源:
delete img;

函数定义:
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image * & pImg) 

    HINSTANCE hInst = AfxGetResourceHandle(); 
    HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type 
    if (!hRsrc) 
        return FALSE; 
    // load resource into memory 
    DWORD len = SizeofResource(hInst, hRsrc); 
    BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc); 
    if (!lpRsrc) 
        return FALSE; 
    // Allocate global memory on which to create stream 
    HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len); 
    BYTE* pmem = (BYTE*)GlobalLock(m_hMem); 
    memcpy(pmem,lpRsrc,len); 
    IStream* pstm; 
    CreateStreamOnHGlobal(m_hMem,FALSE,&pstm); 
    // load from stream 
    pImg=Gdiplus::Image::FromStream(pstm); 
    // free/release stuff 
    GlobalUnlock(m_hMem); 
    pstm->Release(); 
    FreeResource(lpRsrc); 
    return TRUE; 

对话框程序调用方法:

void CGDIpTestDlg::OnOK()
{
 // TODO: Add extra validation here

 HDC hdc=GetDC()->m_hDC;
 Graphics g(hdc);
 
 Image * img = NULL;
 ImageFromIDResource(IDR_BMP1,  "bmp",(Image * &)img);
 g.DrawImage(img,0,0,0,0,100,100,UnitPixel);
 delete img;

 ImageFromIDResource(IDR_PNG1,  "png",(Image * &)img);
 g.DrawImage(img,50,0,20,20,20,20,UnitPixel);
 delete img;

 ImageFromIDResource(IDR_GIF1,  "gif",(Image * &)img);
 g.DrawImage(img,100,0,0,0,40,40,UnitPixel);
 delete img;

 ImageFromIDResource(IDR_PNG3,  "png",(Image * &)img);
 g.DrawImage(img,150,0,0,0,96,96,UnitPixel);
 delete img;

 //CDialog::OnOK();
}

不知道为什么画ICON的时候背景不透明


HBITMAP构造gdi+Bitmap 

http://fengqing888.blog.163.com/blog/static/330114162012713338729/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值