[R] Mettre une image JPG dans la presse-papier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

[R] Mettre une image JPG dans la presse-papier

#1

Message par Ahbadiane »

Bonjour,

J'essaye de faire passer une image au format JPG dans le presse-papier avec le code suivant

Code : Tout sélectionner

#include <ClipBoard.au3>
#include <GDIPlus.au3>

Global $scNomCompletImage = "C:\Image.JPG"

_GDIPlus_Startup()
Global $hImage = _GDIPlus_ImageLoadFromFile($scNomCompletImage)
Global $hBmp = _WinAPI_CreateBitmap(_GDIPlus_ImageGetWidth($hImage), _GDIPlus_ImageGetHeight($hImage), 1, 32)
Global $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
Global $hData = _ClipBoard_SetData($hBitmap, $CF_BITMAP)

ConsoleWrite('$hData = ' & $hData & @crlf)

_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hImage)
_GDIPlus_Shutdown()
 
Au final, le presse-papier ne contient pas l'image (et $hData=0)
Un problème de Handle, de format ???
Si vous avez une piste, une idée je prends
Modifié en dernier par Ahbadiane le lun. 08 nov. 2010 17:56, modifié 1 fois.
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#2

Message par Ahbadiane »

Bonjour,

J'ai progressé un peu.
Je passe maintenant une image, mais totalement noir, dans le presse-papier avec la bonne taille.
(Je recopie même l'image initiale en utilisant son Handle)

Code : Tout sélectionner

#include <ClipBoard.au3>
#include <GDIPlus.au3>

Global $scNomCompletImage = @ScriptDir & "\Image.jpg"

_GDIPlus_Startup()
Global $hImage = _GDIPlus_ImageLoadFromFile($scNomCompletImage) ; => Handle to the image object
Global $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage) ; => Handle to a Graphics object
Global $hBmp = _WinAPI_CreateBitmap(_GDIPlus_ImageGetWidth($hImage), _GDIPlus_ImageGetHeight($hImage), 1, 32) ; The handle to a bitmap
Global $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)

_GDIPlus_ImageSaveToFile ($hImage, @ScriptDir & "\Image2.jpg")
_ClipBoard_Open("")
_ClipBoard_Empty()
Global $hData = _ClipBoard_SetDataEx($hBmp, $CF_BITMAP)
_ClipBoard_Close()
ConsoleWrite('$hData = ' & $hData & @crlf)

_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hImage)
_GDIPlus_Shutdown()
Je ne dois pas être loin de la solution mais il me manque encore un petit peu quelque chose ... un peu d'aide
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#3

Message par Ahbadiane »

Bonjour,

Je relance une dernière fois.
J'ai fait des recherches sur les autres sites (même allemand sans comprendre un mot !) mais pas de solution trouvée
Si quelqu'un a une suggestion, un début de piste, je prends
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#4

Message par bloodwolff »

Le problème vien surement du hbitmap envoyé car ce script fonctionne très bien avec une capture d'écran

Code : Tout sélectionner

#include <ClipBoard.au3>
#include <GDIPlus.au3>
#Include <ScreenCapture.au3>


_GDIPlus_Startup() 
 $hBitmap = _ScreenCapture_Capture("")
_ClipBoard_Open("")
_ClipBoard_Empty()
 _ClipBoard_SetDataEx($hImage, $CF_BITMAP)
_ClipBoard_Close()
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
Compte skype : bloodwolfff
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#5

Message par Ahbadiane »

Bonjour bloodwolff,

Merci pour ton aide :)

Je pense que le problème vient bien de $hbitmap
Mais le Handle est obtenu par : $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp) et je ne vois pas comment faire autrement. :?:

$hBmp est, lui, correct car _GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\Image2.jpg") crée bien image2.jpg
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#6

Message par bloodwolff »

j'ai tenter plusieurs choses mais j'abandonne , je ne comprend pas pourquoi avec un screen cela fontionne mais qu'avec cette fonction ... rien
_GDIPlus_BitmapCreateFromFile($sFileName)
J'espère que quelqu'un résoudra ton problème car je suis curieux d'en savoir la solution
Compte skype : bloodwolfff
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#7

Message par scorp84 »

Bonjour Ahbadiane,

Voici un exemple qui fonctionne :

Code : Tout sélectionner

#include <ScreenCapture.au3>

Local $hGUI

; Create GUI
$hGUI = GUICreate("Screen Capture", @DesktopWidth, @DesktopHeight)

; Capture window
_ScreenCapture_CaptureWnd ("GDIPlus_Image.jpg", $hGUI)
 
Je l'ai trouvé sur :
http://www.autoitscript.com/autoit3/doc ... ureWnd.htm

J'espère qu'il pourra t'aider.

