Seite 1 von 1

Canvas Gadget

Verfasst: 14.08.2014 21:06
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 ?

Re: Canvas Gadget

Verfasst: 15.08.2014 02:54
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

Re: Canvas Gadget

Verfasst: 15.08.2014 11:56
von schleicher
Super. Aus dem Beispiel kann ich mir was bauen. Danke

Re: Canvas Gadget

Verfasst: 15.08.2014 11:59
von silbersurfer
Freut mich, das es für dich passt :D

Re: Canvas Gadget

Verfasst: 15.08.2014 16:26
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

Re: Canvas Gadget

Verfasst: 24.08.2014 21:55
von schleicher
Super. Genau das hat mir noch gefehlt. Danke