Code: Alles auswählen
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
IncludeFile "Common_Groesse_Bild.pb"
;- Window Constants
;
Enumeration
#Window_main
EndEnumeration
;- Gadget Constants
;
Enumeration 20
#Image_gadget
#Button_Neu
#Button_Speichern
#image1
#Button_Farbe_Hintergrund
#Button_Farbe_Zeichenstift
#Checkbox_Kreis_Rechteck_Stift
#Spin_Groesse_Stift
#Text_Groesse_Stift
#Button_Rueckgaengig
#Radio_Punkt
#Radio_LinieXY
#Radio_Zusammenhang
#Button_Groese_Bild
#Popup_menu
#zoom_in
#Zoom_out
EndEnumeration
Dim image_save(10)
;-image_save belegen
i.b = 0
Repeat
image_save(i) = i
i = i + 1
Until i = 10
i= 0 ; i muss wieder auf 0 (Start Save_image)
i_geaendert = 0 ; fürs Rückgängig machen
;- Meine Variablen
Structure Punkt
x.l
y.l
EndStructure
MausPos.Punkt ; Positionen für Punktzeichnung
Klick_Pos_XY_1.Punkt ;Positionen für die LinieXY
Klick_Pos_XY_2.Punkt
erster_Punkt_XY.b = 1 ; checker ob erster oder 2. klick
zweiter_Punkt_XY = 0 ; erst sobald 2. Punkt gemacht, macht er Linie...
Klick_Pos_Zusammenhang_1.Punkt
Klick_Pos_Zusammenhang_2.Punkt
erster_Punkt_Zusammenhang.b = 1
zweiter_Punkt_Zusammenhang.b = 0
farbe_zeichenstift.l= RGB(0,0,0) ;startet mit schwarz
Form_Stift.b = 0 ; Startet mit Rechteck....
Groesse_Stift.b = 10 ; Startet mit 10 Pixeln
Ende_Groesse_Bild = 0 ; checker ob das Parent Window geschlossen werden soll
gezoomed = 0 ; checken, welches Bild gezoomed wurde
CreateImage(#image1, 500, 500)
StartDrawing(ImageOutput(#image1))
Box(0,0 , 500, 500, RGB(255,255,255))
StopDrawing()
;CopyImage(#image1, #image_neu)
Procedure Open_Window_main()
If OpenWindow(#Window_main, 216, 0, 834, 581, "imager", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_main))
ImageGadget(#Image_gadget, 40, 40, 520, 580, ImageID(#image1), #PB_Image_Border)
ButtonGadget(#Button_Neu, 670, 460, 140, 40, "Neu")
ButtonGadget(#Button_Speichern, 670, 520, 140, 40, "Speichern")
ButtonGadget(#Button_Farbe_Hintergrund, 670, 380, 140, 40, "Farbe für Hintergrund wählen")
ButtonGadget(#Button_Farbe_Zeichenstift, 670, 320, 140, 40, "Farbe für Stift wählen")
CheckBoxGadget(#Checkbox_Kreis_Rechteck_Stift, 670, 280, 180, 30, "Stift hat Kreisform")
SpinGadget(#Spin_Groesse_Stift, 670, 240, 40, 25, 1, 100)
SetGadgetState(#Spin_Groesse_Stift, 10)
SetGadgetText(#Spin_Groesse_Stift, "10")
TextGadget(#Text_Groesse_Stift, 720, 245, 100, 30, "Größe des Stifts")
ButtonGadget(#Button_Rueckgaengig, 670, 180, 100, 40, "Rückgängig")
OptionGadget(#Radio_Punkt, 670, 140, 180, 20, "Punkt")
SetGadgetState(#Radio_Punkt, 1) ; Standart mäßig Punkt aktivieren
OptionGadget(#Radio_LinieXY, 670, 110, 180, 20, "LinieXY")
OptionGadget(#Radio_Zusammenhang, 670, 80, 180, 20, "Zusammenhängende Linien")
ButtonGadget(#Button_Groese_Bild, 670, 30, 150, 40, "Größe des Bildes in Pixel")
If CreatePopupMenu(#Popup_menu)
MenuItem(#Zoom_in, "Zoom in")
MenuItem(#Zoom_out, "Zoom out")
GadgetToolTip(#Radio_LinieXY, "Klicken Sie zwei mal ins Bild, die beiden Klickpunkte werden dann mit einer Linie verbunden")
EndIf
EndIf
EndIf
EndProcedure
Open_window_main()
;-
Repeat
event= WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #image_gadget
Select EventType()
Case #PB_EventType_LeftClick
;Hier steht für ResizeImage unwichtiger Code
Case #PB_EventType_RightClick
DisplayPopupMenu(#Popup_menu, WindowID(#window_main))
EndSelect
;-Speichern
[b]Case #Button_Speichern
;Falls gezoomed wurde, zurückzoomen
If gezoomed
ResizeImage(#image1, Bild_groesse_x, Bild_groesse_y, #PB_Image_Raw)
EndIf
Datei_speichern$=SaveFileRequester("Wo soll die Datei gespeichert werden?", "C:\" , " (*.bmp) | *.bmp", 0)
Datei_speichern$ = Datei_speichern$ + ".bmp"
If Datei_speichern$
SaveImage(#image1, Datei_speichern$)
If gezoomed ; wieder rückgängig zoomen
ResizeImage(#image1, x_gezoomed, y_gezoomed, #PB_Image_Raw)
SetGadgetState(#image_gadget, ImageID(#image1))
EndIf
Else
MessageRequester("Fehler", "Sie haben keine Datei ausgewählt!")
EndIf
gezoomed = 0 ; wieder auf 0 setzen
[/b] ;-neu
Case #Button_Neu
erster_Punkt_XY = 1 ; damit beim nächsten Mal wieder der 1. Punkte gespeichert wird
zweiter_Punkt_XY = 0
erster_Punkt_Zusammenhang = 1 ; vom Radio Button Zusammenhang, erster Punkt muss neu gesetzt werden
zweiter_Punkt_Zusammenhang = 0
StartDrawing(ImageOutput(#image1))
Box(0,0, 600, 500, RGB(255,255,255))
StopDrawing()
SetGadgetState(#image_gadget, ImageID(#image1))
;auch unwichtig für resizeImage ;-
Case #Button_Groese_Bild
Open_Window_Groesse_Bild()
DisableWindow(#Window_main, 1)
Repeat
event_Bild_groesse = WaitWindowEvent()
;Debug "bkub"
Select event_Bild_groesse
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_OK
Bild_groesse_x$ = GetGadgetText(#String_Groesse_Bild_x)
Bild_groesse_y$ = GetGadgetText(#String_Groesse_Bild_y)
Bild_groesse_x = Val(Bild_groesse_x$)
Bild_groesse_y = Val(Bild_groesse_y$)
If Bild_groesse_x < 601 And Bild_groesse_y < 501
CreateImage(#image1, Bild_groesse_x, Bild_groesse_y)
StartDrawing(ImageOutput(#image1))
Box(0,0 , Bild_groesse_x, Bild_groesse_y, RGB(255,255,255))
StopDrawing()
Else
MessageRequester("Fehler", "Das Bild ist zu groß")
EndIf
Ende_Groesse_Bild = 1
EndSelect
Case #PB_Event_CloseWindow
Ende_Groesse_Bild = 1
EndSelect
Until Ende_Groesse_Bild = 1
Ende_Groesse_Bild = 0 ; falls nochmal aufgerufen, dass prog nicht sofort wieder raus geht
CloseWindow(#Window_Groesse_Bild)
DisableWindow(#Window_main, 0)
SetGadgetState(#image_gadget, ImageID(#image1))
EndSelect
;-PopupMenü
Case #PB_Event_Menu
Select EventMenu()
[b]Case #Zoom_in
gezoomed = 1 ; checkt dass gezoomed wurde (fürs speichern)
If Bild_groesse_x = Bild_groesse_y ; Bild ist quadratisch
x_gezoomed = 500
y_gezoomed = 500
ResizeImage(#image1, x_gezoomed, y_gezoomed, #PB_Image_Raw)
SetGadgetState(#Image_gadget, ImageID(#image1))
ElseIf Bild_groesse_x > Bild_groesse_y ; x ist die längere Seite
Verhaeltnis_x = 600/Bild_groesse_x ; um dieses Verhältnis wurde x vergrößert
x_gezoomed = 600
y_gezoomed = Bild_groesse_y * Verhaeltnis_x
ResizeImage(#image1, x_gezoomed, y_gezoomed, #PB_Image_Raw)
SetGadgetState(#Image_gadget, ImageID(#image1))
ElseIf Bild_groesse_y > Bild_groesse_x ; y ist die längere Seite
Verhaeltnis_y = 500/Bild_groesse_y
x_gezoomed = Bild_groesse_x * Verhaeltnis_y
y_gezoomed = 500
ResizeImage(#image1, x_gezoomed, y_gezoomed, #PB_Image_Raw)
SetGadgetState(#Image_gadget, ImageID(#image1))
EndIf
Case #Zoom_out
ResizeImage(#image1, Bild_groesse_x, Bild_groesse_y)
SetGadgetState(#Image_gadget, ImageID(#image1)) [/b]
EndSelect
EndSelect ;Event
Until Event = #PB_Event_CloseWindow
ich kann auch gern das ganze überflüssige rausnehmen...