Visual C++游戏编程基础之透明半透明效果

一、基本思路

1.半透明的原理

   一张位图由许多像素组成,而每一像素包含R、G、B三原色,三原色的值决定了像素的色彩,要实现半透明效果,需要把前景图    和背景图彼此对应的像素颜色按某一比例进行调配,称为 ‘不透明度’,直接贴图,则前景图不透明度为100%,背景图为0%;

   公式:半透明图色彩=前景图色彩 * 不透明度 + 背景图色彩 * (1-不透明度)

2.半透明操作步骤

(1)取得位图结构,需要使用GetObject函数,介绍如下:

    函数原型:int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject);

    函数功能:表示获取位图的信息

    参数一   : 要获取的位图句柄

    参数二   : 指定将要写到缓冲区的信息的字节数目,在这里是位图类型的字节数 

    参数三   : 在这里是指向位图结构变量的地址,该变量当作缓冲区

    关于位图结构BITMAP介绍如下:

    

(2)建立暂存数组,目的是为了存储位图中所有像素的颜色值

    unsigned char * px1 = new unsigned char [bm1.bmHeight * bm1.bmWidthBytes];

    其中数组的大小即为整个位图所有像素占的字节数,若一个像素24bits,则占3个字节,也就是3个数组元素

(3)取得位图中所有的颜色值,并存储到暂存数组中,函数介绍如下:

    函数原型:LONG GetBitmapBits(HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits);

    函数功能:把位图的色彩值存储到暂存数组中

    参数一   :位图句柄

    参数二   :要取得的字节数

    参数三   :指向暂存数组

(4)合成像素颜色值,这里介绍基本思想:

     假设每个像素24bit,则每个像素占3字节,关于背景图,首先要取得整张图像素各原色值所在的索引值,即:

     


                
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值