rendered paste body TUint8 * NewColorData = new TUint8[TextureSize*3];
TUint8 * NewAlphaData = new TUint8[TextureSize];
if (iCurrentRequest->iRealWidth != iCurrentRequest->iInternalWidth && iCurrentRequest->iRealHeight != iCurrentRequest->iInternalHeight)
{
double nXFactor = (double)iCurrentRequest->iRealWidth/(double)iCurrentRequest->iInternalWidth;
double nYFactor = (double)iCurrentRequest->iRealHeight/(double)iCurrentRequest->iInternalHeight;
double fraction_x, fraction_y, one_minus_x, one_minus_y;
int ceil_x, ceil_y, floor_x, floor_y;
TUint8 c1[4];
TUint8 c2[4];
TUint8 c3[4];
TUint8 c4[4];
TUint8 final[3];
TUint8 red, green, blue,alpha;
TUint8 b1, b2;
for (int x = 0; x < iCurrentRequest->iInternalWidth; ++x)
for (int y = 0; y < iCurrentRequest->iInternalHeight; ++y)
{
// Setup
floor_x = (int)floor(x * nXFactor);
floor_y = (int)floor(y * nYFactor);
ceil_x = floor_x + 1;
if (ceil_x >= iCurrentRequest->iRealWidth) ceil_x = floor_x;
ceil_y = floor_y + 1;
if (ceil_y >= iCurrentRequest->iRealHeight) ceil_y = floor_y;
fraction_x = x * nXFactor - floor_x;
fraction_y = y * nYFactor - floor_y;
one_minus_x = 1.0 - fraction_x;
one_minus_y = 1.0 - fraction_y;
memcpy(c1,&TextureData[floor_y*iCurrentRequest->iRealWidth*3+floor_x*3],3);
memcpy(c2,&TextureData[floor_y*iCurrentRequest->iRealWidth*3+ceil_x*3],3);
memcpy(c3,&TextureData[ceil_y*iCurrentRequest->iRealWidth*3+floor_x*3],3);
memcpy(c4,&TextureData[ceil_y*iCurrentRequest->iRealWidth*3+ceil_x*3],3);
memcpy(&c1[3],&AlphaData[floor_y*iCurrentRequest->iRealWidth+floor_x],1);
memcpy(&c2[3],&AlphaData[floor_y*iCurrentRequest->iRealWidth+ceil_x],1);
memcpy(&c3[3],&AlphaData[ceil_y*iCurrentRequest->iRealWidth+floor_x],1);
memcpy(&c4[3],&AlphaData[ceil_y*iCurrentRequest->iRealWidth+ceil_x],1);
// Blue
b1 = (TUint8)(one_minus_x * c1[0] + fraction_x * c2[0]);
b2 = (TUint8)(one_minus_x * c3[0] + fraction_x * c4[0]);
blue = (TUint8)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));
// Green
b1 = (TUint8)(one_minus_x * c1[1] + fraction_x * c2[1]);
b2 = (TUint8)(one_minus_x * c3[1] + fraction_x * c4[1]);
green = (TUint8)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));
// Red
b1 = (TUint8)(one_minus_x * c1[2] + fraction_x * c2[2]);
b2 = (TUint8)(one_minus_x * c3[2] + fraction_x * c4[2]);
red = (TUint8)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));
// Alpha
b1 = (TUint8)(one_minus_x * c1[3] + fraction_x * c2[3]);
b2 = (TUint8)(one_minus_x * c3[3] + fraction_x * c4[3]);
alpha = (TUint8)(one_minus_y * (double)(b1) + fraction_y * (double)(b2));
final[0] = blue;
final[1] = green;
final[2] = red;
memcpy(&NewColorData[y*iCurrentRequest->iInternalWidth*3+x*3],final,3);
memcpy(&NewAlphaData[y*iCurrentRequest->iInternalWidth+x],&alpha,1);
}
}
// Ask the bitmap heap to be unlocked if this is a large bitmap
iBitmap->UnlockHeap( EFalse );
TextureData = NewColorData;
AlphaData = NewAlphaData;