Ganz habe ich nicht verstanden, wo genau Dein Problem liegt, aber es gibt eigentlich verschiedene Verfahren, wie gestretcht wird...
Also eigentlich solltest Du Dir das mal so ganz schnell selber schreiben können, so wie ich das hier verstanden habe.
Hier mal eine
Unit, wie man das mit Graphics32 machen kann :
Delphi-Quellcode:
procedure GR32Stretch(Src: TBitmap32; Dst: TBitmap; proportional: Boolean = True; Quality: Integer = 3);
var
Dst2: TBitmap32;
begin
Dst2 := TBitmap32.Create;
Dst2.Assign(Dst);
GR32Stretch(Src, Dst2, proportional, Quality);
Dst.Assign(Dst2);
Dst2.Free;
end;
procedure SetProportional(dstBMP: TBitmap32; scrRECT: TRect);
begin
if RectHeight(scrRECT) > RectWidth(scrRECT) then
dstBMP.Width := Round(RectWidth(scrRECT) * dstBMP.Height / RectHeight(scrRECT))
else
dstBMP.Height := Round(RectHeight(scrRECT) * dstBMP.Width / RectWidth(scrRECT));
end;
procedure GR32Stretch(Src, Dst: TBitmap32; proportional: Boolean = True; Quality: Integer = 3);
// http://graphics32.org/wiki/FAQ/Resampling
var
R3: TKernelResampler;
R2: TLinearResampler;
R1: TDraftResampler;
R0: TNearestResampler;
begin
if (Src.Width < 1) or (Src.Height < 1) or (Dst.Width < 1) or (Dst.Height < 1) then
Exit;
if proportional then
SetProportional(Dst, Src.BoundsRect);
case Quality of
3:
begin
R3 := TKernelResampler.Create(Src);
R3.Kernel := TLanczosKernel.Create;
end;
2:
begin
R2 := TLinearResampler.Create(Src);
end;
1:
begin
R1 := TDraftResampler.Create(Src);
end;
0:
begin
R0 := TNearestResampler.Create(Src);
end;
end;
Dst.Draw(Dst.BoundsRect, Src.BoundsRect, Src);
end;
end.