From: Ssagarr P. <hug...@ou...> - 2015-04-30 10:58:43
|
Hi, > this is what I did... you may require clamping to avoid overly intense colors > > The output alpha is a combination of the alphas in the image; it's > a1*a2 which keeps merged alphas more transparent. Works for several > overlays stacked pretty well. > > but basically it's out = top * a + under * ( 1 - a ) > > foreach( pixel ) > { > int r, g, b, aout; > if( !a ) > return over; > //if( a> 255 ) > // a = 255; > if( a == 255 ) > return (in | 0xFF000000); // force alpha full on. > aout = AlphaTable[a][AlphaVal( over )] << 24; > > r = ( (( ((in & 0x00FF0000)>> 8) *(a+1)) + ( ( (over & 0x00FF0000)>> > 8)*(256-(a)))) ); > if( r & 0xFF000000 ) > r = 0x00FF0000; > else > r &= 0x00FF0000; // trim low bits > > g = ( (( ((in & 0x0000FF00)>> 8) *(a+1)) + ( ( (over & 0x0000FF00)>> > 8)*(256-(a)))) ); > if( g & 0x00FF0000 ) > g = 0x0000FF00; > else > g &= 0x0000FF00; // trim low bits > > b = ( ((in & 0x000000FF )*(a+1)) + ( ( over & 0x000000FF)*(256-(a))) )>> 8; > if( b & 0x0000FF00 ) > b = 0x000000FF; > //else > // b &= 0x000000FF; > } > can you please elaborate on AlphaTable and what are in pixels and out pixels ? Thanks, Sagar |