Manipulation images avec transparence en vb6

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

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.