Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

{
        ulong* aDestPixelsRow = ((ulong*) GetBits()) + (theY * mWidth) + theX;
        SRC_TYPE* aSrcPixelsRow = aSrcBits + (theSrcRect.mY * theImage->mWidth) + theSrcRect.mX;

        if (theColor == Color::White)
        {
                if (aSrcMemoryImage->mHasAlpha)
                {
                        for (int y = 0; y < theSrcRect.mHeight; y++)
                        {
                                ulong* aDestPixels = aDestPixelsRow;
                                SRC_TYPE* aSrcPtr = aSrcPixelsRow;

                                for (int x = 0; x < theSrcRect.mWidth; x++)
                                {
                                        ulong src = NEXT_SRC_COLOR;
                                        ulong dest = *aDestPixels;
                                
                                        int a = (src&0xFF000000)>>24;                                                                                           
                                        int r = aMaxTable[((dest & 0xFF0000) + (((src & 0xFF0000)*a)>>8)) >> 16];
                                        int g = aMaxTable[((dest & 0x00FF00) + (((src & 0x00FF00)*a)>>8)) >> 8 ];
                                        int b = aMaxTable[((dest & 0x0000FF) + (((src & 0x0000FF)*a)>>8))      ];

                                        *(aDestPixels++) = (dest & 0xFF000000) | (r << 16) | (g << 8) | (b);
                                }

                                aDestPixelsRow += mWidth;
                                aSrcPixelsRow += theImage->mWidth;
                        }               
                }
                else
                {
                        for (int y = 0; y < theSrcRect.mHeight; y++)
                        {
                                ulong* aDestPixels = aDestPixelsRow;
                                SRC_TYPE* aSrcPtr = aSrcPixelsRow;

                                for (int x = 0; x < theSrcRect.mWidth; x++)
                                {
                                        ulong src = NEXT_SRC_COLOR;
                                        ulong dest = *aDestPixels;
                                                                                                                                
                                        int r = aMaxTable[((dest & 0xFF0000) + (src & 0xFF0000)) >> 16];
                                        int g = aMaxTable[((dest & 0x00FF00) + (src & 0x00FF00)) >> 8 ];
                                        int b = aMaxTable[((dest & 0x0000FF) + (src & 0x0000FF))      ];

                                        *(aDestPixels++) = (dest & 0xFF000000) | (r << 16) | (g << 8) | (b);
                                }

                                aDestPixelsRow += mWidth;
                                aSrcPixelsRow += theImage->mWidth;
                        }
                }
        }
        else
        {
                int ca = theColor.mAlpha;
                int cr = (theColor.mRed * ca) / 255;
                int cg = (theColor.mGreen * ca) / 255;
                int cb = (theColor.mBlue * ca) / 255;

                if (aSrcMemoryImage->mHasAlpha)
                {
                        for (int y = 0; y < theSrcRect.mHeight; y++)
                        {
                                ulong* aDestPixels = aDestPixelsRow;
                                SRC_TYPE* aSrcPtr = aSrcPixelsRow;

                                for (int x = 0; x < theSrcRect.mWidth; x++)
                                {
                                        ulong src = NEXT_SRC_COLOR;
                                        ulong dest = *aDestPixels;
                                                                                                                                
                                        int a = (src&0xFF000000)>>24;                                                                                           
                                        int r = aMaxTable[((dest & 0xFF0000) + (((((src & 0xFF0000) * cr) >> 8)*a)>>8)) >> 16];
                                        int g = aMaxTable[((dest & 0x00FF00) + (((((src & 0x00FF00) * cg) >> 8)*a)>>8)) >>  8];
                                        int b = aMaxTable[((dest & 0x0000FF) + (((((src & 0x0000FF) * cb) >> 8)*a)>>8))      ];

                                        *(aDestPixels++) = (dest & 0xFF000000) | (r << 16) | (g << 8) | (b);                                    
                                }

                                aDestPixelsRow += mWidth;
                                aSrcPixelsRow += theImage->mWidth;
                        }               
                }
                else
                {
                        for (int y = 0; y < theSrcRect.mHeight; y++)
                        {
                                ulong* aDestPixels = aDestPixelsRow;
                                SRC_TYPE* aSrcPtr = aSrcPixelsRow;

                                for (int x = 0; x < theSrcRect.mWidth; x++)
                                {
                                        ulong src = NEXT_SRC_COLOR;
                                        ulong dest = *aDestPixels;
                                                                                                                                
                                        int r = aMaxTable[((dest & 0xFF0000) + (((src & 0xFF0000) * cr) >> 8)) >> 16];
                                        int g = aMaxTable[((dest & 0x00FF00) + (((src & 0x00FF00) * cg) >> 8)) >>  8];
                                        int b = aMaxTable[((dest & 0x0000FF) + (((src & 0x0000FF) * cb) >> 8))      ];

                                        *(aDestPixels++) = (dest & 0xFF000000) | (r << 16) | (g << 8) | (b);                                    
                                }

                                aDestPixelsRow += mWidth;
                                aSrcPixelsRow += theImage->mWidth;
                        }
                }
        }
}