Utiliser la librairie Windows Image Acquisition en VBA

Ce document présente l'utilisation de la librairie Windows Image Acquisition Automation Library v2.0 (WIA) .

Cette librairie permet de manipuler les images.
Les informations et les exemples proposés sont en partie issus des samples VB6 fournis lors du téléchargement de la librairie (wiaaut.dll), et adaptés pour une utilisation en VBA Excel.


Article lu   fois.

Les deux auteurs

Profil ProSite personnel

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Préambule

Tout d'abord, voici un résumé des manipulations possibles:

* Accéder aux propriétés d'un fichier image.
* Lire et modifier les fichiers image,ainsi que leurs propriétés.
* Manipuler les images: Rotation, Retournement, Rognage, Fusion, Compression, Conversion, redimensionnement, Décomposition des frames d'une image(par exemple d'un GIF animé)...
* Visualiser et gérer les images des webCams, appareils photos numériques et scanners connectées à votre PC.


La Bibliothèque WIA est principalement conçue pour gérer les formats d'image PNG, BMP, JPG, GIF et TIFF.
Les autres formats sont à tester en fonction de votre système d'exploitation.


Téléchargez la librairie si elle n'est pas installée sur votre poste:

Le lien sur le site Microsoft

Et suivez les conseils d'installation fournis dans le fichier d'aide ReadMe.txt

La configuration minimale nécessaire: Windows XP

Les exemples suivants ont été Testés avec WinXP et Excel2002 / Excel2000.


II. Manipuler les images

II-A. L'utilisation des filtres

Ce chapitre décrit les filtres disponibles et présente quelques exemples d'utilisation.

II-A-1. Lister tous les filtres disponibles et afficher une description pour chacun d'entre eux

Vb
Sélectionnez

Sub listerInformationsGeneralesFiltres()
    Dim x As Integer
    Dim IP As ImageProcess
    
    'creation du gestionnaire de filtre
    Set IP = CreateObject("WIA.ImageProcess")
    
    'boucle sur l'ensemble des filtres disponibles
    For x = 1 To IP.FilterInfos.Count
        Debug.Print "--> " & IP.FilterInfos(x).Name & ":"
        Debug.Print IP.FilterInfos(x).Description
        Debug.Print vbCrLf & "**************" & vbCrLf & vbCrLf
    Next x
End Sub


Remarque:
Les descriptions sont en anglais.

Les sous chapitres suivants sont la traduction du résultat de la macro "listerInformationsGeneralesFiltres".
N'hésitez pas à m'avertir si j'ai fait des erreurs dans la traduction...;o)

II-A-1-a. RotateFlip / Rotations et Retournements

Permet d'effectuer des rotations (par 90 degrés), ainsi que des retournements horizontaux et verticaux.

RotationAngle -
Propriété pour effectuer une rotation de 90, 180, ou 270 degrés. La valeur par défaut est 0.

FlipHorizontal -
Propriété pour appliquer un retournement horizontal si la valeur True est attribuée. La valeur par défaut est False.

FlipVertical -
Propriété pour appliquer un retournement vertical si la valeur True est attribuée. La valeur par défaut est False.

FrameIndex -
Propriété pour indiquer l'index d'un Frame, dans le cas ou vous souhaiteriez modifier un Frame autre que le Frame actif. La valeur par défaut est 0.

II-A-1-b. Crop / Couper

Couper / Rogner une image en fonction des valeurs indiquées.

Left -
Définit la position à partir du bord gauche de l'image pour la coupe (valeur en pixels). La valeur par défaut est 0.

Top -
Définit la position à partir du bord supérieur de l'image pour la coupe (valeur en pixels). La valeur par défaut est 0.

Right -
Définit la position à partir du bord droit de l'image pour la coupe (valeur en pixels). La valeur par défaut est 0.

Bottom -
Définit la position à partir du bord inférieur de l'image pour la coupe (valeur en pixels). La valeur par défaut est 0.

FrameIndex -
Propriété pour indiquer l'index d'un Frame, dans le cas ou vous souhaiteriez modifier un Frame autre que le Frame actif. La valeur par défaut est 0.

II-A-1-c. Scale / Redimensionner

Redimensionne une image en indiquant les hauteur et largeur maximum, tout en préservant les proportions si nécessaire.

