Bildgröße verändern

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Bildgröße verändern

Beitrag von winduff »

Hellau :allright:

Ich habe ein ImageGadget(), 100x90 groß. Der anwender kann eine Image auswählen, die dann dort angezeigt werden soll - aber auf die größe verkleinert. ResizeImage() schön und gut, aber es soll das Verhältniss des Originalbildes beibehalten, do dass es nicht unschön wird ;-)

Dafür müsste man glaube ich die Bildgröße ermitteln, und dann mit irgendeiner Formel die endgröße berechnen.... oder so... Weis aber leider nicht wo ich da ansetzen sollte...

Nicht hauen, habe schon gesucht und nicht fündig geworden ;-)

Liebe Grüße
Chris
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Wenn du das Bild lädst, kommst du über ImageWidth und ImageHeight an die Bildgröße in Pixeln ran. Damit kannst du dann ganz einfach das Seitenverhältnis ausrechnen und die Breite an die neue Höhe oder umgekehrt anpassen.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

das hab ich mir auch gedacht ;-)

Nur irgendwo ist mein Denkansatz falsch, ich krieg das nicht ausgerechnet...

Kannst du mir nen kleines Beispiel posten?
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Code: Alles auswählen

height = ImageHeight(#image)
width = ImageWidth(#image)
If height > width
  width = 90 * (height / width)
  height = 90
Else
  height = 100 * (width / height)
  width = 100
EndIf
sollte funktionieren, hab aber gerade keine zeit zum testen, ich hoffe das kannst du machen :allright:
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Das solltest du doch selber hinkriegen, aber ich will mal nicht so sein:

Nach Prozent:

Code: Alles auswählen

ResizeImage(#number,ImageWidth()*Prozent/100,ImageHeight()*Prozent/100)
Breite bekannt:

Code: Alles auswählen

ResizeImage(#number,width,ImageHeight()*width/ImageWidth())
Höhe bekannt:

Code: Alles auswählen

ResizeImage(#number,ImageWidth()*height/ImageHeight(),height)
Benutzeravatar
winduff
Beiträge: 879
Registriert: 10.02.2006 21:05
Wohnort: Gießen
Kontaktdaten:

Beitrag von winduff »

thank you very mucho :-)

macro: wie gesagt, denkfehler... ich bins von der falschen seite angegangen
Bild
AND51 hat geschrieben:...und ich würde dein Programm aus Wut zwei mal installieren, um eines genüsslicher löschen zu können, als das andere...
Benutzeravatar
N00B
Beiträge: 122
Registriert: 11.07.2007 22:28

Beitrag von N00B »

Macros hat geschrieben:Das solltest du doch selber hinkriegen, aber ich will mal nicht so sein:

Nach Prozent:

Code: Alles auswählen

ResizeImage(#number,ImageWidth()*Prozent/100,ImageHeight()*Prozent/100)
Breite bekannt:

Code: Alles auswählen

ResizeImage(#number,width,ImageHeight()*width/ImageWidth())
Höhe bekannt:

Code: Alles auswählen

ResizeImage(#number,ImageWidth()*height/ImageHeight(),height)
Hier mal ne Version die auch für Noobs verständlich ist (gibt nichts nervigeres als Zig Befehle in einer Zeile) und sich an eine maximale Höhe und Breite hält z.B zum einpassen in ein Fenster ohne Scrollbargadget.

Code: Alles auswählen

  LoadImage(500, "C:\blabla.jpg")
  
  IMG_W = ImageWidth(500)
  IMG_H = ImageHeight(500)
  
  If IMG_W > IMG_H
    
    Debug "Breiter als hoeher"
    
    New_W = IMG_W / IMG_H * 940;MAXIMALE BREITE
    New_H = IMG_H / IMG_W * 940;MAXIMALE BREITE
    
    
    Repeat
      New_W = New_W - 1
    Until New_W <= 940;MAXIMALE BREITE
    
    If New_H > 570;MAXIMALE HOEHE
      
      Repeat
        New_H = New_H -1
        New_W = New_W -1
      Until New_H <=570;MAXIMALE HOEHE
      
      
    Else
      
    EndIf
    
  Else
    
    Debug "Hoeher als breiter"
    
    New_W = IMG_W / IMG_H * 570;MAXIMALE HOEHE
    New_H = IMG_H /IMG_W * 570;MAXIMALE HOEHE
    
    Repeat
      New_H = New_H - 1
    Until New_H <= 570;MAXIMALE HOEHE
    
    If New_W > 940;MAXIMALE BREITE
      
      Repeat
        New_H = New_H -1
        New_W = New_W -1
      Until New_W <=940;MAXIMALE BREITE
      
      
    Else
      
    EndIf
    
  EndIf
  
  
  ResizeImage(500, New_W, New_H,#PB_Image_Smooth)
  ImageGadget(501, 17, 90, New_W, New_H, ImageID(500),#PB_Image_Border)
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

cool .. so schnell schon 'ne antwort
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

bobobo hat geschrieben:cool .. so schnell schon 'ne antwort
Hmmmmm...., war das Ironie?! Bild
Zuletzt geändert von Fluid Byte am 31.07.2007 17:45, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

nö .. aber schnell :mrgreen:
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten