CBitmap从硬盘加载bmp图片和png图片的函数

6 篇文章 1 订阅

需要用到GDIPlus

1、png的显示

1)可以用把png转换成CBitmap进行显示,应该会丢失透明度信息,如下:

Gdiplus::Color colorW(255, 255, 255, 255);
HBITMAP hbmReturn = NULL; 
Gdiplus::Bitmap image( wsPath.c_str() );
image.GetHBITMAP( colorW, &hbmReturn );

CBitmap cBmp;
BOOL bRes = cBmp.Attach( hbmReturn );

2)用Graphics的DrawImage函数。

load Png资源

    HINSTANCE hInst = GetModuleHandle(0);
    //HRSRC hResource = FindResource(hInst,L"res\\stupe_bkg01.png",L"PNG");     //fail,不能直接通过路径load PNG图片
    HRSRC hResource = FindResource(hInst, MAKEINTRESOURCE(IDR_PNG1), L"PNG");
    DWORD res = GetLastError();

2、jpg显示

1)同png的显示1),把jpg转换成CBitmap进行显示。

2)   同png的显示2),只是load资源的时候,要是使用jpg类型的,GDI+同样也是支持的。

3) 使用windows提供的IPicture方法。

3、向指定区域输出图片

需要把图片load到兼容HDC里面,然后调用BitBlt方法进行输出。

4、png图片有透明的信息,如果放在一个背景图片上面,需要把png覆盖到的背景画到hdc中,在内存中和png合成后,再显示出来。




bool LoadBmpPic(const CString strBmpPath, CBitmap &bmp)
{
 HBITMAP   bitmap;
 try
 {
  bmp.Detach();
  bitmap = (HBITMAP)::LoadImage(NULL,strBmpPath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE|LR_DEFAULTSIZE);
  if (bmp.Attach(bitmap))
   return true;
 }
 catch(...)
 {
  return false;
 }
 return true;
}

///
//
 CDC memdc;
 memdc.CreateCompatibleDC(pDC);
 CBitmap    bmBkgnd, *pOldBitmap = NULL;
 HBITMAP   bitmap;
 BITMAP    bm;
 bmBkgnd.Detach();
 bitmap = (HBITMAP)::LoadImage(NULL,strPath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE|LR_DEFAULTSIZE);
 
 //bitmap = (HBITMAP)::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_WAITPIC));
 
 bmBkgnd.Attach(bitmap);
 pOldBitmap = memdc.SelectObject(&bmBkgnd);
 bmBkgnd.GetBitmap(&bm);

 下面分MFC和SDK两种方式讨论LoadBitmap的问题。
    1、如果采用MFC方式,可以使用 AfxGetResourceHandle保存当前的资源文件句柄,即你说的hInst。也可以使用AfxSetResourceHandle设置资源DLL的句柄,如:
     hDll=LoadLibrary("ResourceDLL.dll");
     if(hDll==NULL)
     AfxMessageBox("Can't Load the library");
     else AfxMessageBox("success");
     AfxSetResourceHandle(hDLL);
     ...
    }
    这样以后你再使用LoadBitmap时,图片将来自你的资源DLL,而不是.exe文件。如果你在程序中还要使用.exe中的资源,你需要在 AfxSetResourceHandle之前,先使用 AfxGetResourceHandle保存当前的资源文件句柄。
    2、SDK方式。在WinMain中,第一个参数都是HINSTANCE。你也可以LoadLibrary获得的句柄。
    我估计你要从硬盘上读取图片,可以参考QA000913 "如何打开、读入、显示和保存BMP文件"、QA002959 "TC中如何编程装入并显示一幅BMP,PCX,JPG等位图图象"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值