ARGB Alpha像素混合(透明图片叠加像素计算)
·
alpha混合计算方法很多,我这个使用的是最常用的计算方法.
//ARGB 格式数据定义
typedef struct
{
u8 mB;
u8 mG;
u8 mR;
u8 mA;
}ARGB_DATA_TYPE;
//进行2个像素混合,必须是ARGB888格式
void ARGB8888_PixelMixing(ARGB_DATA_TYPE* pInBackPidex, ARGB_DATA_TYPE* pInForePidex, ARGB_DATA_TYPE* pOutPidex)
{
//背景层与前景层混合
pOutPidex->mR = (((u32)(pInForePidex->mA) * pInForePidex->mR) + (u32)(255 - pInForePidex->mA) * pInBackPidex->mR) / 255;
pOutPidex->mG = (((u32)(pInForePidex->mA) * pInForePidex->mG) + (u32)(255 - pInForePidex->mA) * pInBackPidex->mG) / 255;
pOutPidex->mB = (((u32)(pInForePidex->mA) * pInForePidex->mB) + (u32)(255 - pInForePidex->mA) * pInBackPidex->mB) / 255;
pOutPidex->mA = 0xFF; //混合后的最终图像不需要Alpha了,因为屏幕显示只需要RGB即可
}
void test(void)
{
//调用方法
u32 BackPidex = 0xFF123456; //背景颜色-通常不透明
u32 InForePidex = 0x80808080; //前景色,半透明
u32 OutPidex; //输出混合后的结果
ARGB8888_PixelMixing((ARGB_DATA_TYPE*)&BackPidex, (ARGB_DATA_TYPE*)&InForePidex, (ARGB_DATA_TYPE*)&OutPidex);
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)