MaximumWidth -
Définit la largeur maxi de l'image (en pixels).

MaximumHeight -
Définit la hauteur maxi de l'image (en pixels).

PreserveAspectRatio -
Appliquez la valeur True (Valeur par défaut) pour conserver les proportions.
Appliquez la valeur False pour que l'image s'étire en fonction des valeurs MaximumWidth et MaximumHeight.

FrameIndex -
Propriété pour indiquer l'index d'un Frame, dans le cas ou vous souhaiteriez modifier un Frame autre que le Frame actif. La valeur par défaut est 0.

II-A-1-d. Stamp / Fusionner

Fusionne 2 images à partir des coordonnées horizontales et verticales spécifiées.

ImageFile -
Définit l'image que vous souhaitez fusionner.

Left -
Définit la position horizontale par rapport au bord gauche de l'image (en pixels). La valeur par défaut est 0.

Top -
Définit la position verticale par rapport au bord supérieur de l'image (en pixels). La valeur par défaut est 0.

FrameIndex -
Propriété pour indiquer l'index d'un Frame, dans le cas ou vous souhaiteriez modifier un Frame autre que le Frame actif. La valeur par défaut est 0.

II-A-1-e. Exif

Ajoute ou supprime la propriété EXIF spécifiée.

Remove -
Indiquez la valeur True si vous souhaitez supprimer la propriété EXIF spécifiée. La valeur par défaut (False) permet d'ajouter la propriété EXIF spécifiée

ID -
Indique l'ID de la propriété que vous souhaitez ajouter ou supprimer.

