|
本帖最后由 微无渊 于 2013-6-5 08:31 编辑
有两张图像,这两张图像本为一体但被分成了两张,一张是身体,一张是衣服,
现在要将这两张图进行合并,这就需要做颜色混合了,但这个混合和普通的混合不一样,因为两张图都有alpha,
所以如果底色alpha不等于255,则似乎是这样的一个公式:
int out_B = below_B * below_A / 255 + above_B * above_A / 255; // 如果out_B大于255,使其等于255
int out_G = below_G * below_A / 255 + above_G * above_A / 255; // 如果out_G大于255,使其等于255
int out_R = below_R * below_A / 255 + above_R * above_A / 255; // 如果out_R大于255,使其等于255
int out_A = below_A + above_A; // 如果out_A大于255,使其等于255
其中below代表底色,above代表上色
然而经过测试,这个公式对于alpha为255的底色是错误的,
比如:
底色是:0xFFFFFFFF 纯白色
上色是:0x80000000 50%透明度的黑色
根据上面的公式,得到的却是纯白色的,而正确的应该是0xFF7F7F7F
对于这种底色alpha等于255的情况,如果改用这个公式:
below - (below-above)*above_alpha/255 就能得到正确的结果.
我的困惑也正在于此,就是不同的情况,需要用到不同的混合公式.
各位觉得?
|
|