Ich habe mir einen kleinen Imagebearbeitungsprog. gebastelt. Nur fehlt mir da noch eine Funktion, wo ich nicht weiß, wie
ich das machen kann. Habe auch kein Beispiel hier im Forum gefunden.
Ich möchte ein Teil des Bildes(Format= jpg,png oder bmp) mit der Linken gedrückten Maustaste markieren(viereck) und dann mit der rechten
Maustaste (Popupmenü) ausschneiden und anschließen wieder als neues Bild wieder in Canvasgadget einfügen.
Kann jemand helfen ?
Canvas Gadget
-
- Beiträge: 214
- Registriert: 30.03.2014 19:57
- Computerausstattung: Purebasic 5.70
- Wohnort: 18314 Löbnitz
Canvas Gadget
Purebasic 5.51
- silbersurfer
- Beiträge: 175
- Registriert: 06.07.2014 12:21
Re: Canvas Gadget
Da wäre der GrabImage befehl gut für geeignet
hier mal ein kleines Beispiel
erst mit der Linken Maustaste gedrück ein Rechteck Zeichnen
danach rechte Maustaste für Popupmenu
und Getimage auswählen
hoffe das ist was du suchst gruss Silbersurfer
hier mal ein kleines Beispiel
erst mit der Linken Maustaste gedrück ein Rechteck Zeichnen
danach rechte Maustaste für Popupmenu
und Getimage auswählen
hoffe das ist was du suchst gruss Silbersurfer
Code: Alles auswählen
EnableExplicit
Define WinEvent,quit,MausDown,Draw,MausX,MausY,MbackupX,MbackupY,ImageGrab,GrabB,GrabH
Define mainWin = OpenWindow(#PB_Any,0,0,800,600,"Popup Menu und GrabImage",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Define img = CreateImage(#PB_Any,400,600,32)
Define Canvas1 = CanvasGadget(#PB_Any,0,0,400,600)
Define Canvas2 = CanvasGadget(#PB_Any,400,0,400,600)
Define PopMenu = CreatePopupMenu(#PB_Any)
MenuItem(1, "Get Image")
;Random Zeichnug erstellen
Procedure Draw()
Protected R
For r=0 To 50
Circle(Random(400),Random(600),Random(30),RGB(Random(255),Random(255) ,Random(255)))
Next
EndProcedure
;ausgabe auf dem Image Img
If StartDrawing( ImageOutput(img) )
Draw()
StopDrawing()
EndIf
;übergabe vom Image an das Canvas1
SetGadgetAttribute(canvas1,#PB_Canvas_Image,ImageID(img))
Repeat
Draw=#False
WinEvent=WaitWindowEvent()
Select WinEvent
Case #PB_Event_CloseWindow
Quit=#True
Case #WM_RBUTTONDOWN
DisplayPopupMenu(PopMenu, WindowID(mainWin))
Case #PB_Event_Menu
Select EventMenu()
Case 1 ; GetImage
;hier wird das Image gegrabt und auf das Canvas 2 eingezeichnet
ImageGrab=GrabImage(img,#PB_Any,MbackupX,MbackupY,GrabB,GrabH)
If StartDrawing( CanvasOutput(Canvas2))
Box(0,0,400,600)
If IsImage(ImageGrab)
DrawImage(ImageID(ImageGrab),10,10)
EndIf
StopDrawing()
EndIf
EndSelect
Case #PB_Event_Gadget
MausX=GetGadgetAttribute(Canvas1, #PB_Canvas_MouseX)
MausY=GetGadgetAttribute(Canvas1, #PB_Canvas_MouseY)
Select EventType()
Case #PB_EventType_LeftButtonDown
MausDown=1 :Draw=#True
MbackupX=MausX
MbackupY=MausY
Case #PB_EventType_LeftButtonUp
MausDown=0 : draw=#False
GrabB=MausX-MbackupX :GrabH=MausY-MbackupY
Case #PB_EventType_MouseMove
Draw=#True
EndSelect
EndSelect
;start Zeichen Routine Canvas1
If Draw
If StartDrawing( CanvasOutput(Canvas1))
DrawImage(ImageID(img),0,0)
If MausDown
DrawingMode(#PB_2DDrawing_Outlined)
Box(MbackupX,MbackupY,MausX-MbackupX,MausY-MbackupY,RGB(255,255,255))
EndIf
StopDrawing()
EndIf
EndIf
Until Quit=#True
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
-
- Beiträge: 214
- Registriert: 30.03.2014 19:57
- Computerausstattung: Purebasic 5.70
- Wohnort: 18314 Löbnitz
- silbersurfer
- Beiträge: 175
- Registriert: 06.07.2014 12:21
Re: Canvas Gadget
Freut mich, das es für dich passt 

Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Re: Canvas Gadget

So läufst auch unter Mac
P.S. Kleine Verbesserung wenn die Maus von Startposition zu Zielposition ins negative läuft.
Code: Alles auswählen
EnableExplicit
Define WinEvent,quit,MausDown,Draw,MausX,MausY,MbackupX,MbackupY,ImageGrab,GrabB,GrabH
Define mainWin = OpenWindow(#PB_Any,0,0,800,600,"Popup Menu und GrabImage",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Define img = CreateImage(#PB_Any,400,600,32)
Define Canvas1 = CanvasGadget(#PB_Any,0,0,400,600)
Define Canvas2 = CanvasGadget(#PB_Any,400,0,400,600)
Define PopMenu = CreatePopupMenu(#PB_Any)
MenuItem(1, "Get Image")
;Random Zeichnug erstellen
Procedure Draw()
Protected R
For r=0 To 50
Circle(Random(400),Random(600),Random(30),RGB(Random(255),Random(255) ,Random(255)))
Next
EndProcedure
;ausgabe auf dem Image Img
If StartDrawing( ImageOutput(img) )
Draw()
StopDrawing()
EndIf
;übergabe vom Image an das Canvas1
SetGadgetAttribute(canvas1,#PB_Canvas_Image,ImageID(img))
Repeat
Draw=#False
WinEvent=WaitWindowEvent()
Select WinEvent
Case #PB_Event_CloseWindow
Quit=#True
;Case #PB_Event_RightClick
; DisplayPopupMenu(PopMenu, WindowID(mainWin))
Case #PB_Event_Menu
Select EventMenu()
Case 1 ; GetImage
;hier wird das Image gegrabt und auf das Canvas 2 eingezeichnet
ImageGrab=GrabImage(img,#PB_Any,MbackupX,MbackupY,GrabB,GrabH)
If StartDrawing( CanvasOutput(Canvas2))
Box(0,0,400,600)
If IsImage(ImageGrab)
DrawImage(ImageID(ImageGrab),10,10)
EndIf
StopDrawing()
EndIf
EndSelect
Case #PB_Event_Gadget
MausX=GetGadgetAttribute(Canvas1, #PB_Canvas_MouseX)
MausY=GetGadgetAttribute(Canvas1, #PB_Canvas_MouseY)
Select EventType()
Case #PB_EventType_LeftButtonDown
MausDown=1 :Draw=#True
MbackupX=MausX
MbackupY=MausY
Case #PB_EventType_LeftButtonUp
MausDown=0 : draw=#False
If MausX < MbackupX
Swap MausX, MbackupX
EndIf
If MausY < MbackupY
Swap MausY, MbackupY
EndIf
GrabB=MausX-MbackupX :GrabH=MausY-MbackupY
Case #PB_EventType_MouseMove
Draw=#True
Case #PB_EventType_RightClick
DisplayPopupMenu(PopMenu, WindowID(mainWin))
EndSelect
EndSelect
;start Zeichen Routine Canvas1
If Draw
If StartDrawing( CanvasOutput(Canvas1))
DrawImage(ImageID(img),0,0)
If MausDown
DrawingMode(#PB_2DDrawing_Outlined)
Box(MbackupX,MbackupY,MausX-MbackupX,MausY-MbackupY,RGB(255,255,255))
EndIf
StopDrawing()
EndIf
EndIf
Until Quit=#True
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 214
- Registriert: 30.03.2014 19:57
- Computerausstattung: Purebasic 5.70
- Wohnort: 18314 Löbnitz