一个快速的8级ALPHA混合算法

1347人阅读 评论(0)

/// 获取RGB分量的掩码

#define RGB565_R_LBIT      0x0800

#define RGB565_G_LBIT     0x0020

#define RGB565_B_LBIT      0x0001

#define RGB565_R_MBIT     0x8000

#define RGB565_G_MBIT    0x0400

#define RGB565_B_MBIT     0x0010

/// 混合了RGB？位

#define RGB565_MSBIT       (RGB565_R_MBIT | RGB565_G_MBIT | RGB565_B_MBIT)

#define RGB565_LSBIT (RGB565_R_LBIT | RGB565_G_LBIT | RGB565_B_LBIT)

#define RGB565_R_M2BIT   (RGB565_R_MBIT | (RGB565_R_MBIT >> 1))

#define RGB565_G_M2BIT   (RGB565_G_MBIT | (RGB565_G_MBIT >> 1))

#define RGB565_B_M2BIT   (RGB565_B_MBIT | (RGB565_B_MBIT >> 1))

#define RGB565_R_M3BIT   (RGB565_R_MBIT | (RGB565_R_MBIT >> 1) | (RGB565_R_MBIT >> 2))

#define RGB565_G_M3BIT   (RGB565_G_MBIT | (RGB565_G_MBIT >> 1) | (RGB565_G_MBIT >> 2))

#define RGB565_B_M3BIT   (RGB565_B_MBIT | (RGB565_B_MBIT >> 1) | (RGB565_B_MBIT >> 2))

void vBlendImage(unsigned int vAddr, 图像结构指针 lpImage, unsigned int xSrc, unsigned int ySrc, unsigned int width, unsigned int height, unsigned int coef)

{

unsigned int i,j,dwidth,dheight,deltawidth;

unsigned int* dp = (unsigned int *)vAddr, *dp1, *sp = lpImage->databuf;

if(xSrc >= (DTMAXX + 1) || ySrc >= (DTMAXY + 1)){

return;

}

dwidth = lpImage->width;

dheight = lpImage->height;

deltawidth = dwidth - width;

/*    if(xSrc + width > (DTMAXX + 1)){

width = (DTMAXX + 1) - xSrc;

}

if(ySrc + height > (DTMAXY + 1)){

height = (DTMAXY + 1) - ySrc;

}*/

dp += (ySrc * (DTMAXX + 1) + xSrc);

for(i=0; i<height; i++){

dp1 = dp;

for(j=0; j<width; j++){

unsigned int scolor, dcolor;

unsigned int mcolor;

unsigned int skcolor, dkcolor;

unsigned int xcolor;

scolor = *sp++;

xcolor = dcolor = *dp1;

skcolor = scolor & RGB565_LSBIT;

scolor = scolor & ~RGB565_LSBIT;

dkcolor = dcolor & RGB565_LSBIT;

dcolor = dcolor & ~RGB565_LSBIT;

if(coef & BIT0){

mcolor = xcolor & skcolor;

xcolor = (xcolor & ~RGB565_LSBIT) + scolor;

xcolor = (xcolor >> 1) + mcolor;

}

if(coef & BIT1){

mcolor = xcolor & skcolor;

xcolor = (xcolor & ~RGB565_LSBIT) + scolor;

xcolor = (xcolor >> 1) + mcolor;

}else{

if(xcolor != dcolor){

mcolor = xcolor & dkcolor;

xcolor = (xcolor & ~RGB565_LSBIT) + dcolor;

xcolor = (xcolor >> 1) + mcolor;

}

}

if(coef & BIT2){

mcolor = xcolor & skcolor;

xcolor = (xcolor & ~RGB565_LSBIT) + scolor;

xcolor = (xcolor >> 1) + mcolor;

}else{

if(xcolor != dcolor){

mcolor = xcolor & dkcolor;

xcolor = (xcolor & ~RGB565_LSBIT) + dcolor;

xcolor = (xcolor >> 1) + mcolor;

}

}

*dp1++ = xcolor;

}

sp += deltawidth;

dp += (DTMAXX + 1);

}

}

0
1

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：256114次
• 积分：4466
• 等级：
• 排名：第6634名
• 原创：167篇
• 转载：4篇
• 译文：20篇
• 评论：112条
评论排行
最新评论