Type -
Indique le type de valeur pour la propriété Exif que vous souhaitez ajouter (ignoré lors de l'utilisation la propriété Remove)

Value -
Indique la valeur de la donnée EXIF que vous souhaitez ajouter (ignoré lors de l'utilisation la propriété Remove)

FrameIndex -
Propriété pour indiquer l'index d'un Frame, dans le cas ou vous souhaiteriez modifier un Frame autre que le Frame actif. La valeur par défaut est 0.

II-A-1-f. Frame

Ajoute ou supprime le Frame spécifié.

Remove -
Indiquez la valeur True pour supprimer le Frame spécifié(par son index). La valeur par défaut (False) permet d'insérer une image avant le frame spécifié.

ImageFile -
Indique l'objet image du Frame actif que vous souhaitez ajouter. (ignoré lors de l'utilisation la propriété Remove)

FrameIndex -
Pour les suppressions, indiquez l'index du Frame à supprimer. pour les ajouts, le frame sera inséré avant l'index spécifié. La valeur par défaut est 0.

II-A-1-g. ARGB

Modifie les bits d'une image en fonction des données spécifiées.

ARGBData -
La propriété ARGBData Renvoie un vecteur de valeurs Long qui représente les données ARGB (canal Alpha & couleurs RGB) du Frame spécifié.

FrameIndex -
Propriété pour indiquer l'index d'un Frame, dans le cas ou vous souhaiteriez modifier un Frame autre que le Frame actif.
La valeur par défaut est 0.

II-A-1-h. Convertir

Convertit l'image dans un type spécifié.

FormatID -
Indiquez le format souhaité pour la conversion. Les constantes disponibles sont: wiaFormatBMP, wiaFormatPNG, wiaFormatGIF, wiaFormatJPEG, ou wiaFormatTIFF.

Quality -
pour les fichiers JPEG, appliquez une valeur entre 1 to 100 pour spécifier la qualité de compression. La valeur par défaut = 100.

Compression -
Pour un fichier TIFF, indiquez les formats : CCITT3, CCITT4, RLE ou Uncompressed pour spécifier le mode de compression. La valeur par défaut est LZW.

II-A-2. Comment utiliser les filtres

Les exemples suivants sont en partie adaptés de l'aide MSDN:

II-A-3. Redimensionner une image

Vb
Sélectionnez

Sub redimensionnerImage()
    Dim Img As WIA.ImageFile, IP As WIA.ImageProcess
    
    'Création conteneur pour l'image à manipuler
    Set Img = CreateObject("WIA.ImageFile")
    'Création du gestionnaire de filtre
    Set IP = CreateObject("WIA.ImageProcess")
    
    'Chargement de l'image dans le conteneur
    Img.LoadFile "C:\fourmiz.JPG"
    
    	'Ajoute le filtre pour redimensionner l'image (Scale)
        IP.Filters.Add IP.FilterInfos("Scale").FilterID
        'Définit la largeur maxi pour le redimensionnement
        IP.Filters(1).Properties("MaximumWidth") = 90
        'Définit la hauteur maxi pour le redimensionnement
        IP.Filters(1).Properties("MaximumHeight") = 90
        'remarque :
        'Les proportions sont conservées. Le filtre prend en compte
        'les ratios et adapte la taille pour ne pas dépasser les valeurs maxi définies.
        
    'Application du filtre à l'image
    Set Img = IP.Apply(Img)
    'Enregistre l'image redimensionnée
    Img.SaveFile "C:\fourmizThumbnail.JPG"
End Sub


II-A-4. Combiner deux images pour en créer une nouvelle

Cette procédure permet de créer une nouvelle image à partir de 2 images existantes.
Remarque:
Dans cet exemple, la 2eme image va s'incruster dans la première à partir de l'angle inférieur droit.
Les dimensions de la 2eme image doivent donc etre plus petites que la premiere afin que celle ci ne soit pas totalement masquée.

Vb
Sélectionnez

Sub combinerDeuxImages()
    Dim Img1 As WIA.ImageFile, Img2 As WIA.ImageFile, IP As WIA.ImageProcess
    
    'Création conteneur pour l'image à manipuler
    Set Img1 = CreateObject("WIA.ImageFile")
    'remarque: vous devez créer un conteneur pour chaque image
    Set Img2 = CreateObject("WIA.ImageFile")
    'Création du gestionnaire de filtre
    Set IP = CreateObject("WIA.ImageProcess")
    
    'Chargement de la 1ere image dans le conteneur
    Img1.LoadFile ("C:\fourmiz.JPG")
    
    ' Remarque pour cet exemple :
    'Les dimensions de la 2eme image doivent etre plus petites que la premiere afin
    'que celle ci ne soit pas totalement masquée
    
    'Chargement de la 2eme image dans le conteneur
    Img2.LoadFile ("C:\fourmizThumbnail.JPG")
    
        'Ajoute le filtre pour combiner/fusionner (Stamp)
        IP.Filters.Add (IP.FilterInfos("Stamp").FilterID)
        '
        IP.Filters(1).Properties("ImageFile") = Img2
        'définit la position horizontale de la 2eme image pour la fusion
        IP.Filters(1).Properties("Left") = Img1.Width - Img2.Width
        'définit la position verticale de la 2eme pour la fusion
        IP.Filters(1).Properties("Top") = Img1.Height - Img2.Height
    
    'Application du filtre à la 1ere image
    Set Img1 = IP.Apply(Img1)
    'sauvegarde de la nouvelle image
    Img1.SaveFile ("C:\fourmiz_ImageCombinee.JPG")
End Sub


II-A-5. Fusionner Deux images verticalement

Cet exemple permet de créer une nouvelle image à partir de 2 images existantes en appliquant une jointure bout à bout verticalement.

Vb
Sélectionnez

Sub FusionVerticale_DeuxImages()
    Dim Img1 As Object, Img2 As Object
    Dim IP As ImageProcess
    Dim Largeur As Long, Hauteur As Long
    Dim V As Object, Img3 As Object
    Dim C As Long
    Dim i As Integer
    
    'Création conteneur pour l'image à manipuler
    Set Img1 = CreateObject("WIA.ImageFile")
    'remarque: vous devez créer un conteneur pour chaque image
    Set Img2 = CreateObject("WIA.ImageFile")
    'Création du gestionnaire de filtre
    Set IP = CreateObject("WIA.ImageProcess")
    
    'Chargement de la 1ere image dans le conteneur
    '(l'image qui sera placée au dessus)
    Img1.LoadFile ("C:\fourmiz.JPG")
    'Chargement de la 2eme image dans le conteneur
    '(l'image qui sera placée dessous)
    Img2.LoadFile ("C:\fourmizThumbnail.JPG")
    
    
    '------ceation d'un support pour fusionner les 2 images
        If Img1.Width > Img2.Width Then
            Largeur = Img1.Width
            Else
            Largeur = Img2.Width
        End If
        
        Hauteur = Img1.Height + Img2.Height
        
        C = &H80000004 'couleur de fond
        Set V = CreateObject("WIA.Vector")
        
        V.Add C
        V.Add C
        V.Add C
        V.Add C
        
        Set Img3 = V.ImageFile(2, 2)
        Set IP = CreateObject("WIA.ImageProcess")
        IP.Filters.Add IP.FilterInfos("Scale").FilterID
        IP.Filters(1).Properties("MaximumWidth") = Largeur
        IP.Filters(1).Properties("MaximumHeight") = Hauteur
        IP.Filters(1).Properties("PreserveAspectRatio") = False
        Set Img3 = IP.Apply(Img3)
    '------------------
    
    
    'réinitialisation des filtres
    For i = 1 To IP.Filters.Count
    IP.Filters.Remove i
    Next i
    
    'fusionne l'image1 dans le support
    IP.Filters.Add (IP.FilterInfos("Stamp").FilterID)
    IP.Filters(1).Properties("ImageFile") = Img1
    IP.Filters(1).Properties("Left") = 0
    IP.Filters(1).Properties("Top") = 0
    
    Set Img3 = IP.Apply(Img3)
    
    'fusionne l'image2 dans le support
    IP.Filters(1).Properties("ImageFile") = Img2
    IP.Filters(1).Properties("Left") = 0
    IP.Filters(1).Properties("Top") = Img1.Height
 
    IP.Filters.Add IP.FilterInfos("Convert").FilterID
    IP.Filters(2).Properties("FormatID").Value = wiaFormatJPEG
    IP.Filters(2).Properties("Quality").Value = 90
   
    Set Img3 = IP.Apply(Img3)
    
    'sauvegarde de la nouvelle image
    Img3.SaveFile ("C:\resultat_Fusion_Deux_images.jpg")
