Manipulation images avec transparence en vb6

Soyez le premier à donner votre avis sur cette source.

Vue 17 794 fois - Téléchargée 2 840 fois

Description

Manipuler les images en Visual Basic (VB) n?est pas chose aisée surtout lorsqu?on veut insérer une image dans une autre en tenant compte de la transparence. J?ai cherché pas mal sur le net et j?ai trouvé quelques outils et fait quelques adaptations. Je les ai regroupé dans ce package. J'espere qu'il sera utile.

Voici un exemple de ce que l?on peut faire que je vais détailler. (voir l'image comme exemple)

J?ai un contrôle PictureBox ?MainPicture? dans lequel je vais mettre une image. Puis je vais insérer d?autres images (clavier et tele, boutons, ..)en tenant compte de leur transparence.

1) VB en standard ne gère pas tous les types d?images comme les PNG par exemple. Pour cela, j?ai trouvé la DLL freeimage.dll et le module MFreeImage.bas. Ce sont des composants d?un Open Source. Pour plus d?info, aller sur le site http://freeimage.sourceforge.net/
Pour charger l?image dans mon ?MainPicture?, j?utilise la fonction LoadPictureEx qui se trouve dans MFreeImage.bas et qui permet de charger tous les types d?images (PNG, BMP, TIF,GIF, etc .. la liste est impressionnante).
L?instruction est simple (File contient l?image à charger) : Me.MainPicture.Picture = LoadPictureEx(File)

2) Pour insérer une image dans cette Main Picture , j?utilise les 4 instructions suivantes :
Me.PicRef.Picture = LoadPictureEx(File)
X = 50 ?Exemple
Y = 100 ?Exemple
Call InsertImage(Me.PicRef, Me.MainPicture, X, Y, True, 255)

a) Chargement de l?image dans une PictureBox ?PicRef?
b) Identification des coordoonnées où insérer l?image (X et Y).
c) Appel de la procédure InsertImage (détaillé plus tard) qui passe les parametres :
- Contrôle a inserer
- Contrôle destination
- Coordonnées X et Y (Left et Top) en Pixels ? (Important)
- Si transparence souhaitée ou non
- Valeur de la couleur utilisee pour la transparence (Je me suis rendu compte que certaines images utilisait 255 et d?autres 0. C?est la raison pour laquelle je la passe en paramètre. Note : Pour vos essais, utilisez 255, puis 0. Si cela ne marche pas, executer le code pas a a pas dans la methode 'CopyToAnotherDib' afin de détecter quelle est valeur ustilise votre image.

3) Voici la procédure InsertImage(
Sub InsertImage(ImageSrc As Control, ImageDest As Control, xDest As Long, yDest As Long, transparence As Boolean, Couleur As Integer)

Dim cDibSrc As New cDIBSection
Dim cDibDest As New cDIBSection

cDibSrc.CreateFromPicture ImageSrc
cDibDest.CreateFromPicture ImageDest

Call cDibSrc.CopyToAnotherDib(cDibDest, xDest, yDest, transparence, Couleur)

' On re cree l'image a paretir du DIB
cDibDest.PaintPicture ImageDest.hDC
ImageDest.Picture = ImageDest.Image

End Sub

Pour ce faire j?utilise un autre outil que j?ai trouve sur le Net qui permet de manipuler les DIB (Device Independant Bitmap). Aller sur le site : http://easyvb.free.fr/multimedia.php3
Et descendre le zip : imgproc2.zip ? vous apprendrez beaucoup sur la manipulation de DIB pour appliquer des filtres, changer la taille, etc ?
De cet outil, je n'utilise que la classe : cDIBSection dans laquelle j?ai ajoutée la méthode CopyToAnotherDib

Que fait cette procédure InsertImage ?
a) Cree les Dib?s correspondants des deux images à traiter (Methode CreateFromPicture)
b) Appelle la methode CopyToAnotherDib qui va se charger d?inserer le DIB d?une image sur le DIB de l?autre image
c) Recree l?image du DIB modifié (PaintPicture) dans le controle VB
d) Transfere l?image sur la picture (derniere instruction). A ce propos, Je n?ai pas bien compris la distinction entre ces deux proprietes (Picture et Image), mails il semble qu?elles doivent etre synchronisées. La methode PaintPicture semble uniquement mettre a jour la propriete « Image » .. tandis que la methode CreateFromPicture se source a partir de la propriete « Picture ».

4) Voila c'est tout. Je voulai partager avec vous cette technique.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
21 avril 2009 à 13:23
pas plus clair la deuxieme fois....

je serai tenté de de rediriger vers la création d'un UserControl
rosittainf
Messages postés
2
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
21 avril 2009

21 avril 2009 à 13:00
peut etre c pa trop claire
je ve bien savoir comment construire une boite à outils ki contient des PictureBox dont je puisse les déplacée sur la form en gardant l'image source de la boite à outils.
je ve savoir comment faire avec vb6.
je sé bien ke vou pouvez m'aidée
SVP aidez moi c une partie de mon PFE.
si vou avé une idée vous pouvé m'envoyée sur mon @ mail rositta.info@yahoo.fr
Merci beaucoup
rosittainf
Messages postés
2
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
21 avril 2009

21 avril 2009 à 12:56
aider moi SVP!!!
je ve bien savoir comment construire une boite à outils ki contient des PictureBox dont je puisse les déplacée sur la formen gardant sur l'image source de la boite à outils.
je ve savoir comment faire avec vb6.
je sé bien ke vou pouvez m'aidée.
Merci
diablamanshadow
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008

19 août 2006 à 16:57
arf je le repete pour la x ieme fois mon prog donner a l'utilisateur un fichier jpg mais l'image telechargee etais en png donc je chopais la png et vu que je devais passer a l'utilisateur une jpg je convertissais la png et tant qu'a faire a avoir une jpg je l'utilisais pour la foutre dans le programme pour pas reutiliser des fonction en plus pour charger une png
v finir par peter un cable a me repeter tt les 10 min on ma encore dit ca y a 5 min sur msn ...
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
19 août 2006 à 16:50
pour charger un fichier PNG, il faut passer par un fichier JPG intermédiaire ... :o

euh...... non ^^

et heureusement ^^
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.