OVH Cloud OVH Cloud

[WD7.5] Copier Image dans le presse papier.

7 réponses
Avatar
Gilles G.
Hello.


J'ai un petit souci avec la fonction VersPressePapier (ou alors est-ce
le champ image)

J'ai besoin d'envoyer une image physique au presse papier.

Pour cela, je la charge dans un champ image caché, et je l'envoie au
presse papier avec un VersPressePapier.

Le pb c'est que quelle que soit la profondeur de l'image (ici en
l'occurrence 2 bits, donc ridicule en taille), ca atterrit dans le
presse papier en 24 bits, et ça prend donc une mémoire phénoménale.


Avez vous une idée?

7 réponses

Avatar
Gégé
> Avez vous une idée?


De tête, l'API SetClipboardData
Avatar
Gilles G.
In article <c0vhi9$7e5$,
says...

> Avez vous une idée?
De tête, l'API SetClipboardData



Hum, ca fonctionne bizarrement.
Il met bien quelque chose dans le PP, mais ca n'est pas une image.

Je tourne en rond ;(
Avatar
Romain PETIT
Gilles G. a présenté l'énoncé suivant :

De tête, l'API SetClipboardData





Hum, ca fonctionne bizarrement.
Il met bien quelque chose dans le PP, mais ca n'est pas une image.



Quel est ton code exactement ?

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Gilles G.
In article ,
says...
Gilles G. a présenté l'énoncé suivant :

>> De tête, l'API SetClipboardData

> Hum, ca fonctionne bizarrement.
> Il met bien quelque chose dans le PP, mais ca n'est pas une image.

Quel est ton code exactement ?




Voilà (bon c'est crade, fais pas attention à ça ;) )

RetourFonction est un booléen
hWndNewOwner est un entier=Handle()
uFormat est un entier sans signeÏ_BITMAP // Type C :UINT
hMem est un entier


SELON nPalette
CAS 1,4
chImage=dSauveImageBMP(ImPP,enMémoire,16)
CAS 8,24,32
chImage=dSauveImageBMP(ImPP,enMémoire,0)
FIN

VersPressePapier(chImage)

RetourFonction=API("USER32","OpenClipboard",hWndNewOwner)

hMem=&chImage

RetourFonction=API("USER32","SetClipboardData",uFormat,hMem)

SI PAS RetourFonction ALORS
Erreur(ErreurInfo())
FIN

RetourFonction=API("USER32","CloseClipboard")
Avatar
Romain PETIT
Gilles G. a formulé la demande :


chImage=dSauveImageBMP(ImPP,enMémoire,0)
VersPressePapier(chImage)

Je crois que le problème est là.
La fonction VersPressePapier n'attend pas une chaine d'octets mais un
champ image.
Il faut que tu repasses ta chaine d'octet dans le champ image (ou un
autre) après avoir appliqué la transformation.

chImage=dSauveImageBMP(ImPP,enMémoire,0)
ImPP = chImage
VersPressePapier(ImPP)


(pour l'API c'est pareil, le paramètre passé SetClipBoardData est un
handle sur une structure BITMAP et non un pointeur sur ta chaine
d'octet)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_2h6a.asp

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Dans son message précédent, Romain PETIT a écrit :

Je crois que le problème est là.



Ah ben non, on a toujours une image en 24 bits...

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Gilles G.
In article ,
says...
Gilles G. a formulé la demande :


chImage=dSauveImageBMP(ImPP,enMémoire,0)
VersPressePapier(chImage)
Je crois que le problème est là.
La fonction VersPressePapier n'attend pas une chaine d'octets mais un
champ image.
Il faut que tu repasses ta chaine d'octet dans le champ image (ou un
autre) après avoir appliqué la transformation.
chImage=dSauveImageBMP(ImPP,enMémoire,0)
ImPP = chImage
VersPressePapier(ImPP)



Oui mais non.
J'essayais cette entourloupe justement parce que VersPressePapier a la
facheuse tendance de copier vers le presse papier l'image avec la
profondeur de l'écran.

Je charge dans mon champ image une pic sur 2 bits de profondeur, autant
dire que ça ne pèse rien.
Quand elle se retrouve en 32 bits dans le presse papier, c'est une autre
paire de manche.

Là je tourne en rond.

Si on fait un "copier" depuis Paint Shop Pro par exemple, c'est avec la
profondeur correcte que l'opération est réalisée. C'est pour ça que je
cherchais à transformer l'image en chaine mémoire avec un nombre de bits
peu élevés, dans l'espoir que le transfert vers le presse papier
fonctionnerait.

Hélas, si ce sont bien les données d'une image qui sont dans le presse
papier, l'indicateur de format du presse papier est à texte et les
logiciels de dessins refusent donc le contenu.

Bref, je suis bloqué ;)