2016年1月15日(DEMO12-2ALPHA混合。)

2023-11-19



简而言之,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;

 

 

}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2016年1月15日(DEMO12-2ALPHA混合。) 的相关文章

随机推荐