Seite 1 von 1

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

Verfasst: 27.01.2015 16:21
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