Bildgröße anpassen ohne verzerren

Anfängerfragen zum Programmieren mit PureBasic.
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Bildgröße anpassen ohne verzerren

Beitrag 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;
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag 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.
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
spider84
Beiträge: 76
Registriert: 05.03.2008 03:06

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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? :?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten