// 0<=t<=0x100
// Ergbenis:0 - 0xff
#undef lerp
#define lerp(v0,v1,t) ((0x100-t)*(v0)+t*(v1))>>8
// Bilineare Interpolation
IMG *scaleBiLin( IMG *dst, // Ziel
const IMG *src, // Quelle
int x, // x-Offset im Zielbild
int y, // y-Offset im Zielbild
int ox, // x-Offset im Quellbild
int oy, // y-Offset im Quellbild
int dstw, // Breite des Zielbild
int dsth, // Höhe des Zielbild
int srcw, // Breite des Quellbild-Ausschnitt
int srch, // Höhe des Quellbild-Ausschnitt
U32 bgc, //!< Hintergrundfarbe
int flg //!< Layer zur Darstellung
)
{ int i,j,wib;
int tx,gx,gxi;
int ty,gy,gyi;
U32 v0,v1,r,g,b;
U32 u,v,uu,vv;
wib=src->wib;
uu=(srcw<<16)/dstw;
vv=(srch<<16)/dsth;
v=0;
for (i=0; i>16; ty=(v-(gyi<<16))>>8; gyi+=oy; u=0;
for (j=0; j>16; tx=(u-(gxi<<16))>>8; gxi+=ox;
U32 c00 = getPixel(src,gxi, gyi, wib);
U32 c10 = getPixel(src,gxi+1,gyi, wib);
U32 c01 = getPixel(src,gxi, gyi+1,wib);
U32 c11 = getPixel(src,gxi+1,gyi+1,wib);
v0=lerp((c00>> 0) & 0xff,(c10>> 0) & 0xff,tx);
v1=lerp((c01>> 0) & 0xff,(c11>> 0) & 0xff,tx);
r =lerp(v0,v1,ty);
v0=lerp((c00>> 8) & 0xff,(c10>> 8) & 0xff,tx);
v1=lerp((c01>> 8) & 0xff,(c11>> 8) & 0xff,tx);
g =lerp(v0,v1,ty);
v0=lerp((c00>>16) & 0xff,(c10>>16) & 0xff,tx);
v1=lerp((c01>>16) & 0xff,(c11>>16) & 0xff,tx);
b =lerp(v0,v1,ty);
putPixel(dst,j+x,i+y,r|(g<<8)|(b<<16));
u+=uu;
}
v+=vv;
}
return dst;
}