mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 2013
-
27 oct. 2007 à 12:08
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 2013
-
27 oct. 2007 à 21:52
Bonjour,
J'ai une picbox (en vb6) sur laquelle je dessine des formes, et j'aimerais pouvoir y superposer des images par dessus.
Ces images sont en fait des pions ronds, et je voulais savoir si c'était possible de les ajouter dans ma picbox sans enlever ce que j'ai dessiné à la main derrière (je veux afficher les pions ronds, mais pas avoir la forme rectangulaire au fond noir avec un pion au milieu qui me sert d'image.)
Est ce que quelqu'un connait une fonction qui permette de faire cela?
Est-ce possible de mettre cela en place même après avoir dessiné à la main sur la picbox?
Merci beaucoup.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 27 oct. 2007 à 12:40
Salut,
Si ton but est d'afficher une image avec une couleur de fond transparente (le noir ici en l'occurence apparement), utilise la fonction de l'API Windows TransparentBlt qui est faîte pour cà.
______________________________________
DarK Sidious
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 27 oct. 2007 à 21:52
Bon, je viens de trouver une solution à mon problème (mais ça ne résoud pas le problème avec le transparentblt :/), j'utilise un bitblt, et je mets en mémoire avant de lancer mon programme l'image noir sur blanc de la forme que je veux rajouter (pour moi c'est des pions)
'API Windows
'Bit Blitting : Détourage d'une image. Sers ici pour créer un fond transparent des pions.
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Const SRCAND = &H8800C6
Private Const SRCPAINT = &HEE0086
Private Const SRCCOPY = &HCC0020
(et dans le programme, plus loin)
(picture_base contient l'image à superposer, picture_invert contient la forme que je veux à l'arrivée, et picture_map est la picturebox sur laquelle je veux coller le tout)
Voila, j'espère que ça pourra en aider d'autres, petite alternative à transparentblt si on connait l'image de la forme à afficher, et ça enlève ce problème de ne pas mettre l'image en mémoire :)
Merci à tous les deux qui m'avez aidé, et merci à x-smurf pour cette solution :)
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 27 oct. 2007 à 15:49
J'ai un problème cependant après, l'image est bien superposée, niquel, mais si je passe une fenêtre devant ma form, l'image qu'on a rajouté va disparaitre (les dessins faits à la main restent cependant visibles)
J'en conclus que le transparentblt superpose l'image, mais ne l'enregistre pas.
Quelqu'un connait la commande pour empêcher ce désagrément?
(Pareil si on minimise la fenêtre, le dessin est intact quand on réouvre la fenêtre, par contre ce qu'on a rajouté avec transparentblt a disparu).
Merci encore une fois :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 27 oct. 2007 à 17:02
Salut,
Tu as plusieurs solutions pour palier à ce problème : tracer l'image finale du picture box dans l'événement paint de ce dernier, ou activer l'autoRedraw du picturebox.
______________________________________
DarK Sidious
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 27 oct. 2007 à 18:31
Salut,
J'ai déjà essayé de voir avec autoredraw, si je l'active avant de faire le transparentblt, ça ne m'affiche rien, et si je l'active après, le problème reste le même.
Comment fait on pour l'enregistrer manuellement dans ce cas?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 27 oct. 2007 à 19:31
Salut,
Arf, c'est vrai qu'il y a incompatibilité entre l'autoredraw et le transparentBlt, essaye avec :
Let Picture1.AutoRedraw = false
Call TransparentBlt(...)
Set Picture1.Picture = Picture1.Image
Let Picture1.AutoRedraw = true
______________________________________
DarK Sidious
jmfmarques
Messages postés7668Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 27 oct. 2007 à 19:56
Bonsoir,
Nous sommes nombreux à nous y être cassé les dents ....
La "superposition" ne dessine rien dans la picturebox .
Si le résultat plait, il n'y a rien à faire : il faut redessiner tous les pixels de la couleur non définie comme "transparente".... puis donner à la propriété Picture la valeur de la poropriété image (bien sur).
mstarsup5
Messages postés527Date d'inscriptionlundi 15 octobre 2007StatutMembreDernière intervention10 octobre 20131 27 oct. 2007 à 21:12
Hmmm non, j'avais déjà essayé le set picture1.picture=picture1.image, ça m'efface l'image superposée.
Après, il reste la solution pixel par pixel, comme le souligne jmfmarques, mais c'est assez embêtant à programmer, et ça risque de prendre du temps à la fonction :)
Je pensais essayer bitblt à la place, j'ai vu un programme où ça marchait plutôt bien, seulement je n'arrive pas à recréer ce qui a été fait. (Et je pensais que bitblt faisait pareil que transparentblt, au niveau de l'écriture de la picture...)
Enfin bref, je vais continuer à chercher, merci pour tout, et si jamais vous trouvez une solution vous passe par la tête, faite moi signe ;-)