首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

问个alpha混合公式有关问题

2013-11-08 
问个alpha混合公式问题,本帖最后由 weiwuyuan 于 2013-06-09 17:40:08 编辑一般的混合都是针对底色为完全

问个alpha混合公式问题,
本帖最后由 weiwuyuan 于 2013-06-09 17:40:08 编辑 一般的混合都是针对底色为完全不透明的情况,假如底色不完全透明呢? 该怎么混合?

比如:
底色=0x00000000
上色=0xB25A5A5A
混合结果=0xB25A5A5A

那么如果用公式:above_X*above_A/255 + below_X*(255-above_A)/255 (其中X代表R或G或B)
其结果将是错误的,

对于底色为不完全透明的情况,我一直是用这样的公式:
above_X*above_A/255 + below_X*below_A/255

经测试,其混合效果也看不出有何不对.只是,上面那个例子,带进去算一下,结果并不是0xB25A5A5A

应该用什么公式? 
[解决办法]
不是很明白你的问题啊
是想底色=0x000000的时候有特殊效果,还是想要 完全不透明呢。
如果需要完全不透明
above_X*above_A/255 + below_X*(255-above_A)/255 
公式中  above_A 取值为255 就可以了吧。

[解决办法]

假设:RGB和不透明度通道都是8位。
层数从下住上走:
已合成的像素值 * (255-当前层的透明通道值) / 255 + 当前层像素值 * (当前层的透明通道值)/ 255

还有一个从上层往下走的方法:要复杂一些,但可能速度更快。要另加一个与图像尺寸相同的空间:aED(,):
如果 aED(,)== 255 则跳过当前像素。
否则:
....申明 intA = 255-aED(,)//这是可以允许的最大显示程度
....申明 intB = 当前通道的不透明通道值
....申明 intC = intB;
....如果 intA > intB
....{//当前显示程度大于允许显示的程度,强制收缩到允许显示的程度
........ intC = intA;
....}
....当前输出值 += 当前通道值 * intC / 255; 
....aED(,) += intC;
另加一个哨兵,判断如果整个画面的aED(,)== 255,则可以直接跳出。

热点排行