现在的位置: 首页 > 综合 > 正文

TransparentBlt用法

2013年12月13日 ⁄ 综合 ⁄ 共 1379字 ⁄ 字号 评论关闭

TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。
Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用该函数。
TransparentBlt函数原型如下: 

BOOL TransparentBlt(
HDC hdcDest,      // 目标DC
int nXOriginDest,   // 目标X偏移
int nYOriginDest,   // 目标Y偏移
int nWidthDest,     // 目标宽度
int hHeightDest,    // 目标高度
HDC hdcSrc,         // 源DC
int nXOriginSrc,    // 源X起点
int nYOriginSrc,    // 源Y起点
int nWidthSrc,      // 源宽度
int nHeightSrc,     // 源高度
UINT crTransparent  // 透明色,COLORREF类型
);

使用例子: 

 CBitmap DispBmp;
 CBitmap *OldBmp;
 CDC SourceDC;
 DispBmp.LoadBitmap("TEST_BITMAP");//如果是IDB_XXX则不需加引号!
 SourceDC.CreateCompatibleDC(PDC);
 OldBmp = SourceDC.SelectObject(&DispBmp);
 ::TransparentBlt(PDC->m_hDC,0, 0,128, 128, SourceDC.m_hDC,0,0,128,128,RGB(0,0,0));
 SourceDC.SelectObject(OldBmp);

 

要注意的是TransparentBlt函数使用的位图是8位或者24位的。

此外,还有两个相近的函数:StretchBlt 和 BitBlt,那么他们的区别在何处?

BOOL StretchBlt                                     //此函数将一个位图资源从一个矩形区域拷贝到另一个矩形区域,即缩放位图,但不能指定透明色

( int x, //指定目的矩形区域左上角的X坐标 

 int y, //指定目的矩形区域左上角的Y坐标

 int nWidth, //指定目的矩形区域的宽度

 int nHeight, //指定目的矩形区域的高度

 CDC* pSrcDC, 

 int xSrc, //指定源矩形区域左上角的X坐标

 int ySrc, //指定源矩形区域左上角的Y坐标

 int nSrcWidth, //指定源矩形区域的宽度 

int nSrcHeight, //指定源矩形区域的高度 

DWORD dwRop //此参数参考MSDN,SRCCOPY类型为直接拷贝 ); 


BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); //此函数同样用来拷贝位图资源,但不具备缩放功能。

也就是说:bitblt直接按你指定的大小输出源dc到目标dc,而strechblt会调整你源dc大小,使之适应你所指定的目标dc大小,再输出。strechblt输出的图总是能够充填满你指定的目标DC区域,而bitblt输出的图无法布满目标dc制定区域。

抱歉!评论已关闭.