转载图像处理

1、HBITMAP 和CBitmap
 HBITMAP转成CBitmap: 
CBitmap*   pcBmp   =   CBitmap::FromHandle(hBmp); 
CBitmap   bmp;  
  bmp.Attach(hbmp); 
   
CBitmap转成HBITMAP:   
HBITMAP   hBmp   =   (HBITMAP)cBmp;
CBitmap*   pBmp;  
HBITMAP   hBmp   =   (HBITMAP)(*pBmp);//(HBITMAP)是CBitmap类重载了的操作符.  

2、装载图片(png格式不可以)
(1)

//FileName:路径名称

HBITMAP General::LoadALLPIC(char * FileName)
{
 IPicture* p=NULL;
 IStream* s=NULL;
 HGLOBAL hG;
 void* pp;
 FILE* fp;
 // Read file in memory
 fp = fopen(FileName,"rb");//打开文件
 if (!fp)
 {
  return NULL;
 }
 
 fseek(fp,0,SEEK_END);
 int fs = ftell(fp);
 fseek(fp,0,SEEK_SET);
 hG = GlobalAlloc(GPTR,fs);
 if (!hG)
 {
  fclose(fp);
  return NULL;
 }
 pp = (void*)hG;
 fread(pp,1,fs,fp);
 fclose(fp);
 
 CreateStreamOnHGlobal(hG,false,&s);
 if (!s)
 {
  GlobalFree(hG);
  return NULL;
 }
 
 OleLoadPicture(s,0,false,IID_IPicture,(void**)&p);
 
 if (!p)
 {
  s->Release();
  GlobalFree(hG);
  return NULL;
 }
 
 s->Release();
 GlobalFree(hG);
 
 HBITMAP hB = 0;
 p->get_Handle((unsigned int *)&hB);
 
 // Copy the image.Necessary, because upon p's release,
 // the handle is destroyed.
 HBITMAP hBB = (HBITMAP)CopyImage(hB,IMAGE_BITMAP,0,0,LR_COPYRETURNORG );
 
 p->Release();
 return hBB;
 
}

(2) 
// FileName: 待载入的图片的完整路径
//成功返回bitmap句柄,否则返回NULL
//出ico格式,其他格式图片均可
HBITMAP LoadALLPIC(char * FileName)
{
 CImage img;
 CString strPath;
 strPath = FileName;
 HRESULT ret = img.Load(strPath); // filename 是要加载的文件名(包含路径)
 if( !img.IsNull())
 {
  HBITMAP hBitmap = img.Detach();
  return hBitmap;
 }
 else
 {
  return NULL;
 }
}
(3)

//装载图片(非png格式)

//由导入的图片资源ID装载

//hBitmap = LoadPic(MAKEINTRESOURCE(IDR_GIF1), _T("GIF"));//调用
HBITMAP CProtectScreenDlg::LoadPic(LPCTSTR szResourceName, LPCTSTR szResourceType)
{
 ASSERT(szResourceName);
 ASSERT(szResourceType);
 
 HRSRC hPicture = FindResource(AfxGetResourceHandle(),szResourceName,szResourceType);
 HGLOBAL hResData;
 if (!hPicture || !(hResData = LoadResource(AfxGetResourceHandle(),hPicture)))
 {
  TRACE(_T("Load (resource): Error loading resource %s/n"),szResourceName);
  return FALSE;
 };
 DWORD dwSize = SizeofResource(AfxGetResourceHandle(),hPicture);
 
 // hResData is not the real HGLOBAL (we can't lock it)
 // let's make it real
 
 HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_NODISCARD,dwSize);
 if (!hGlobal)
 {
  TRACE(_T("Load (resource): Error allocating memory/n"));
  FreeResource(hResData);
  return FALSE;
 };
 
 char *pDest = reinterpret_cast<char *> (GlobalLock(hGlobal));
 char *pSrc = reinterpret_cast<char *> (LockResource(hResData));
 if (!pSrc || !pDest)
 {
  TRACE(_T("Load (resource): Error locking memory/n"));
  GlobalFree(hGlobal);
  FreeResource(hResData);
  return FALSE;
 };
 CopyMemory(pDest,pSrc,dwSize);
 FreeResource(hResData);
 GlobalUnlock(hGlobal);
 
//  BOOL bRetValue = Load(hGlobal,dwSize);
//  GlobalFree(hGlobal);
//  return bRetValue;

 IPicture* p=NULL;
 IStream* s=NULL;
 CreateStreamOnHGlobal(hGlobal,false,&s);
 if (!s)
 {
  GlobalFree(hResData);
  return NULL;
 }
 
 OleLoadPicture(s,0,false,IID_IPicture,(void**)&p);
 
 if (!p)
 {
  s->Release();
  GlobalFree(hGlobal);
  return NULL;
 }
 
 s->Release();
 GlobalFree(hGlobal);
 
 HBITMAP hB = 0;
 p->get_Handle((unsigned int *)&hB);
 
 // Copy the image.Necessary, because upon p's release,
 // the handle is destroyed.
 HBITMAP hBB = (HBITMAP)CopyImage(hB,IMAGE_BITMAP,0,0,LR_COPYRETURNORG );
 
 p->Release();
 return hBB;
}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hzy694358/archive/2010/04/30/5546236.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值