Subversion Repositories AndroidProjects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
244 chris 1
{
2
	ulong* aDestPixelsRow = ((ulong*) GetBits()) + (theY * mWidth) + theX;
3
	SRC_TYPE* aSrcPixelsRow = aSrcBits + (theSrcRect.mY * theImage->mWidth) + theSrcRect.mX;
4
 
5
	if (theColor == Color::White)
6
	{
7
		if (aSrcMemoryImage->mHasAlpha)
8
		{
9
			for (int y = 0; y < theSrcRect.mHeight; y++)
10
			{
11
				ulong* aDestPixels = aDestPixelsRow;
12
				SRC_TYPE* aSrcPtr = aSrcPixelsRow;
13
 
14
				for (int x = 0; x < theSrcRect.mWidth; x++)
15
				{
16
					ulong src = NEXT_SRC_COLOR;
17
					ulong dest = *aDestPixels;
18
 
19
					int a = (src&0xFF000000)>>24;
20
					int r = aMaxTable[((dest & 0xFF0000) + (((src & 0xFF0000)*a)>>8)) >> 16];
21
					int g = aMaxTable[((dest & 0x00FF00) + (((src & 0x00FF00)*a)>>8)) >> 8 ];
22
					int b = aMaxTable[((dest & 0x0000FF) + (((src & 0x0000FF)*a)>>8))      ];
23
 
24
					*(aDestPixels++) = (dest & 0xFF000000) | (r << 16) | (g << 8) | (b);
25
				}
26
 
27
				aDestPixelsRow += mWidth;
28
				aSrcPixelsRow += theImage->mWidth;
29
			}
30
		}
31
		else
32
		{
33
			for (int y = 0; y < theSrcRect.mHeight; y++)
34
			{
35
				ulong* aDestPixels = aDestPixelsRow;
36
				SRC_TYPE* aSrcPtr = aSrcPixelsRow;
37
 
38
				for (int x = 0; x < theSrcRect.mWidth; x++)
39
				{
40
					ulong src = NEXT_SRC_COLOR;
41
					ulong dest = *aDestPixels;
42
 
43
					int r = aMaxTable[((dest & 0xFF0000) + (src & 0xFF0000)) >> 16];
44
					int g = aMaxTable[((dest & 0x00FF00) + (src & 0x00FF00)) >> 8 ];
45
					int b = aMaxTable[((dest & 0x0000FF) + (src & 0x0000FF))      ];
46
 
47
					*(aDestPixels++) = (dest & 0xFF000000) | (r << 16) | (g << 8) | (b);
48
				}
49
 
50
				aDestPixelsRow += mWidth;
51
				aSrcPixelsRow += theImage->mWidth;
52
			}
53
		}
54
	}
55
	else
56
	{
57
		int ca = theColor.mAlpha;
58
		int cr = (theColor.mRed * ca) / 255;
59
		int cg = (theColor.mGreen * ca) / 255;
60
		int cb = (theColor.mBlue * ca) / 255;
61
 
62
		if (aSrcMemoryImage->mHasAlpha)
63
		{
64
			for (int y = 0; y < theSrcRect.mHeight; y++)
65
			{
66
				ulong* aDestPixels = aDestPixelsRow;
67
				SRC_TYPE* aSrcPtr = aSrcPixelsRow;
68
 
69
				for (int x = 0; x < theSrcRect.mWidth; x++)
70
				{
71
					ulong src = NEXT_SRC_COLOR;
72
					ulong dest = *aDestPixels;
73
 
74
					int a = (src&0xFF000000)>>24;
75
					int r = aMaxTable[((dest & 0xFF0000) + (((((src & 0xFF0000) * cr) >> 8)*a)>>8)) >> 16];
76
					int g = aMaxTable[((dest & 0x00FF00) + (((((src & 0x00FF00) * cg) >> 8)*a)>>8)) >>  8];
77
					int b = aMaxTable[((dest & 0x0000FF) + (((((src & 0x0000FF) * cb) >> 8)*a)>>8))      ];
78
 
79
					*(aDestPixels++) = (dest & 0xFF000000) | (r << 16) | (g << 8) | (b);
80
				}
81
 
82
				aDestPixelsRow += mWidth;
83
				aSrcPixelsRow += theImage->mWidth;
84
			}
85
		}
86
		else
87
		{
88
			for (int y = 0; y < theSrcRect.mHeight; y++)
89
			{
90
				ulong* aDestPixels = aDestPixelsRow;
91
				SRC_TYPE* aSrcPtr = aSrcPixelsRow;
92
 
93
				for (int x = 0; x < theSrcRect.mWidth; x++)
94
				{
95
					ulong src = NEXT_SRC_COLOR;
96
					ulong dest = *aDestPixels;
97
 
98
					int r = aMaxTable[((dest & 0xFF0000) + (((src & 0xFF0000) * cr) >> 8)) >> 16];
99
					int g = aMaxTable[((dest & 0x00FF00) + (((src & 0x00FF00) * cg) >> 8)) >>  8];
100
					int b = aMaxTable[((dest & 0x0000FF) + (((src & 0x0000FF) * cb) >> 8))      ];
101
 
102
					*(aDestPixels++) = (dest & 0xFF000000) | (r << 16) | (g << 8) | (b);
103
				}
104
 
105
				aDestPixelsRow += mWidth;
106
				aSrcPixelsRow += theImage->mWidth;
107
			}
108
		}
109
	}
110
}