为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

透明BMP背景

2017-11-10 4页 doc 16KB 90阅读

用户头像

is_833902

暂无简介

举报
透明BMP背景透明BMP背景 //本函数把一种指定的颜色变成透明色,并可改变大小 // hdc 显示句柄 // hBitmap要显示的位图 // xStart,xStart显示的位置 // xadd,yadd显示的位图的大小变化:放大缩小 // 如:xadd=3表示位图宽度加3 // cTransparentColor变成透明的那种颜色 void TransparentBitmap(HDC hdc, HBITMAP hBitmap, int xStart, int yStart, int xadd , int yadd , ...
透明BMP背景
透明BMP背景 //本函数把一种指定的颜色变成透明色,并可改变大小 // hdc 显示句柄 // hBitmap要显示的位图 // xStart,xStart显示的位置 // xadd,yadd显示的位图的大小变化:放大缩小 // 如:xadd=3示位图宽度加3 // cTransparentColor变成透明的那种颜色 void TransparentBitmap(HDC hdc, HBITMAP hBitmap, int xStart, int yStart, int xadd , int yadd , COLORREF cTransparentColor) { BITMAP m_bm; COLORREF cColor; // 创建临时DC HDC hMem, hBack, hObject, hTemp, hSave; hBack = CreateCompatibleDC(hdc); hObject = CreateCompatibleDC(hdc); hMem = CreateCompatibleDC(hdc); hSave = CreateCompatibleDC(hdc); hTemp = CreateCompatibleDC(hdc); // 选入位图 SelectObject(hTemp, hBitmap); GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&m_bm); //显示位图宽高 POINT ptSize; // 取得位图的宽度 ptSize.x = m_bm.bmWidth; // 取得位图的该度 ptSize.y = m_bm.bmHeight; // 转换为逻辑点值 DPtoLP(hTemp, &ptSize, 1); // 创建临时位图 HBITMAP bmBack, bmObject, bmMem, bmSave; // 单色位图 bmBack = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL); bmObject = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL); // 与设备兼容位图 bmMem = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y); bmSave = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y); // 将创建的临时位图选入临时DC中 HBITMAP OldbmBack, OldbmObject, OldbmMem, OldbmSave; OldbmBack = (HBITMAP)SelectObject(hBack, bmBack); OldbmObject = (HBITMAP)SelectObject(hObject, bmObject); OldbmMem = (HBITMAP)SelectObject(hMem, bmMem); OldbmSave = (HBITMAP)SelectObject(hSave, bmSave); // 设置映射模式 SetMapMode(hTemp, GetMapMode(hdc)); // 先保留原始位图 BitBlt(hSave, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCCOPY); // 将背景颜色设置为需透明的颜色 cColor = SetBkColor(hTemp, cTransparentColor); // 创建目标屏蔽码 BitBlt(hObject, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCCOPY); // 恢复源DC的原始背景色 SetBkColor(hTemp, cColor); // 创建反转的目标屏蔽码 BitBlt(hBack, 0, 0, ptSize.x, ptSize.y, hObject, 0, 0, NOTSRCCOPY); // 拷贝主DC的背景到目标DC BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hdc, xStart, yStart, SRCCOPY); // 屏蔽位图的显示区 BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hObject, 0, 0, SRCAND); // 屏蔽位图中的透明色 BitBlt(hTemp, 0, 0, ptSize.x, ptSize.y, hBack, 0, 0, SRCAND); // 将位图与目标DC的背景左异或操作 BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hTemp, 0, 0, SRCPAINT); // 拷贝目标到屏幕上 StretchBlt(hdc, xStart, yStart, ptSize.x+xadd, ptSize.y+yadd, hMem, 0, 0, ptSize.x, ptSize.y,SRCCOPY); // 恢复原始位图 BitBlt(hTemp, 0, 0, ptSize.x, ptSize.y, hSave, 0, 0, SRCCOPY); // 删除临时内存位图 DeleteObject(SelectObject(hBack, OldbmBack)); DeleteObject(SelectObject(hObject, OldbmObject)); DeleteObject(SelectObject(hMem, OldbmMem)); DeleteObject(SelectObject(hSave, OldbmSave)); // 删除临时内存DC DeleteDC(hMem); DeleteDC(hBack); DeleteDC(hObject); DeleteDC(hSave); DeleteDC(hTemp); }
/
本文档为【透明BMP背景】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索