Thema: Delphi Bild skalieren

Einzelnen Beitrag anzeigen

b1zZ

Registriert seit: 8. Aug 2005
Ort: Wischhafen
52 Beiträge
 
Delphi 2009 Enterprise
 
#10

Re: Bild skalieren

  Alt 23. Jul 2007, 07:16
Guten Morgen,

hatt vor kurzem auch ein ähnliches Problem und habe mir eine Funktion dafür geschrieben, vielleicht hilft sie dir.

Delphi-Quellcode:
function ResizeImage(SourceBitMap: TBitMap; DrainWidth: Integer = 0; DrainHeight: Integer = 0;
                       KeepRatio: Boolean = true; PixelFormat :TPixelFormat = pfCustom):TBitMap;
var Rect: TRect;
    SourceHeight, SourceWidth: Integer;
    DrainBitMap: TBitMap;
begin
  DrainBitMap:= TBitMap.Create;

  SourceWidth:= SourceBitMap.Width;
  SourceHeight:= SourceBitMap.Height;

  if KeepRatio = True then
  begin
    if DrainHeight = 0 then
      DrainHeight:= Round((SourceHeight/SourceWidth)*DrainWidth)
    else
      if DrainWidth = 0 then
        DrainWidth:= Round(DrainHeight/(SourceHeight/SourceWidth));

    //Sollte das Verhältniss des Ausgangsbildes anders sein als des Zielbildes
    //wird es so verändert, dass es in sein Ausgangsverhältnis beibehält und in
    //Zielbild passt.
    if (DrainWidth/DrainHeight) > (SourceWidth/SourceHeight) then
      DrainWidth:= Round((SourceWidth/SourceHeight)*DrainHeight)
    else
      if (DrainWidth/DrainHeight) < (SourceWidth/SourceHeight) then
        DrainHeight:= Round(DrainWidth/(SourceWidth/SourceHeight));
  end;
  // Position des "kopier-Rechtecks" wird auf oben links
  // gesetzt und kopiert bis DrainWidth und DrainHeight
  Rect.TopLeft.X:= 0;
  Rect.TopLeft.Y:= 0;
  Rect.BottomRight.X:= DrainWidth;
  Rect.BottomRight.Y:= DrainHeight;
  // Das Result BitMap bekommt die gestretchte / gestauchte Grösse
  DrainBitMap.Width:= DrainWidth;
  DrainBitMap.Height:= DrainHeight;

  // Bild wird gestreckt und ins Resultbild geladen,
  // damit das Original nicht verändert wird.
  // Mit DrainBitMap wird dann weitergearbeitet
  DrainBitMap.Canvas.StretchDraw(Rect,SourceBitMap);

  // Die Farbtiefe wird geändert
  if PixelFormat <> pfCustom then
    DrainBitMap.PixelFormat:= PixelFormat;

  Result:= DrainBitMap;
end;
Habe den Code zwar Kommentiert, aber stehen für Fragen immer zur Verfügung.
  Mit Zitat antworten Zitat