Page 1 sur 1
Copier le contenu d'un canvasgadget dans le presse papier
Publié : jeu. 13/juin/2019 15:13
par Philippe_GEORGES
Bonjour
Je souhaite copier le contenu (graphique) du canvasgadget vers le presse papier.
Code : Tout sélectionner
If EventType()= #PB_EventType_LeftDoubleClick ; copie presse papier
SetClipboardImage(#canvas_carte)
MessageRequester("Information","Image copiée dans le presse papier");
Toutefois, ça ne semble pas aussi simple....
Quelqu'un a t il une idée ?
Merci d'avance
Re: Copier le contenu d'un canvasgadget dans le presse papie
Publié : jeu. 13/juin/2019 15:27
par falsam
GetGadgetAttribute(toncanvas, #PB_Canvas_Image) donne l'image id de ton canvas
Re: Copier le contenu d'un canvasgadget dans le presse papie
Publié : jeu. 13/juin/2019 15:33
par falsam
Petit code de vérification
Code : Tout sélectionner
;Plan de l'application
Declare Start()
Declare CopyClipboardImage()
Declare Exit()
Start()
Procedure Start()
Protected font = LoadFont(#PB_Any, "", 30)
OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(0, 0, 0, 800, 600)
StartDrawing(CanvasOutput(0))
Box(0, 0, 800, 600, RGB(128, 128, 128))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(font))
DrawText(100, 100, "Test copy image")
StopDrawing()
;Triggers
BindGadgetEvent(0, @CopyClipboardImage(), #PB_EventType_RightClick)
BindEvent(#PB_Event_CloseWindow, @Exit())
Repeat : WaitWindowEvent() : ForEver
EndProcedure
Procedure CopyClipboardImage()
Protected imageId = GetGadgetAttribute(0, #PB_Canvas_Image)
Protected image = CreateImage(#PB_Any, GadgetWidth(0), GadgetHeight(0))
StartDrawing(ImageOutput(image))
DrawImage(imageId, 0, 0)
StopDrawing()
SetClipboardImage(image)
Debug "copie effectuée "
EndProcedure
Procedure Exit()
End
EndProcedure
Re: Copier le contenu d'un canvasgadget dans le presse papie
Publié : jeu. 13/juin/2019 15:34
par Philippe_GEORGES
Merci Falsam,
Code : Tout sélectionner
If EventType()= #PB_EventType_LeftDoubleClick ; copie presse papier
GetGadgetAttribute(#canvas_carte, #PB_Canvas_Image)
SetClipboardImage( #PB_Canvas_Image)
MessageRequester("Information","Image copiée dans le presse papier");
J'ai procédé de cette façon, mais ça ne marche pas ....
Si tu as une idée....
Phil
Re: Copier le contenu d'un canvasgadget dans le presse papie
Publié : jeu. 13/juin/2019 15:34
par Ollivier
Bonjour, ceci devrait faire l'affaire :
Code : Tout sélectionner
If StartDrawing(CanvasOutput(CanvasNumero) )
W = OutputWidth()
H = OutputHeight()
Image = GrabDrawingImage(#Pb_Any, 0, 0, W, H)
StopDrawing()
SetClipboardImage(Image)
FreeImage(Image)
EndIf
(Et désolé Falsam : le sujet était vide quand j'ai répondu, bande de TGV !)
Re: Copier le contenu d'un canvasgadget dans le presse papie
Publié : jeu. 13/juin/2019 15:37
par falsam
Philippe_GEORGES a écrit :J'ai procédé de cette façon, mais ça ne marche pas ....
Si tu as une idée....
Voir mon code de vérification
https://www.purebasic.fr/french/viewtop ... 96#p204196
Je récupére bien l'image dans mon logiciel de traitement d'image
Re: Copier le contenu d'un canvasgadget dans le presse papie
Publié : jeu. 13/juin/2019 15:39
par falsam
La solution d'olivier est bonne aussi
Code : Tout sélectionner
;Plan de l'application
Declare Start()
Declare CopyClipboardImage()
Declare Exit()
Start()
Procedure Start()
Protected font = LoadFont(#PB_Any, "", 30)
OpenWindow(0, 0, 0, 800, 600, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CanvasGadget(0, 0, 0, 800, 600)
StartDrawing(CanvasOutput(0))
Box(0, 0, 800, 600, RGB(128, 128, 128))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(font))
DrawText(100, 100, "Test copie image")
StopDrawing()
;Triggers
BindGadgetEvent(0, @CopyClipboardImage(), #PB_EventType_RightClick)
BindEvent(#PB_Event_CloseWindow, @Exit())
Repeat : WaitWindowEvent() : ForEver
EndProcedure
Procedure CopyClipboardImage()
If StartDrawing(CanvasOutput(0) )
W = OutputWidth()
H = OutputHeight()
Image = GrabDrawingImage(#PB_Any, 0, 0, W, H)
StopDrawing()
SetClipboardImage(Image)
FreeImage(Image)
EndIf
Debug "copy effectuée "
EndProcedure
Procedure Exit()
End
EndProcedure
Re: Copier le contenu d'un canvasgadget dans le presse papie
Publié : jeu. 13/juin/2019 15:48
par Philippe_GEORGES
Falsam,
Ton message s'est croisé avec le mien !!
ça marche grâce à ton exemple.... Inutile de te dire à quel point je me trouve bête !
Code : Tout sélectionner
If EventType()= #PB_EventType_LeftDoubleClick ; copie presse papier
imageId = GetGadgetAttribute(#canvas_carte, #PB_Canvas_Image)
image = CreateImage(#PB_Any, GadgetWidth(#canvas_carte), GadgetHeight(#canvas_carte))
StartDrawing(ImageOutput(image))
DrawImage(imageId, 0, 0)
StopDrawing()
SetClipboardImage(image)
MessageRequester("Information","Image copiée dans le presse papier");
EndIf
Grand merci de ton aide,
Phil