用Windows GDI 绘图时设置透明色
2008-12-31 12:10
267 查看
void DrawTransparent(int x,int y,CDC *pDC,CBitmap *pBitmap,COLORREF Color,CRect* rect)
{
BITMAP bm;
pBitmap->GetObject(sizeof(BITMAP),&bm);
CDC ImageDC;
ImageDC.CreateCompatibleDC(pDC);
CBitmap *pOldImageBitmap=ImageDC.SelectObject(pBitmap);
CDC MaskDC;
MaskDC.CreateCompatibleDC(pDC);
CBitmap MaskBitmap;
MaskBitmap.CreateBitmap(bm.bmWidth,bm.bmHeight,1,1,NULL);
CBitmap *pOldMaskBitmap=MaskDC.SelectObject(&MaskBitmap);
ImageDC.SetBkColor(Color);
MaskDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&ImageDC,0,0,SRCCOPY);
CDC OrDC;
OrDC.CreateCompatibleDC(pDC);
CBitmap OrBitmap;
OrBitmap.CreateCompatibleBitmap(&ImageDC,bm.bmWidth,bm.bmHeight);
CBitmap *pOldOrBitmap=OrDC.SelectObject(&OrBitmap);
OrDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&ImageDC,0,0,SRCCOPY);
OrDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MaskDC,0,0,0x220326);
CDC TempDC;
TempDC.CreateCompatibleDC(pDC);
CBitmap TempBitmap;
TempBitmap.CreateCompatibleBitmap(&ImageDC,bm.bmWidth,bm.bmHeight);
CBitmap *pOldTmepBitmap=TempDC.SelectObject(&TempBitmap);
TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,pDC,x,y,SRCCOPY);
TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MaskDC,0,0,SRCAND);
TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&OrDC,0,0,SRCPAINT);
if (rect!=NULL)
pDC->BitBlt(x,y,rect->Width(),rect->Height(),&TempDC,rect->left,rect->top,SRCCOPY);
else
pDC->BitBlt(x,y,bm.bmWidth,bm.bmHeight,&TempDC,0,0,SRCCOPY);
TempDC.SelectObject(pOldTmepBitmap);
OrDC.SelectObject(pOldOrBitmap);
MaskDC.SelectObject(pOldMaskBitmap);
ImageDC.SelectObject(pOldImageBitmap);
}
{
BITMAP bm;
pBitmap->GetObject(sizeof(BITMAP),&bm);
CDC ImageDC;
ImageDC.CreateCompatibleDC(pDC);
CBitmap *pOldImageBitmap=ImageDC.SelectObject(pBitmap);
CDC MaskDC;
MaskDC.CreateCompatibleDC(pDC);
CBitmap MaskBitmap;
MaskBitmap.CreateBitmap(bm.bmWidth,bm.bmHeight,1,1,NULL);
CBitmap *pOldMaskBitmap=MaskDC.SelectObject(&MaskBitmap);
ImageDC.SetBkColor(Color);
MaskDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&ImageDC,0,0,SRCCOPY);
CDC OrDC;
OrDC.CreateCompatibleDC(pDC);
CBitmap OrBitmap;
OrBitmap.CreateCompatibleBitmap(&ImageDC,bm.bmWidth,bm.bmHeight);
CBitmap *pOldOrBitmap=OrDC.SelectObject(&OrBitmap);
OrDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&ImageDC,0,0,SRCCOPY);
OrDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MaskDC,0,0,0x220326);
CDC TempDC;
TempDC.CreateCompatibleDC(pDC);
CBitmap TempBitmap;
TempBitmap.CreateCompatibleBitmap(&ImageDC,bm.bmWidth,bm.bmHeight);
CBitmap *pOldTmepBitmap=TempDC.SelectObject(&TempBitmap);
TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,pDC,x,y,SRCCOPY);
TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MaskDC,0,0,SRCAND);
TempDC.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&OrDC,0,0,SRCPAINT);
if (rect!=NULL)
pDC->BitBlt(x,y,rect->Width(),rect->Height(),&TempDC,rect->left,rect->top,SRCCOPY);
else
pDC->BitBlt(x,y,bm.bmWidth,bm.bmHeight,&TempDC,0,0,SRCCOPY);
TempDC.SelectObject(pOldTmepBitmap);
OrDC.SelectObject(pOldOrBitmap);
MaskDC.SelectObject(pOldMaskBitmap);
ImageDC.SelectObject(pOldImageBitmap);
}
相关文章推荐
- Windows GDI绘图基础知识
- windows编程学习笔记(4)GDI绘图
- Windows编程里,怎样设置窗口背景透明
- GDI函数设置图片透明 GetDiBits取不到数据的情况
- "旋转的风车"----windows(GDI)绘图
- QT下的几种透明效果(QPalette背景白色,窗口设置setWindowOpacity,QPainter使用Clear模式绘图)
- C语言Windows程序设计 -> 第九天 -> GDI绘图基础
- Windows 中绘图以及Windows 的图形设备接口(GDI )
- GDI透明绘图
- c# GDI+简单绘图(四):实现仿WINDOWS 画板功能
- 后台绘图设置背景透明
- c# GDI+简单绘图(四):实现仿WINDOWS 画板功能
- C语言Windows程序设计 -> 第九天 -> GDI绘图基础
- [转] 为MicroWindows添加透明绘图函数
- Windows图形设备接口(GDI)及Windows绘图
- GDI绘图之设置文本背景色为透明度
- 使用GDI在windows中绘图(一)——windows 4000 GDI原理
- VS2010 MFC对话框程序如何在windows桌面用GDI绘图,并用裁剪区限制绘图区
- 半透明AlphaBlend函数简析&SOUI在GDI渲染下text控件不能设置半透明解决方案
- Windows GDI绘图-入门篇