| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 925 人关注过本帖
标题:一个显示透明图片的函数,有谁可以对它进行改进吗?
只看楼主 加入收藏
afliult
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-7-22
收藏
 问题点数:0 回复次数:3 
一个显示透明图片的函数,有谁可以对它进行改进吗?
在资源中导入图片 :     


定义ID为 IDB_QZH

使用方法为:
CBitmap QzhBMP;
QzhBMP.LoadBitmap(IDB_QZH);
CDC ImageDC;
ImageDC.CreateCompatibleDC(pDC);
CBitmap *pOldImageBMP = ImageDC.SelectObject(&QzhBMP);
TransparentBlt(pDC->m_hDC, 0, 0, 218, 199, ImageDC.m_hDC, 0, 0, 218, 199, RGB(0,0,0xff));
ImageDC.SelectObject(pOldImageBMP);

函数原型:

void TransparentBlt( 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,     // 源高度
     UINT crTransparent  // 透明色,COLORREF类型
     )
{
 HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest,
nHeightDest); // 创建兼容位图
 HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL);
  // 创建单色掩码位图
 HDC  hImageDC = CreateCompatibleDC(hdcDest);
 HDC  hMaskDC = CreateCompatibleDC(hdcDest);
 hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
 hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);
 // 将源DC中的位图拷贝到临时DC中
 if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
  BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc,
nYOriginSrc, SRCCOPY);
 else
  StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest,
     hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc,
nHeightSrc, SRCCOPY);
 // 设置透明色
 SetBkColor(hImageDC, crTransparent);
 // 生成透明区域为白色,其它区域为黑色的掩码位图
 BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);
 // 生成透明区域为黑色,其它区域保持不变的位图
 SetBkColor(hImageDC, RGB(0,0,0));
 SetTextColor(hImageDC, RGB(255,255,255));
 BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
 // 透明部分保持屏幕不变,其它部分变成黑色
 SetBkColor(hdcDest,RGB(255,255,255));
 SetTextColor(hdcDest,RGB(0,0,0));
 BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0,
SRCAND);
 // "或"运算,生成最终效果
 BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0,
0, SRCPAINT);
 // 清理、恢复
 SelectObject(hImageDC, hOldImageBMP);
 DeleteDC(hImageDC);
 SelectObject(hMaskDC, hOldMaskBMP);
 DeleteDC(hMaskDC);
 DeleteObject(hImageBMP);
 DeleteObject(hMaskBMP);
}

程序能正常使用
我现在使用位图     作掩码位图,
ID 为 IDR_MASK
请问应怎样对程序进行修改?
搜索更多相关主题的帖子: 函数 ImageDC IDB pDC QzhBMP 
2007-12-07 16:51
afliult
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-7-22
收藏
得分:0 
图像显示不了,还是以附件方式上传

mask.rar (1.15 KB)
2007-12-07 16:59
chengyukyo1
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-10-18
收藏
得分:0 
时空穿梭 魔幻斗法 把c++当动漫理解就好了
2007-12-07 20:48
afliult
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2007-7-22
收藏
得分:0 
怎么没有人回答呀?
2007-12-09 09:29
快速回复:一个显示透明图片的函数,有谁可以对它进行改进吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012742 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved