Seite 1 von 1

Bildgröße anpassen ohne verzerren

Verfasst: 05.03.2008 19:46
von spider84
Hallo!
Eigentlich hatte ich diese Routine schon und die Ergebnisse sehen auch gut aus, aber scheinbar klappt das nicht mit allen Bildern. :-(
Die 440 und 343 sind die Abmessungen meines ImageGadgets.

Code: Alles auswählen

Procedure myresize()
;--- Bild auf ImageGadget-Größe anpassen (vergrößer/verkleinern) - anti-alias aktiviert
          Debug "Orginal-Größe"
          Debug ImageHeight(5)
          Debug ImageWidth(5)
          bildhf.f = (440 / ImageHeight(5))
          bildwf.f= (343 / ImageWidth(5))
          If (bildh>=bildw) 
            ResizeImage(5,343,Int((bildwf*(ImageHeight(5)))),#PB_Image_Smooth)
            Debug "erste"
            Debug 343
            Debug Int((bildwf*(ImageHeight(5))))
            Else 
            ResizeImage(5, Int((bildhf*(ImageWidth(5)))),440,#PB_Image_Smooth)
            Debug "zweite"
            Debug Int((bildhf*(ImageWidth(5))))
            Debug 440
         EndIf;
 EndProcedure;

Verfasst: 05.03.2008 19:53
von Kaeru Gaman
bildhf.f = (440 / ImageHeight(5))
bildwf.f= (343 / ImageWidth(5))
If (bildh>=bildw)
ich rate dir dringend zur verwendung von EnableExplicit

btw: da du ImageHeight(5) und ImageWidth(5)
mehrfach brauchst, kannst du diese auch vorab in variablen packen,
dann kannst du diese auch beim If > verwenden...

und außerdem wäre es vielleicht ne sache, die ImageID als Argument an die Proc zu übergeben, anstatt literal eine 5 reinzusetzen.

Verfasst: 05.03.2008 21:44
von hjbremer
und ich würde den ganzen .f und INT() rauswerfen.

Code: Alles auswählen

a.f=343/5
Debug Int(a.f)

b=343*100/5
Debug b/100
das ist schneller beim Rechnen, Vergleichen via IF Abfrage, es kommt das Gleiche dabei raus und vermeidet Fehler. Besonders bei kleineren Zahlen halte ich das für besser.

Verfasst: 06.03.2008 14:38
von spider84
danke für die vielen antworten.
die variablennamen stimmen! das eine ist die orginal bildgröße und das andere rechnet einfach den zoomfaktor aus bis entweder die breite oder die höhe auf 100% sind.
ich hab dem image eine 5 gegeben, weil -zumindest PB4.2- scheinbar nicht immer brauchbare handles einsetzt wenn man #pb_any nimmt. aber statt daran meine geduld weiter zu testen hab ich dann per trial and error diese methode gefunden.

Verfasst: 06.03.2008 19:12
von Kaeru Gaman
> weil -zumindest PB4.2- scheinbar nicht immer brauchbare handles einsetzt

evtl. liegt der fehler da auch bei dir, aber generell würde ich dir raten, die stable zu benutzen, nicht die beta.

;-----------------------------------

bildh und bildw übergibst du aber nicht an deine proc... sind die global?

falls also die variablennamen stimmen....
was genau funktioniert denn nicht? :?