for( int y = 0; y < Size.y; y++ ) { for( int x = 0; x < Size.x; x++ ) { ro1 = GetRed (*pOld); rn1 = GetRed (*pNew); go1 = GetGreen (*pOld); gn1 = GetGreen (*pNew); bo1 = GetBlue (*pOld); bn1 = GetBlue (*pNew); an1 = GetAlpha(*pNew); if( ( *pNew & 0xFFFFFF ) == 0xFFFF ) // color for replacement { color16 New = pInfo->color; if( New ) *pOld = MakeColor16( GetRed (*pOld) + GetAlpha(*pNew)*(GetRed (New) - GetRed (*pOld))/256, GetGreen(*pOld) + GetAlpha(*pNew)*(GetGreen(New) - GetGreen(*pOld))/256, GetBlue (*pOld) + GetAlpha(*pNew)*(GetBlue (New) - GetBlue (*pOld))/256 ); } else { NewRed = ro1 + an1*(rn1 - ro1)/256; NewGreen = go1 + an1*(gn1 - go1)/256; NewBlue = bo1 + an1*(bn1 - bo1)/256; *pOld = MakeColor16( NewRed, NewGreen, NewBlue); } pOld++; if( pInfo->horz_invert ) pNew--; else pNew++; }