Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static inline void blend32(uint32 *dstPixel, uint32 color)
- {
- uint8 *dst = (uint8*) dstPixel;
- uint8 r = (color & 0xFF000000) >> 24;
- uint8 g = (color & 0x00FF0000) >> 16;
- uint8 b = (color & 0x0000FF00) >> 8;
- uint8 a = color & 0x000000FF;
- if (a == 255) {
- // direct copy
- dst[0] = b;
- dst[1] = g;
- dst[2] = r;
- dst[3] = a;
- }
- else if (a == 0) {
- // do not copy
- }
- else {
- // alpha-blending
- // http://en.wikipedia.org/wiki/Alpha_compositing
- uint8 bo = dst[0];
- uint8 go = dst[1];
- uint8 ro = dst[2];
- uint8 ao = dst[3];
- uint8 aof = (ao * (255 - a)) >> 8;
- dst[3] = a + aof;
- dst[0] = (b * a + bo * aof) / dst[3];
- dst[1] = (g * a + go * aof) / dst[3];
- dst[2] = (r * a + ro * aof) / dst[3];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement