![]() |
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 |
Re: Bildverhältnis in einem Image
![]() Umgebaut zu:
Delphi-Quellcode:
Sollte deine Anforderungen erfüllen.
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; |
Re: Bildverhältnis in einem Image
Kann man nicht einfach die Eigenschaft "Proprtional" auf true setzen?
Florian |
Re: Bildverhältnis in einem Image
yep, solange Du Center auch auf true setzt
|
Re: Bildverhältnis in einem Image
Zitat:
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