Einzelnen Beitrag anzeigen

Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#13

AW: Bildbearbeitung mit Delphi

  Alt 9. Jun 2011, 18:34
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.

Geändert von Jens01 ( 9. Jun 2011 um 18:36 Uhr)
  Mit Zitat antworten Zitat