AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild skalieren

Ein Thema von napsterxx · begonnen am 22. Jul 2007 · letzter Beitrag vom 23. Jul 2007
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz