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);
}

 

你可能感兴趣的:(VC++,.NET)