Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 244 | chris | 1 | { |
| 2 | double aCos = cos(theRot); |
||
| 3 | double aSin = sin(theRot); |
||
| 4 | |||
| 5 | int aCosLong = (int) (aCos * 0x10000); |
||
| 6 | int aSinLong = (int) (aSin * 0x10000); |
||
| 7 | |||
| 8 | |||
| 9 | ulong* aDestPixelsRow = GetBits() + ((int)aDestRect.mY * mWidth) + (int)aDestRect.mX; |
||
| 10 | int aDestPixelsPitch = mWidth; |
||
| 11 | |||
| 12 | if (theColor == Color::White) |
||
| 13 | { |
||
| 14 | #define DEST_PIXEL_TYPE ulong |
||
| 15 | #define WRITE_PIXEL\ |
||
| 16 | {\ |
||
| 17 | int a = a1+a2+a3+a4; \ |
||
| 18 | if(a==0) /* transparent */ \ |
||
| 19 | aDestPixels++; \ |
||
| 20 | else \ |
||
| 21 | { \ |
||
| 22 | ulong r = (((((src1&0xFF0000)*a1)) + (((src2&0xFF0000)*a2)) + (((src3&0xFF0000)*a3)) + (((src4&0xFF0000)*a4)))&0xFF000000); \ |
||
| 23 | ulong g = (((((src1&0x00FF00)*a1)) + (((src2&0x00FF00)*a2)) + (((src3&0x00FF00)*a3)) + (((src4&0x00FF00)*a4)))&0x00FF0000); \ |
||
| 24 | ulong b = (((((src1&0x0000FF)*a1)) + (((src2&0x0000FF)*a2)) + (((src3&0x0000FF)*a3)) + (((src4&0x0000FF)*a4)))&0x0000FF00); \ |
||
| 25 | if(a > 250) /* opaque */ \ |
||
| 26 | *aDestPixels++ = 0xFF000000 | (r>>8) | (g>>8) | (b>>8);\ |
||
| 27 | else /* blend */ \ |
||
| 28 | {\ |
||
| 29 | ulong destPixel = *aDestPixels; \ |
||
| 30 | ulong da = destPixel >> 24;\ |
||
| 31 | \ |
||
| 32 | ulong dr = (((destPixel&0xFF0000)*da)>>8) & 0xFF0000;\ |
||
| 33 | ulong dg = (((destPixel&0x00FF00)*da)>>8) & 0x00FF00;\ |
||
| 34 | ulong db = (((destPixel&0x0000FF)*da)>>8) & 0x0000FF;\ |
||
| 35 | \ |
||
| 36 | int finalAlpha = 256 - (((256 - a)*(256 - da))>>8);\ |
||
| 37 | r = ((r + (256-a)*dr)/finalAlpha) & 0xFF0000;\ |
||
| 38 | g = ((g + (256-a)*dg)/finalAlpha) & 0x00FF00;\ |
||
| 39 | b = ((b + (256-a)*db)/finalAlpha) & 0x0000FF;\ |
||
| 40 | \ |
||
| 41 | *aDestPixels++ = ((finalAlpha-1)<<24) | r | g | b; \ |
||
| 42 | }\ |
||
| 43 | } \ |
||
| 44 | } |
||
| 45 | |||
| 46 | #include "BltRotatedHelper.inc" |
||
| 47 | |||
| 48 | #undef WRITE_PIXEL |
||
| 49 | #undef DEST_PIXEL_TYPE |
||
| 50 | |||
| 51 | |||
| 52 | } |
||
| 53 | else |
||
| 54 | { |
||
| 55 | int ca = theColor.mAlpha; |
||
| 56 | int cr = theColor.mRed + 1; |
||
| 57 | int cg = theColor.mGreen + 1; |
||
| 58 | int cb = theColor.mBlue + 1; |
||
| 59 | |||
| 60 | #define DEST_PIXEL_TYPE ulong |
||
| 61 | #define WRITE_PIXEL\ |
||
| 62 | {\ |
||
| 63 | a1 = (a1*ca)>>8; a2 = (a2*ca)>>8; a3 = (a3*ca)>>8; a4 = (a4*ca)>>8; \ |
||
| 64 | int a = a1+a2+a3+a4; \ |
||
| 65 | \ |
||
| 66 | if(a==0) /* transparent */ \ |
||
| 67 | aDestPixels++; \ |
||
| 68 | else \ |
||
| 69 | { \ |
||
| 70 | ulong r = (cr * (((((src1&0xFF0000)*a1)) + (((src2&0xFF0000)*a2)) + (((src3&0xFF0000)*a3)) + (((src4&0xFF0000)*a4)))>>8)) & 0xFF000000 ; \ |
||
| 71 | ulong g = ((((((src1&0x00FF00)*a1)) + (((src2&0x00FF00)*a2)) + (((src3&0x00FF00)*a3)) + (((src4&0x00FF00)*a4)))&0x00FF0000) * cg) & 0xFF000000; \ |
||
| 72 | ulong b = ((((((src1&0x0000FF)*a1)) + (((src2&0x0000FF)*a2)) + (((src3&0x0000FF)*a3)) + (((src4&0x0000FF)*a4)))&0x0000FF00) * cb) & 0x00FF0000; \ |
||
| 73 | if(a > 250) /* opaque */ \ |
||
| 74 | *aDestPixels++ = 0xFF000000 | (r>>8) | (g>>16) | (b>>16);\ |
||
| 75 | else /* blend */ \ |
||
| 76 | {\ |
||
| 77 | ulong destPixel = *aDestPixels; \ |
||
| 78 | ulong da = destPixel >> 24;\ |
||
| 79 | \ |
||
| 80 | ulong dr = (((destPixel&0xFF0000)*da)>>8) & 0xFF0000;\ |
||
| 81 | ulong dg = (((destPixel&0x00FF00)*da)>>8) & 0x00FF00;\ |
||
| 82 | ulong db = (((destPixel&0x0000FF)*da)>>8) & 0x0000FF;\ |
||
| 83 | \ |
||
| 84 | int finalAlpha = 256 - (((256 - a)*(256 - da))>>8);\ |
||
| 85 | r = ((r + (256-a)*dr)/finalAlpha) & 0xFF0000;\ |
||
| 86 | g = (((g>>8) + (256-a)*dg)/finalAlpha) & 0x00FF00;\ |
||
| 87 | b = (((b>>8) + (256-a)*db)/finalAlpha) & 0x0000FF;\ |
||
| 88 | \ |
||
| 89 | *aDestPixels++ = ((finalAlpha-1)<<24) | r | g | b; \ |
||
| 90 | }\ |
||
| 91 | } \ |
||
| 92 | } |
||
| 93 | |||
| 94 | #include "BltRotatedHelper.inc" |
||
| 95 | |||
| 96 | #undef WRITE_PIXEL |
||
| 97 | #undef DEST_PIXEL_TYPE |
||
| 98 | |||
| 99 | |||
| 100 | } |
||
| 101 | } |