DEMO12-2 alpha混合



简而言之,alpha混合就是透明度,计算

Final = src1 * alpha + src2 * ( 1 alpha );

分解成RGB分量同样适用。

其中,src1src2RGB格式,长16位;混合因子:0-255,长8位。

 

创建alpha查找表

For( 065535的每个颜色值)

  Bein

     将颜色值视为5.6.5格式,从中提取RGB分量

     然后将每个分量与alpha值相乘

 

     R= r * alpha;

     G = g* alpha

     B = b * alpha

最后根据RGB分量生成116位的颜色字

     并存储到查找表中与颜色值相对应的位置

     Alphatable[value]  =r.g.b

End

 

int  DDRAW_LIUSHUIXIAN_TEXTURE::RGB_Alpha_Table_Builder( int      num_alpha_levels,  //alpha等级数

                                                                           USHORT     rgb_alpha_table[NUM_ALPHA_LEVELS][65536])

{

     //检查指针是否有效

     if(! rgb_alpha_table )

         return-1;

 

     int           r,g, b;      //用于存储从rgbindex中提取的RGB分量

     float         alpha                       = 0;

     float         delta_alpha                 = EPSILON_E6+ 1 / ( ( float ) ( num_alpha_levels- 1 ) );

     //需要num_alpha_level

     for(int alpha_level= 0; alpha_level < num_alpha_levels; alpha_level++)

     {

         for(int rgbindex= 0; rgbindex < 65536; rgbindex ++ )

         {

              _RGB565FROM16BIT( rgbindex,& r, & g,& b );

 

              //计算乘积

              r                                =( int ) ( ( float) r * ( float) alpha );

              g                                =( int ) ( ( float) g * ( float) alpha );

              b                                =( int ) ( ( float) b * ( float) alpha );

 

              //生成RGB值,并将其存储在查找表中

              rgb_alpha_table[alpha_level][rgbindex]    =    _RGB16BIT565(r, g, b );

         }

         //计算下一个ALPHA

         alpha                                += delta_alpha;

     }

 

     return1;

 

 

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值