Superposition d'image sur un dessin

Résolu
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 - 27 oct. 2007 à 12:08
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 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.

9 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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
3
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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)

        BitBlt Picture_Map.hDC, X, Y, largeur, hauteur, Picture_invert.hDC, 0, 0, SRCAND
        BitBlt Picture_Map.hDC, X, Y, largeur, hauteur, Picture_base.hDC, 0, 0, SRCPAINT
        Picture_Map.Refresh

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 :)
3
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
27 oct. 2007 à 15:18
Merci, ça marche impec, et le fichier sur les API, c'est presque comme un miracle tombé du ciel !!  : D
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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 :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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).
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
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 ;-)
0
Rejoignez-nous