// 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;
}