■2番目のループは元絵 左側面から右側面にかけてのスキャン

xR:=xL+ src.Width *rc; // xRの位置を計算しておこう

for i:=trunc(RY) to trunc(LY)-1 do begin
  dp:=dst.ScanLine[i];
 for x:=0 to trunc(xL)-1 do begin dp^:=0;inc(dp);end; //左側の余白

後は同じだよ
sy:=round(sy0*$10000) ; //ここも上と同じ
sx:= 0 ; //

  for x:=trunc(xL) to trunc(xR)-1 do begin //違うのはここ
   dp^ := src[sy SHR 16][sx SHR 16]; //後同じ
   inc(dp);
   sx :=sx+tc;
   sy :=sy-ts;
  end;

 for x:=trunc(xR) to w-1 do begin dp^:=0;inc(dp);end;//右側の余白
 sy0 :=sy0+ 1/c ;
 xL :=xL - s/c ;
 xR :=xL + src.Width / rc ; //ここが違う。 左側に回転してみた幅だけ長くなるわけ

end; //2番目のループここまで