Canvas Gadget

Anfängerfragen zum Programmieren mit PureBasic.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Canvas Gadget

Beitrag von schleicher »

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 ?
Purebasic 5.51
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

Re: Canvas Gadget

Beitrag von silbersurfer »

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

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
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Canvas Gadget

Beitrag von schleicher »

Super. Aus dem Beispiel kann ich mir was bauen. Danke
Purebasic 5.51
Benutzeravatar
silbersurfer
Beiträge: 175
Registriert: 06.07.2014 12:21

Re: Canvas Gadget

Beitrag von silbersurfer »

Freut mich, das es für dich passt :D
Intel Quad Core 3,2 Ghz - GTX 1060 - BlitzBasic Plus 1.48 , PureBasic 5.70 LTS / Aktuelles Projekt PureCommander
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Canvas Gadget

Beitrag von mk-soft »

:allright:
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
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Canvas Gadget

Beitrag von schleicher »

Super. Genau das hat mir noch gefehlt. Danke
Purebasic 5.51
Antworten