把bmp图片的白色区域转化称透明

来源:互联网 发布:网页美工与网页制作 编辑:程序博客网 时间:2024/04/28 16:34


  HBITMAP hbmp,   hmask; //图象及掩码句柄  
  int w,   h; //图片宽和高  
   
  void   Bitmap::Load(char   *fn) //加载图片  
  {  
  DeleteObject(hbmp); //清空句柄  
  hbmp=(HBITMAP)LoadImage(  
  NULL,  
  fn, //完整文件路径  
  IMAGE_BITMAP,  
  0,  
  0,  
  LR_LOADFROMFILE   |   LR_CREATEDIBSECTION  
  );  
  DIBSECTION ds;  
  GetObject(hbmp,   sizeof(ds),   &ds); //得到图片矩形  
  w=ds.dsBmih.biWidth;  
  h=ds.dsBmih.biHeight;  
  }  
   
  void   Bitmap::CreateMask() //创建掩码  
  {  
  hmask=CreateBitmap(w,   h,   1,   1,   NULL); //创建黑白图片  
  HDC   bmpDC=CreateCompatibleDC(0);  
  HDC   maskDC=CreateCompatibleDC(0);  
  SelectObject(bmpDC,   hbmp);  
  SelectObject(maskDC,   hmask);  
   
  SetBkColor(bmpDC,   RGB(255,255,255)); //设置挖空的颜色  
  BitBlt(maskDC,   0,   0,   w,   h,   bmpDC,   0,   0,   SRCCOPY);//生成掩码  
  SetBkColor(bmpDC,   RGB(0,   0,   0));  
  SetTextColor(bmpDC,   RGB(255,   255,   255));  
  BitBlt(bmpDC,   0,   0,   w,   h,   maskDC,   0,   0,   SRCAND);//把挖空部分涂成黑色  
   
  DeleteDC(bmpDC);  
  DeleteDC(maskDC);  
  }  
   
  void   Bitmap::Draw(HDC   ddc,   int   dx=0,   int   dy=0,   int   dw=0,   int   dh=0,   int   sx=0,   int   sy=0)  
  {  
  if(!dw)   dw=w;  
  if(!dh)   dh=h;  
   
  HDC   bmpDC=CreateCompatibleDC(ddc);  
  SelectObject(bmpDC,   hbmp);  
   
  HDC   maskDC=CreateCompatibleDC(ddc);  
  SelectObject(maskDC,   hmask);  
   
  BitBlt(ddc,   dx,   dy,   dw,   dh,   maskDC,   sx,   sy,   SRCAND);  
  BitBlt(ddc,   dx,   dy,   dw,   dh,   bmpDC,   sx,   sy,   SRCPAINT);  
   
  DeleteDC(maskDC);  
  DeleteDC(bmpDC);  
  }

原创粉丝点击