如何在一个背景图像上,做半透明的图。
如何才能实现这个背景图和最上层图的相互映射,完成半透明的效果?
---------------------------------------------------------------
用TransparentImage()就可以了,
要解决闪烁的问题就用双缓冲来实现,
在这里搜双缓冲可以得到大量的信息
---------------------------------------------------------------
你可以使用windows的一个api
AlphaBlend
用法和BitBlt差不多啊,很好用的,我们一直都用他.
BLENDFUNCTION bf;
bf.AlphaFormat=0;
bf.BlendFlags=0;
bf.BlendOp=AC_SRC_OVER;
bf.SourceConstantAlpha=100;//透明度0-255
AlphaBlend(hBackDC,0,70,73,20,hMaskDC,0,0,73,20,bf);
不可以在WindowsCE里用
---------------------------------------------------------------
http://www.vckbase.com/document/viewdoc.asp?id=532
里面有详细的介绍及代码
---------------------------------------------------------------
你可以参考一下下面的代码
这段代码就是创建一个半透明的位图:
其中的主要函数有
GetBitmapBits();
SetBitmapBits()
由于位图文件中的点是又红绿蓝三种颜色组成,所以位图文件在内存中的存储格式如下:
gbr gbr gbr gbr
..............
..............
从上面可以看出,每个点占3x1个像素,而且顺序是按gbr的顺序排列的,设置图象透明其实就是设置每个点的透明度,好好看看下面的代码吧!我想应该对你有帮助!
BITMAP bm;
int x,y,s,t,m,i=0;
GetClientRect(&rect);
mdc = new CDC;
bitmap = new CBitmap;
bgbmp = new CBitmap;
mdc->CreateCompatibleDC(dc);
bgbmp->m_hObject = (HBITMAP)::LoadImage(NULL,"bground.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE);
bitmap->m_hObject = (HBITMAP)::LoadImage(NULL,"girl.bmp",IMAGE_BITMAP,298,329,LR_LOADFROMFILE);
bitmap->GetObject(sizeof(BITMAP),&bm);
unsigned char *px = new unsigned char[bm.bmHeight*bm.bmWidthBytes];
bitmap->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px);
s = bm.bmHeight;
t = bm.bmWidth;
m = bm.bmWidthBytes;
for(y=0;y<bm.bmHeight;y++)
for(x=0;x<bm.bmWidth;x++)
{
//px[x*3+y*bm.bmWidthBytes] *= 0.5;
px[x*3+y*bm.bmWidthBytes] = (unsigned char)(px[x*3+y*bm.bmWidthBytes]*0.5);
//px[x*3+1+y*bm.bmWidthBytes] *= 0.5;
px[x*3+1+y*bm.bmWidthBytes] = (unsigned char)(px[x*3+1+y*bm.bmWidthBytes]*0.5);
//px[x*3+2+y*bm.bmWidthBytes] *= 0.5;
px[x*3+2+y*bm.bmWidthBytes] = (unsigned char)(px[x*3+2+y*bm.bmWidthBytes]*0.5);
}
bitmap->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px);
bgbmp->GetObject(sizeof(BITMAP),&bm);
unsigned char *py = new unsigned char[bm.bmHeight*bm.bmWidthBytes];
bgbmp->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,py);
for(y=100;y<100+s;y++)
{
i = (y-100)*m;
for(x=100;x<100+t;x++)
{
//py[x*3+y*bm.bmWidthBytes] = py[x*3+y*bm.bmWidthBytes]*0.5 + px[i];
py[x*3+y*bm.bmWidthBytes] = (unsigned char)(py[x*3+y*bm.bmWidthBytes]*0.5 + px[i]);//设置透明度为50%
//py[x*3+1+y*bm.bmWidthBytes] = py[x*3+1+y*bm.bmWidthBytes]*0.5 + px[i+1];
py[x*3+1+y*bm.bmWidthBytes] = (unsigned char)(py[x*3+1+y*bm.bmWidthBytes]*0.5 + px[i+1]);
//py[x*3+2+y*bm.bmWidthBytes] = py[x*3+2+y*bm.bmWidthBytes]*0.5 + px[i+2];
py[x*3+2+y*bm.bmWidthBytes] = (unsigned char)(py[x*3+2+y*bm.bmWidthBytes]*0.5 + px[i+2]);
i=i+3;
}
}
bgbmp->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,py);
mdc->SelectObject(bgbmp);
delete []px;//删除数组一定要用这种形式
delete []py;
希望对你有所帮助!
---------------------------------------------------------------
当然能了。
你只要#include <wingdi.h>
再链接了msimg32.lib
一切没有问题!!
有文档说在98下有问题。但是我用到现在也没有问题
放心用吧!!
---------------------------------------------------------------
『Alpha-Blending』
所谓 Alpha-Blending,其实就是按照“Alpha”混合向量的值来混合源像素和目标像素,一般用来处理半透明效果。
Alpha-Blending 技术并简单介绍 Alpha-Blending 技术的具体算法。
所谓 Alpha-Blending,其实就是按照“Alpha”混合向量的值来混合源像素和目标像素。为了便于理解,我们就从两个像素间的 Alpha-Blending 过程谈起吧。
第一步,先把源像素和目标像素的 RGB 三个颜色分量分离,然后把源像素的三个颜色分量分别乘上 Alpha 的值,并把目标像素的三个颜色分量分别乘上 Alpha 的反值,接下来把结果按对应颜色分量相加,再对最后求得的每个分量结果除以 Alpha 的最大值(通常这一步都是用移位来完成,这亦是 Alpha 的最大值为何总是二的幂的原因),最后把三个颜色分量重新合成为一个像素输出。
在这个过程中,为了分离像素中的 RGB 三个颜色分量,我们一般会使用掩膜的方法。至于具体的三个掩膜值:RMask、GMask 和 BMask,可以从 DirectDraw 中的 DDPixelFormat 返回得到(当然,你也可以根据自己的需要做各种灵活处理)。
在下面给出的说明性例程中,我们假设 RMask、GMask 和 BMask 已经存放的是 RGB 三个颜色分量的位掩膜值,Alpha 的最大值为 256,而 source 和 dest 是指向源像素和目标像素的指针。
int ialpha = 256 - *alpha; // Alpha 的反值
*dest = (RMask & (((*source & RMask) * *alpha + (*dest & RMask) * ialpha) >>8)) ¦ (GMask & (((*source & GMask) * *alpha + (*dest & GMask) * ialpha) >>8)) ¦ (BMask & (((*source & BMask) * *alpha + (*dest & BMask) * ialpha) >>8));
---------------------------------------------------------------
GDI+
如何在一个背景图像上,做半透明的图。相关推荐
- php将二维码和文字结合到一个背景图片上,合成一张图
将二维码生成到背景图片上,并且文字生成到背景图上,可以无限制扩增 1.生成前的图片 生成后的图片 class codeImg {private $date,$img,$main,$width,$ ...
- CSS控制背景颜色和背景图像的方法
Web前端培训中比较重要的一环是网页的设计,网页能通过背景图像给人留下第一印象,如节日题材的网站一般采用喜庆祥和的图片来突出效果,所以在网页设计中,控制背景颜色和背景图像是一个很重要的步骤.下面将详细 ...
- html 颜色叠加图片,如何在背景图片上添加颜色叠加?
一只名叫tom的猫 我看到2个简单的选择:在图像上具有半透明单个渐变的多个背景巨大的插图阴影渐变选项:html { min-height:100%; background:linear-gradi ...
- 2021-09-21如何在PCB上做一个城市地铁图?
这是一个电子技术不怎么行(三极管的原理都是刚弄明白),但却创意满满的创客做的作品,他是一位华人小哥(Chai Jia Xun),住在旧金山湾区.他先前曾做过一款生命倒计时(Lifeclocc)的作品, ...
- 如何用直播摄像机、编码器、电脑端OBS软件在抖音平台上做推流直播现实背景
现实背景 自2021年以来,抖音平台提高了电脑推流直播门槛,导致很多人无法通过电脑软件做推流直播,也无法通过第三方推流工具做直播,具体要求如下图所示: 抖音平台的新规则如下: 硬性条件: 1. 需实名 ...
- CSS背景图像的简单响应
本文设有很多,最理想的解决方案,响应图像只是其中之一.我们建议您查看不同的方法,然后再选择一个特定的响应图像解决方案,包括这两个:如何避免重复下载响应图像中选择响应图像解决方案. 大家都在谈论的的sr ...
- CSS揭秘:5.条纹背景(上)
文章目录 条纹背景 CSS线性渐变 css线性渐变小结 background-size 水平条纹 水平 First Try 水平 Second Try 水平 Third Try 水平 Forth Tr ...
- html中设置背景图像填充,CSS-定位背景图像,添加填充
CSS-定位背景图像,添加填充 这个问题在这里已有答案: CSS:背景图片和填充 8个答案 我想将背景添加到div,位置居中,但 ...
- 【论文学习】行人检测——CVPR:通过MIMS在低分辨率图像中做行人检测
论文:Pedestrian Detection in Low-resolution Imagery by Learning Multi-scale Intrinsic Motion Structure ...
最新文章
- [Nancy On .Net Core Docker] 轻量级的web框架
- 《星球大战:前线2》预告片发布
- Redis学习手册(Sorted-Sets数据类型)
- 解析JVM内存区域组成
- labelme标注工具实现json标注数据批量转换
- command shortcut paste
- 大学计算机应用与基础第二版答案,大学计算机应用基础(第2版)上机指导与习题集...
- 如何优雅地使用迅雷下载百度云大文件?
- 左右手桌面股票盯盘软件(DesktopStockTracking)
- java method方法_Java Method getDeclaringClass()方法
- CURL 发送请求详解
- 基于python随机产生英文单词,句子,段落
- python许可证_一图看懂各种许可协议
- 企业领袖必备的八大特质
- 辉煌一时的金立如今却沦为山寨机?只因做错了这一点
- 语音合成10107错误码解决记录
- 2022-2028全球与中国成人注意力缺陷和多动障碍市场现状及未来发展趋势
- 微信如何实现自动跳转到用其他浏览器打开指定页面下载APK的方案
- 如何正常识别段码液晶屏好坏?
- 网络机顶盒usb调试模式打开