Changeset 1494 for branches/mapnik2

Show
Ignore:
Timestamp:
12/15/09 17:20:21 (8 months ago)
Author:
dane
Message:

touch up alpha handing fixed in r1492 by adding BIG_ENDIAN support

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/mapnik2/include/mapnik/graphics.hpp

    r1491 r1494  
    370370                    unsigned b0 = (rgba0 >> 8) & 0xff; 
    371371 
    372                     unsigned a = (a1 * 255 + (255 - a1) * a0 + 127)/255; 
    373  
    374                     r0 = (r1*a1 + (((255 - a1) * a0 + 127)/255) * r0 + 127)/a; 
    375                     g0 = (g1*a1 + (((255 - a1) * a0 + 127)/255) * g0 + 127)/a; 
    376                     b0 = (b1*a1 + (((255 - a1) * a0 + 127)/255) * b0 + 127)/a; 
    377  
    378                     row_to[x] = (a)| (b0 << 8) |  (g0 << 16) | (r0 << 24) ; 
     372                    r0 = uint8_t(((r1 - r0) * a1 + (r0 << 8)) >> 8); 
     373                    g0 = uint8_t(((g1 - g0) * a1 + (g0 << 8)) >> 8); 
     374                    b0 = uint8_t(((b1 - b0) * a1 + (b0 << 8)) >> 8); 
     375                    a0 = uint8_t((a1 + a0) - ((a1 * a0 + 255) >> 8)); 
     376 
     377                    row_to[x] = (a0)| (b0 << 8) |  (g0 << 16) | (r0 << 24) ; 
    379378#else 
    380379                    unsigned a1 = int( ((rgba1 >> 24) & 0xff) * opacity ); 
     
    389388                    unsigned b0 = (rgba0 >> 16) & 0xff; 
    390389 
    391                     //unsigned a = (a1 * 255 + (255 - a1) * a0 + 127)/255; 
    392                     r0 = uint8_t(((r1 - r0) * a1 + (r0 << 8)) >> 8); 
     390                    r0 = uint8_t(((r1 - r0) * a1 + (r0 << 8)) >> 8); 
    393391                    g0 = uint8_t(((g1 - g0) * a1 + (g0 << 8)) >> 8); 
    394392                    b0 = uint8_t(((b1 - b0) * a1 + (b0 << 8)) >> 8); 
    395393                    a0 = uint8_t((a1 + a0) - ((a1 * a0 + 255) >> 8)); 
    396                     //r0 = (r1*a1 + (((255 - a1) * a0 + 127)/255) * r0 + 127)/a; 
    397                     //g0 = (g1*a1 + (((255 - a1) * a0 + 127)/255) * g0 + 127)/a; 
    398                     //b0 = (b1*a1 + (((255 - a1) * a0 + 127)/255) * b0 + 127)/a; 
    399394                     
    400395                    row_to[x] = (a0 << 24)| (b0 << 16) |  (g0 << 8) | (r0) ;