End Sub


II-A-6. Couper / Rogner une image

L'exemple suivant permet de couper une image afin de n'en récupérer que la partie supérieure gauche (Rapport 2/3).

Vb
Sélectionnez

Sub couperImage()
    Dim Img1 As Object, IP As Object
    
    'Création conteneur pour l'image à manipuler
    Set Img1 = CreateObject("WIA.ImageFile")
    'Création du gestionnaire de filtre
    Set IP = CreateObject("WIA.ImageProcess")
    
    'Chargement de l'image dans le conteneur
    Img1.LoadFile ("C:\fourmiz.jpg")
    
    'Ajoute le filtre pour Couper/Rogner l'image (Crop)
    IP.Filters.Add (IP.FilterInfos("Crop").FilterID)
    
    'La coupe sera effectuée à l'intérieur du cadre défini ci dessous:
    '**********
    'definit la position à partir du bord gauche pour la coupe
    IP.Filters(1).Properties("Left") = 0
    'definit la position à partir du bord supérieur pour la coupe
    IP.Filters(1).Properties("Top") = 0
    'definit la position à partir du bord droit pour la coupe
    IP.Filters(1).Properties("Right") = Img1.Width / 3
    'definit la position à partir du bord inférieur pour la coupe
    IP.Filters(1).Properties("Bottom") = Img1.Height / 3
        
    'application du filtre
    Set Img1 = IP.Apply(Img1)
    
    'Sauvegarde de la nouvelle image
    Img1.SaveFile ("C:\sauvegarde_Image_Coupee.jpg")
End Sub


II-A-7. Créer une image TIFF type multi-frame (multi-page)

Cet exemple Crée une image TIFF type multi-frame, à partir de 3 images existantes

Vb
Sélectionnez

