Imager
Imager
Hallo Leute
Ich wollte jetzt n Programm schreiben, das so wie ein gaaaanz simples Paint funktioniert, d. h. im Moment:
der Benutzer klickt auf die Zeichenfläche, dann wird genau da n Rechteck gezeichnet und das Bild soll er dann via Button abspeichern können.
Nun zu meinem Problem: ich weiß nicht wie ich das neue Bild abspeichern soll.
Die Zeichenfläche ist bei mir ein ImageGadget...
Der Benutzer malt also effektiv aufs Window...
wie kann ich das dann speichern?
lg
Ich wollte jetzt n Programm schreiben, das so wie ein gaaaanz simples Paint funktioniert, d. h. im Moment:
der Benutzer klickt auf die Zeichenfläche, dann wird genau da n Rechteck gezeichnet und das Bild soll er dann via Button abspeichern können.
Nun zu meinem Problem: ich weiß nicht wie ich das neue Bild abspeichern soll.
Die Zeichenfläche ist bei mir ein ImageGadget...
Der Benutzer malt also effektiv aufs Window...
wie kann ich das dann speichern?
lg
Re: Imager
mit SaveImage()pede hat geschrieben:wie kann ich das dann speichern?
Grüße ... Kiffi
a²+b²=mc²
SaveImage() kann ja gar nicht funktionieren, da ich ja nicht auf ImageGadget male, sondern direkt aufs Window....
hmmm ohne code wirds wohl schwer zu verstehen sein...
hmmm ohne code wirds wohl schwer zu verstehen sein...
Code: Alles auswählen
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
;- Window Constants
;
Enumeration
#Window_imager
EndEnumeration
;- Gadget Constants
;
Enumeration
#Image_1
#Image_2
#Frame3D_0
#Button_save
EndEnumeration
;- Image Plugins
;- Image Globals
Global Image0
Global Image1
;- Catch Images
Image0 = CatchImage(0, ?Image0)
Image1 = CatchImage(1, ?Image1)
;- Images
DataSection
Image0:
IncludeBinary "C:\Dokumente und Einstellungen\Pede\Desktop\test.bmp"
Image1:
IncludeBinary "C:\Dokumente und Einstellungen\Pede\Desktop\test1.bmp"
EndDataSection
;Meine Variablen
Structure Punkt
x.l
y.l
EndStructure
MausPos.Punkt
Procedure Open_Window_imager()
If OpenWindow(#Window_imager, 216, 0, 839, 598, "Imager", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_imager))
ImageGadget(#Image_1, 30, 60, 350, 430, Image0)
ImageGadget(#Image_2, 420, 60, 380, 450, Image1)
Frame3DGadget(#Frame3D_0, 10, 30, 390, 520, "")
ButtonGadget(#Button_save, 470, 560, 160, 30, "Neues Bild")
EndIf
EndIf
EndProcedure
Ende = 0
Open_Window_imager()
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
Ende = 1
Case #PB_Event_Gadget
Select EventGadget()
Case #Image_1
Select EventType()
Case #PB_EventType_LeftClick
MausPos\x = WindowMouseX(#Window_imager)
MausPos\y = WindowMouseY(#Window_imager)
;MessageRequester("Bild 1 angeklickt", "x: " + Str(MausPos\x) + Chr(13) + "y: " + Str(MausPos\y))
StartDrawing(WindowOutput(#Window_imager))
Box(MausPos\x, Mauspos\y, 20, 20, RGB(0, 255, 255))
StopDrawing()
EndSelect
Case #Button_save
... Hier liegt das Prob!
EndSelect
EndSelect
Until Ende = 1
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
pede hat geschrieben:SaveImage() kann ja gar nicht funktionieren, da ich ja nicht auf ImageGadget male, sondern direkt aufs Window....
ich empfehle dir dringend, dich zuerst einmal zu entscheiden...pede hat geschrieben:Die Zeichenfläche ist bei mir ein ImageGadget...

nein ernsthaft, direkt aufs window zu malen ist unfug.
zeichne mal was drauf und schieb dann ein anderes fenster drüber, dann wirst du sehen warum...
_______________________________________________
was soll das fürn befehl sein? was für ne PB version hast du? kraut-punkt-rüben?Yoshi hat geschrieben:Ich hätte es mit OpenSaveRequester versucht, geht das auch?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Imager
pede hat geschrieben:Die Zeichenfläche ist bei mir ein ImageGadget...
pede hat geschrieben:SaveImage() kann ja gar nicht funktionieren, da ich ja nicht auf ImageGadget male

Frisch aus der PB-Hilfe:
Code: Alles auswählen
If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
If CreateImage(0, 255, 255)
StartDrawing(ImageOutput(0))
For k=0 To 255
FrontColor(RGB(k,0, k)) ; a rainbow, from black to pink
Line(0, k, 255, 0)
Next
DrawingMode(1)
FrontColor(RGB(255,255,255)) ; print the text to white !
DrawText(40, 50, "Gespeichert unter C:\pede.bmp")
StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Repaint
StartDrawing(WindowOutput(0))
DrawImage(ImageID(0), 20, 10)
StopDrawing()
EndIf
SaveImage(0, "c:\pede.bmp")
Until EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
EndIf
a²+b²=mc²
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> auch wenn ich das gemalene direkt ins Image speichere, auf dem Window anzeigen muss ichs trotzdem...
du musst nur das ImageGadget refreshen, sobald du das image geändert hast,
damit der aktuelle status angezeigt wird.
ein einfaches SetGadgetState( #Imagegadget, #Imagenummer ) genügt vollkommen.
dann wirds auch nicht mehr verpfuscht.
aufs window zeichnen egal ob drawline oder drawimage ist wie gesagt unfug.
wenn sich bei dir nur was verschiebt, ist das zufall, normalerweise verschwindet das komplett.
ein window hat keinen buffer für etwas, was man draufzeichnet.
du musst nur das ImageGadget refreshen, sobald du das image geändert hast,
damit der aktuelle status angezeigt wird.
ein einfaches SetGadgetState( #Imagegadget, #Imagenummer ) genügt vollkommen.
dann wirds auch nicht mehr verpfuscht.
aufs window zeichnen egal ob drawline oder drawimage ist wie gesagt unfug.
wenn sich bei dir nur was verschiebt, ist das zufall, normalerweise verschwindet das komplett.
ein window hat keinen buffer für etwas, was man draufzeichnet.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
hmm klingt gut und logisch, aber irgendwie bin ich total
#image_1 = Nummer vom Imagegadget
Das Bild auf das ich male hat ja gar keine Nummer...


Code: Alles auswählen
Case #PB_EventType_LeftClick
MausPos\x = WindowMouseX(#Window_imager)
MausPos\y = WindowMouseY(#Window_imager)
StartDrawing(ImageOutput(#image_1))
Box(MausPos\x, Mauspos\y, 20, 20, RGB(0, 255, 255))
StopDrawing()
SaveImage(#image_1, "C:\Dokumente und Einstellungen\Pede\Desktop\test_save.bmp")
LoadImage(#image_refresh, "C:\Dokumente und Einstellungen\Pede\Desktop\test_save.bmp")
SetGadgetState(#image_1, #image_refresh)
Das Bild auf das ich male hat ja gar keine Nummer...




-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
bestätigt.pede hat geschrieben:hmm klingt gut und logisch, aber irgendwie bin ich total![]()
![]()
![]()
![]()
du malst auf das IMAGE mit der ID #image_1, auch in deinem code tust du das.
das IMAGE mit der ID #image_1 kannst du dann auf dem ImageGadget mit einer anderen ID darstellen.
in deinem code weiter oben erzeugst du ein ImageGadget mit der ID #image_1
dem versuchst du ein label zuzuweisen statt eines images.
also, da fehlt es wirklich vorne und hinten...
bitte arbeite doch erstmal die Help und die Beispiele für Images durch.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.