Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildverhältnis in einem Image (https://www.delphipraxis.net/51395-bildverhaeltnis-einem-image.html)

monta 11. Aug 2005 17:45


Bildverhältnis in einem Image
 
Hallo,

ich möchte mehrere Bilder nacheinander, momentan mittels eines TImages auf dem Bildschirm ausgeben.
Bei Bildern im Querformat ist das ja noch kein so großes Problem dank Stretch, mit der Verzerrung könnte man sich ja abfinden.
Aber bei Bildern im Hochformat, geht das ja nicht. Was gibt es da für Möglichkeiten, das die Bilder Zentriert mit der Maximalen, durch das Image gegebenen Seitenlänge einer Seite und der daraus resultierenden anderen Seite dargestellt werden - also unverzerrt und das möglichst noch zentriert.
Gibt es dafür eventuell andere Komponenten, welche das von sich aus Regeln?

monta

turboPASCAL 11. Aug 2005 18:45

Re: Bildverhältnis in einem Image
 
http://www.delphipraxis.net/internal...=217165#217165

Umgebaut zu:
Delphi-Quellcode:
function ScaleTo(Image: TImage; aRect: TRect; Center: Boolean): TRect;
var
  h, w, r: Single;
  tmpRect: TRect;
begin
  with Image.Picture.Graphic do
  begin
    { Verhaeltniss errechnen }
    w := aRect.Right / Width;
    h := aRect.Bottom / Height;
    { begrenzendes Verhaeltniss }
    if w < h then r := w else r := h;
    { in linke obere Ecke legen }
    tmpRect.Left  := 0;
    tmpRect.Top   := 0;
    tmpRect.Right := Trunc(r * Width);
    tmpRect.Bottom := Trunc(r * Height);
    { Center ? }
    if Center then
    begin
      tmpRect.Left  := (aRect.Right - tmpRect.Right) div 2;
      tmpRect.Right := tmpRect.Right + tmpRect.Left;
      tmpRect.Top   := (aRect.Bottom - tmpRect.Bottom) div 2;
      tmpRect.Bottom := tmpRect.Bottom + tmpRect.Top;
    end;
  end;
  Image.Left  := tmpRect.Left;
  Image.Top   := tmpRect.Top;
  Image.Width := tmpRect.Right - tmpRect.Left;
  Image.Height := tmpRect.Bottom - tmpRect.Top;
end;

// Aufruf z.B. so:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('Test.bmp');
  ScaleTo(Image1, Panel1.ClientRect, True);
end;
Sollte deine Anforderungen erfüllen.

Zacherl 12. Aug 2005 11:07

Re: Bildverhältnis in einem Image
 
Kann man nicht einfach die Eigenschaft "Proprtional" auf true setzen?

Florian

Sidorion 12. Aug 2005 11:26

Re: Bildverhältnis in einem Image
 
yep, solange Du Center auch auf true setzt

monta 12. Aug 2005 12:22

Re: Bildverhältnis in einem Image
 
Zitat:

Zitat von Florian Bernd
Kann man nicht einfach die Eigenschaft "Proprtional" auf true setzen?

Welche Eigenschaft 'proportional' :gruebel:
Wo soll die zu finden sein, oder gibts die in D3 noch nicht?

Der Code von turboPASCAL funktioniert super, Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 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