Sub creationImage_Multipage()
Dim Img As ImageFile, Page2 As ImageFile, Page3 As ImageFile
Dim IP As ImageProcess
Dim v As Vector

    'Création des conteneurs pour les images à manipuler
    Set Img = CreateObject("WIA.ImageFile")
    Set Page2 = CreateObject("WIA.ImageFile")
    Set Page3 = CreateObject("WIA.ImageFile")
    
    'Création du gestionnaire de filtre
    Set IP = CreateObject("WIA.ImageProcess")
    
        'chargement des images
        Img.LoadFile "C:\fourmiz.JPG"
        Page2.LoadFile "C:\fourmiz_ImageCombinee.JPG"
        Page3.LoadFile "C:\fourmizThumbnail.JPG"
        
        'Ajoute un filtre pour gérer un premier Frame/Multipage
        IP.Filters.Add IP.FilterInfos("Frame").FilterID
        'définit le contenu du Frame
        Set IP.Filters(IP.Filters.Count).Properties("ImageFile") = Page2
        
        'Ajoute un filtre pour gérer un deuxieme Frame/Multipage
        IP.Filters.Add IP.FilterInfos("Frame").FilterID
        'définit le contenu du Frame
        Set IP.Filters(IP.Filters.Count).Properties("ImageFile") = Page3
        
        'Ajoute un filtre de conversion pour la nouvelle image (au format TIFF)
        '(TIFF est le seul format qui supporte la sauvegarde en multi-frames)
        IP.Filters.Add IP.FilterInfos("Convert").FilterID
        IP.Filters(IP.Filters.Count).Properties("FormatID") = wiaFormatTIFF
    
    'Application du filtre à la 1ere image:
    '(ajoute 2 frames dans la 1ere image, au format Tiff
    Set Img = IP.Apply(Img)
    
    'sauvegarde de la nouvelle image
    Img.SaveFile "C:\monImageMultipage.tif"
End Sub


Remarque :
TIFF est le seul format qui supporte la sauvegarde en multi-frames.

II-B. Les propriétés des images

II-B-1. Lister les propriétés d'une image

La librairie WIA permet d'extraire toutes les propriétés des images:

Vb
Sélectionnez

    Dim Img As ImageFile
    Dim P As Property
    Dim S As String
    
    'Création conteneur pour l'image à manipuler
    Set Img = CreateObject("WIA.imageFile")
    
    'Chargement de l'image dans le conteneur
    Img.LoadFile ("C:\fourmiz.JPG")
    
    'Boucle sur la collection de propriétés
    For Each P In Img.Properties
        S = P.Name & "(" & P.PropertyID & ") = "
        If P.IsVector Then
            S = S & " - vector data not emitted - "
            
            ElseIf P.Type = RationalImagePropertyType Then
            S = S & P.Value.Numerator & "/" & P.Value.Denominator
            
            ElseIf P.Type = StringImagePropertyType Then
            S = S & """" & P.Value & """"
            
            Else
            S = S & P.Value
        End If
        Debug.Print S
    Next


II-B-2. Créer un nouveau TAG dans une image

La macro précédente montre comment lire les propriétés d'une image, mais il est aussi possible de les modifier.
Voici une procédure pour créer un nouveau TAG "Titre" dans une image.
Cet exemple utilise le filtre Exchangeable Image File (EXIF).

Vb
Sélectionnez

Sub creation_TAG_TITRE_copieImage()
    Dim Img As ImageFile
    Dim IP As ImageProcess
    Dim v As Vector
    Dim i As Integer
    
    'Création conteneur pour l'image à manipuler
    Set Img = CreateObject("WIA.imageFile")
    
    'creation du gestionnaire de filtre
    Set IP = CreateObject("WIA.imageProcess")
    
    'création d'un vecteur
    '(Un vecteur permet de créer une collection pour des valeurs du même type.) 
    Set v = CreateObject("WIA.Vector")
    
    'chargement de l'image
    Img.LoadFile "C:\fourmiz.JPG"
    
    'définit le filtre pour gérer l'EXIF
    IP.Filters.Add IP.FilterInfos("Exif").FilterID
    IP.Filters(1).Properties("ID") = 40091
		'40091  Titre
		'40092  Commentaire
		'40093  Auteur
		'40094  Mots clés  

		'spécifie le type de valeur pour le propriété du filtre:
		'constante VectorOfBytesImagePropertyType = 1101 (la valeur est un vecteur)
		IP.Filters(1).Properties("Type") = VectorOfBytesImagePropertyType
		'voir le fichier d'aide fourni avec la librairie WIA pour 
		'obtenir la liste des constantes disponibles
    
    'stocke une chaine de caractères dans le vecteur
    v.SetFromString "Test de TAG 'TITRE' : utilisation de WIA v2.0"
    
	'applique au filtre le contenu du vecteur  
	IP.Filters(1).Properties("Value") = v
			    
	'application du filtre dans l'image
	Set Img = IP.Apply(Img)
    
    'sauvegarde de l'image
    Img.SaveFile "C:\fourmiz_Test_EXIF.JPG"
