前景色fgcolor=(r1,g1,b1,alpha)
背景色bgcolor=(r2,g2,b2)
那么最后显示的颜色为(r2,g2,b2),r2=(r2*(256-a)+r1*alpha)/256,其它颜色一样计算。
java中绘制带有alpha的png图片的时候 先把rgb颜色和alpha值跟当前背景计算一下,然后再用gc的alpha和当前背景色做计算 得到最终显示的颜色。
uint32_t* data = p_color; uint32_t len = hor_len / 4; for (uint32_t i = 0; i < len; i++) { uint8_t* p_r = (uint8_t*)data; uint8_t* p_g = (uint8_t*)data + 1; uint8_t* p_b = (uint8_t*)data + 2; uint8_t* p_a = (uint8_t*)data + 3; // fgcolor=(r1,g1,b1,alpha) // bgcolor=(r2,g2,b2) // (r2*(256-a)+r1*alpha)/256 *p_r = ((*p_r) * (*p_a) / 256); *p_g = ((*p_g) * (*p_a) / 256); *p_b = ((*p_b) * (*p_a) / 256); printf("0x%02x,",*p_a); data ++; } puts("");
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)