在开发界面及棋牌游戏过程中,需要很多镂空的图片,而且图片形式一般比较固定.
所以封装了几种常见的镂空方法.
1. 用于没有掩码图,只有指定透明色,不进行伸缩
void DrawTransBitmap( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
COLORREF crTransparent // 透明色,COLORREF类型
);
 图片镂空算法集合[图](转)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMMmx0WVdkbGN5NWpjMlJ1TG01bGRDOXplVzUwWVhob2FXZG9iR2xuYUhScGJtY3ZUM1YwYkdsdWFXNW5TVzVrYVdOaGRHOXljeTlPYjI1bExtZHBaZz09)
适用图片: 图片镂空算法集合[图](转)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMM0F1WW14dlp5NWpjMlJ1TG01bGRDOXBiV0ZuWlhNdmNGOWliRzluWDJOelpHNWZibVYwTDNoMWQyVnBjWFZ1TDJOdmJuUmhZM1JmWm05c1pHVnlYMnhwWjJoMExtSnRjQT09)
2. 用于没有掩码图,只有指定透明色,可以进行伸缩
void DrawTransBitmap( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度
int nHeightSrc, // 源高度
COLORREF crTransparent // 透明色,COLORREF类型
);
适用图片:同1,可拉伸
3.指定掩码图,和掩码图属于不同图片
void DrawTransBitmap( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
HDC hdcMask, //掩码DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
COLORREF crTransparent // 透明色,COLORREF类型
);
适用图片:
和  图片镂空算法集合[图](转)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMM0F1WW14dlp5NWpjMlJ1TG01bGRDOXBiV0ZuWlhNdmNGOWliRzluWDJOelpHNWZibVYwTDNoMWQyVnBjWFZ1THpJd01pNWliWEE9)
4.指定图片和掩码图同属于一张图片
适用图片: 图片镂空算法集合[图](转)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMM0F1WW14dlp5NWpjMlJ1TG01bGRDOXBiV0ZuWlhNdmNGOWliRzluWDJOelpHNWZibVYwTDNoMWQyVnBjWFZ1THpJd01ERXlMbUp0Y0E9PQ==)
5.得到位图HRGN
HRGN CreateBitmapRgn(int nWidth,int nHeight,HBITMAP hbmp,COLORREF cTrans);
适用图片: 图片镂空算法集合[图](转)](/default/index/img?u=L2RlZmF1bHQvaW5kZXgvaW1nP3U9YUhSMGNEb3ZMM0F1WW14dlp5NWpjMlJ1TG01bGRDOXBiV0ZuWlhNdmNGOWliRzluWDJOelpHNWZibVYwTDNoMWQyVnBjWFZ1TDNCcFkySmhZMnN1WW0xdw==)
以下是完整代码
//用于没有掩码图,只有指定透明色,不进行伸缩
void CCommon::DrawTransBitmap( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
COLORREF crTransparent // 透明色,COLORREF类型
)
}