Amicalement.

BM
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#8

Message par bloodwolff »

Je doute fort que ce sois ce qu'il cherche à faire ... tu as bien lu le post et tester le script ?
Compte skype : bloodwolfff
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#9

Message par scorp84 »

@ bloodwolff :

Ce n'est peut être pas LA solution mais peut être que ça pourra l'aider.

A+

BM
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#10

Message par bloodwolff »

Oui mais je ne vois pas en quoi cela peut l'aider .
Il demande comment mettre une image jpeg dans le presse papier et tu lui donne une fonction qui prend une capture de l'écran qui peut même être réduit à
_ScreenCapture_Capture ("GDIPlus_Image.jpg")
Compte skype : bloodwolfff
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#11

Message par Ahbadiane »

bonsoir,
Merci à scorp84 et à bloodwolff
Oui la question est bien de passer une image (peut importe le format jpg, png, ...) dans le presse-papier et je n'ai pas trouvé la solution :!:
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#12

Message par Jerome »

Coucou,


Peut - être que tu devrait regarder du côté du logiciel ZabGrab, je m'en sert pour faire des imprim écran soit de zone, soit de tout l'écran, et sa copie directement le tout dans le presse papier.




Jérôme
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#13

Message par Ahbadiane »

Jerome,

Cette fonction de copie d'une image dans le presse-papier est un élément d'une appli que je suis en train de développer. Et j'essaie de reconstituer une image mémorisée dans SQlite vers le presse-papier. Une image qui a été capturée précédemment.
Sinon pour la capture d'écran ou partie d'écran j'utilise PicPick
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#14

Message par Tlem »

J'ai cherché un bon moment aussi, mais je pense qu'il faut faire appel à une/des structures pour utiliser directement _ClipBoard_SetDataEx.

Sinon, j'ai bricolé ça, mais bon, c'est pas top non plus ...
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#15

Message par bloodwolff »

Oui j'y avais pensé mais sa ne reste pas très optimale comme méthode et les screen diminue un peu la qualité de l'image , mais au moins c'est la seule méthode qui fonctionne :?
Compte skype : bloodwolfff
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#16

Message par Ahbadiane »

Bonjour,

Merci Tlem pour cette solution
Je reste tout de même un peu sur ma faim
Je ne mets pas le sujet à résolu, j'espère trouver une solution par moi-même ou par un gentil membre du forum
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#17

Message par Tlem »

Je epnse que c'est tout à fait possible, mais ici comme sur le forum Anglais, personne n’a encore donné la solution.
Peut être que le sujet Anglais devrait être relancé ... :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Ahbadiane
Niveau 5
Niveau 5
Messages : 139
Enregistré le : jeu. 20 déc. 2007 22:39
Localisation : Paris
Status : Hors ligne

Re: [..] Mettre une image JPG dans la presse-papier

#18

Message par Ahbadiane »

Bonjour,

J'ai la solution :D suite un post sur le forum anglais
Voici le code

Code : Tout sélectionner

#include <ClipBoard.au3>
#include <Constants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>

Global $sImageName = FileOpenDialog("Select an image", "", "Image (*.bmp;*.jpg;*.png;*.gif)")
If @error Then Exit

_GDIPlus_Startup ()
$hImage = _GDIPlus_ImageLoadFromFile($sImageName)
$hBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hBitmap = _WinAPI_CopyImage($hBmp, 0, 0, 0, $LR_COPYDELETEORG + $LR_COPYRETURNORG)

_ClipBoard_Open(0)
_ClipBoard_Empty()
_ClipBoard_SetDataEx($hBitmap, $CF_BITMAP)
_ClipBoard_Close()
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

MsgBox(0, "Copy to Clipboard", "Successfully bitmap copied to clipboard!", 10)


;===============================================================================
;
; Function Name:   _WinAPI_CopyImage
; Description:: Copies an image, also makes GDIPlus-HBITMAP to GDI32-BITMAP
; Parameter(s): $hImg -> HBITMAP Object, GDI or GDIPlus
; Requirement(s):  WinAPI.au3
; Return Value(s): Succes: Handle to new Bitmap, Error: 0
; Author(s):    Prog@ndy
; http://www.autoitscript.com/forum/topic/...images-and-the-clipboard/page_
;===============================================================================
Func _WinAPI_CopyImage($hImg, $uType = 0 ,$x = 0, $y = 0, $flags = 0)
    Local $aResult

    $aResult = DllCall("User32.dll", "hwnd", "CopyImage", "hwnd", $hImg, "UINT", $uType, "int", $x, "int", $y,"UINT", $flags)
    Return $aResult[0]
EndFunc   ;==>_WinAPI_CopyIcon
Répondre