End Sub


Ensuite allez dans l'explorateur Windows pour visualiser le résultat:
     Faites un clic droit sur l'image "fourmiz_Test_EXIF.JPG"
     Option Propriétés
     Onglet Résumé (Description)

II-B-3. Vérifier si un fichier GIF est de type animé ou standard

La propriété IsAnimated permet de vérifier le format des images GIF.

Vb
Sélectionnez
	
	Sub controleFormatImageGIF()
	    Dim objImage As WIA.ImageFile
	    
	    'Création conteneur pour l'image à manipuler
	    Set objImage = CreateObject("WIA.ImageFile")
	    
	    'chargement de l'image
		objImage.LoadFile ("C:\fichierImage.gif")
	    
	    If objImage.IsAnimated Then
	        MsgBox "Gif animé"
	        Else
	        MsgBox "Gif standard"
	    End If
	End Sub
	


III. Gérer les WebCams

III-A. Comment visualiser les images d'une WebCam dans un UserForm

Rien de plus simple:
Quand la librairie wiaaut.dll est installée sur votre poste,
Cherchez les objets DeviceManager Class et VideoPreview Class dans la liste des contrôles supplémentaires.
Insérez les 2 objets dans votre USF.


Et ensuite utilisez cette procédure:

Vb
Sélectionnez

Private Sub UserForm_Initialize()
	DeviceManager1.RegisterEvent wiaEventDeviceConnected
	DeviceManager1.RegisterEvent wiaEventDeviceDisconnected
End Sub


III-B. Capturer une image de la webCam

Cet exemple nécessite d'ajouter un contrôle Image nommé "Image1" et un bouton nommé "CommandButton1" dans l'UserForm. Le bouton permet de déclencher la capture qui va ensuite s'afficher dans le contrôle Image.

Vb
Sélectionnez

Option Explicit
Dim Di As DeviceInfo
Dim Dev As Device
	
Private Sub UserForm_Initialize()
    DeviceManager1.RegisterEvent wiaEventDeviceConnected
    DeviceManager1.RegisterEvent wiaEventDeviceDisconnected
    
    '(1) correspond au premier objet connecté
    Set Di = DeviceManager1.DeviceInfos.Item(1)
    'récupère la connexion active
	Set Dev = Di.Connect
    
    If Dev.Type = VideoDeviceType Then
        Set VideoPreview1.Device = Dev
    End If
End Sub


Private Sub CommandButton1_Click()
    Dim Itm As Item
    Dim Img As ImageFile
    
    'effectue la capture d'image
    Set Itm = Dev.ExecuteCommand(wiaCommandTakePicture)
    
    If Not Itm Is Nothing Then
        Set Img = Itm.Transfer
            
            If Not Img Is Nothing Then
            	'affiche l'image capturée dans un objet "Image"
                Set Image1.Picture = Img.FileData.Picture
            End If
    End If
    
    'pour enregistrer la capture sur le disque
    'Img.saveFile "C:\monimageTest_WIA_V02.jpg"
End Sub


IV. Le contrôle CommonDialog de WIA

IV-A. Présentation

La librairie Windows Image Acquisition possède son propre contrôle CommonDialog. Celui-ci est accessible en utilisant la fonction CreateObject où en ajoutant le contrôle "CommonDialog Class", disponible dans la liste des contrôles supplémentaires après l'installation de WIA.

Image non disponible

Pour limiter la confusion avec le contrôle "Microsoft Common Dialog control, Version 6", le contrôle sera renommé wiaCDiag (plutôt que CommonDialog1, nom par défaut) dans les exemples suivants.

IV-B. Assistant Impression de photographies

La méthode ShowPhotoPrintingWizard permet le lancement de l'assistant "Impression de photographies" de windows XP.

Image non disponible

Cet exemple est une adaptation de l'aide en ligne WIA (wiaaut.chm).

ImpressionPhotos
Sélectionnez

