PropSize - Größe proportional ändern für Bilder, Gadgets, ..

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

PropSize - Größe proportional ändern für Bilder, Gadgets, ..

Beitrag von Tommy »

Hab eine Prozedure geschrieben um abhängig der Breite oder Höhe proportional
zu skalieren.
Beispiel für Höhenberechnung

Code: Alles auswählen

;Programmierer: Tommy
;Geeignet: Für Anfänger
;Lizenz: Code kann frei benutzt, verändert, verteilt werden, keine Namensnennung notwendig

; Übergebene Breite und Hoehe werden proportional vergroessert oder verkleinert
; Entweder newWidth oder newHeight als neue Groesse angeben
; das andere #PB_Any
Procedure PropSize(oldWidth, oldHeight, newWidth, newHeight = #PB_Any)
  If newHeight = #PB_Any
    ProcedureReturn newWidth * oldHeight / oldWidth
  Else
    ProcedureReturn newHeight * oldWidth / oldHeight
  EndIf
EndProcedure

; - Beispiel als Bild -
CreateImage(0, 200, 100, 24, RGB(0, 0, 255))

Define event

OpenWindow(0, 0, 0, 700, 400, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

TextGadget(#PB_Any, 50, 50, 200, 20, "Alte Größe")
TextGadget(#PB_Any, 300, 50, 200, 20, "Neue Größe")

ImageGadget(0, 50, 100, ImageWidth(0), ImageHeight(0), ImageID(0))
ImageGadget(1, 300, 100, 0, 0, 0)

ResizeImage(0, 350, PropSize(ImageWidth(0), ImageHeight(0), 350))
SetGadgetState(1, ImageID(0))

Repeat
  event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
Oder als Beispiel für Breitenberechnung

Code: Alles auswählen

;Programmierer: Tommy
;Geeignet: Für Anfänger
;Lizenz: Code kann frei benutzt, verändert, verteilt werden, keine Namensnennung notwendig

; Übergebene Breite und Hoehe werden proportional vergroessert oder verkleinert
; Entweder newWidth oder newHeight als neue Groesse angeben
; das andere #PB_Any
Procedure PropSize(oldWidth, oldHeight, newWidth, newHeight = #PB_Any)
  If newHeight = #PB_Any
    ProcedureReturn newWidth * oldHeight / oldWidth
  Else
    ProcedureReturn newHeight * oldWidth / oldHeight
  EndIf
EndProcedure

; - Beispiel als Bild -
CreateImage(0, 200, 100, 24, RGB(0, 0, 255))

Define event

OpenWindow(0, 0, 0, 700, 400, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)

TextGadget(#PB_Any, 50, 50, 200, 20, "Alte Größe")
TextGadget(#PB_Any, 300, 50, 200, 20, "Neue Größe")

ImageGadget(0, 50, 100, ImageWidth(0), ImageHeight(0), ImageID(0))
ImageGadget(1, 300, 100, 0, 0, 0)

ResizeImage(0, PropSize(ImageWidth(0), ImageHeight(0), #PB_Any, 50), 50)
SetGadgetState(1, ImageID(0))

Repeat
  event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
PB 5.41 x64