Sub ImpressionPhotos()
	Dim v As Vector
	Dim WiaDlg As WIA.CommonDialog
	
	Set WiaDlg = CreateObject("WIA.COMMONDIALOG")
	Set v = CreateObject("WIA.Vector")
	
	v.Add "C:\WINDOWS\Web\Wallpaper\Dune.jpg"
	v.Add "C:\WINDOWS\Web\Wallpaper\Floraison.jpg"
	v.Add "C:\WINDOWS\Web\Wallpaper\Radiance.jpg"
	
	WiaDlg.ShowPhotoPrintingWizard v
	
	Set v = Nothing
	Set WiaDlg = Nothing
End Sub


IV-C. Acquisition Image Scanner/WebCam

La méthode ShowAcquireImage permet l'acquisition d'une image en provenance d'un scanner où d'une WebCam. On peut l'utiliser en plaçant le contrôle Commondialog WIA sur un UserForm (ou une Form en VB6).

Image non disponible

La propriété Name permet de renommer le contrôle en wiaCDiag (plus explicite que le CommonDialog1 standard).

PS: Notez le nombre de propriétés réduites au strict minimum, ce qui peut nous permettre de l'identifier par rapport au nombre de propriétés beaucoup plus important du contrôle "Microsoft Common Dialog"

Placez ensuite des contrôles CommandButton et Image dans l'UserForm.

Acquisition image
Sélectionnez

Option Explicit

Private Sub UserForm_Initialize()
    Image1.PictureSizeMode = fmPictureSizeModeZoom
End Sub


' Acquisition d'une image
'
Private Sub CommandButton1_Click()
    Dim Img As ImageFile
    
    Set Img = wiaCDiag.ShowAcquireImage
    
    If Not Img Is Nothing Then
    Set Image1.Picture = Img.FileData.Picture
    End If
End Sub


Lors du lancement de la procédure, l'écran de sélection des périphériques WIA apparaît (si plusieurs périphériques sont disponibles).

Image non disponible


La fenêtre suivante dépend du type de périphérique sélectionné.

Le périphérique WebCam

Image non disponible

On retrouve la fenêtre standard WIA de capture photos. Le bouton "Obtenir la photo" permet de retourner dans l'UserForm initial et d'afficher l'image capturée.

Image non disponible



Le périphérique Scanner

Image non disponible

On retrouve la fenêtre standard WIA de numérisation. Le bouton "Numériser" permet de retourner dans l'UserForm initial et d'afficher l'image numérisée.

Image non disponible

IV-D. Assistant Scanner appareil photo

La méthode ShowAcquisitionWizard permet de lancer l'assistant scanneur-appareil photo. Celui-ci permet l'acquisition d'images en provenance d'un scanner ou d'une webcam, puis d'enchaîner par l'enregistrement d'un fichier image. Cette procédure prend comme paramètre un "Device", Device pouvant être obtenu par la méthode showSelectDevice.

Vb
Sélectionnez

    Dim MonDevice As Device
    
    Set MonDevice = wiaCDiag.ShowSelectDevice
    If Not (MonDevice Is Nothing) Then
        wiaCDiag.ShowAcquisitionWizard MonDevice
    End If




Déroulement:

Sélectionnez un périphérique.

Image non disponible

Acquisition d'image pour une WebCam:

Image non disponible

Acquisition d'image pour un Scanner:

Image non disponible

Sauvegarde du fichier

Image non disponible

V. Téléchargements

Téléchargez un exemple de classeur pour manipuler les images.

Choisir une image sur le PC et l'afficher dans un Userform
Appliquer une rotation à 90 , 180 ou 270°
Appliquer un retournement Vertical ou Horizontal
Décomposer les frames d'une image(par exemple d'un GIF animé)
Créer une miniature dans l'image (Stamp)
Afficher les propriétés détaillées de l'image
Sauvegarder l'image modifiée



Téléchargez un exemple de classeur pour gérer les WebCams.

Lister les Webcam connectées
Visualiser les images de la Webcam
Mettre la caméra en pause
Afficher quelques informations générales
Effectuer une capture d'image
Enregistrer l'image capturée sur le PC



Téléchargez un exemple de classeur pour utiliser le contrôle WIA Common Dialog

Utilisation de l'assistant impression photos
Utilisation de l'assistant acquistion scanneur-appareil photos
Utilisation de l'assistant acquisition images



Téléchargez ce tutoriel au format PDF.



VI. Remerciements

Merci à Bbil et Khany pour leur relecture et leurs conseils avisés.




Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.