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▲
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▲
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.
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.
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).
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
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:
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).
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.
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:
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.
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.
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.
Cet exemple est une adaptation de l'aide en ligne WIA (wiaaut.chm).
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).
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.
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).
La fenêtre suivante dépend du type de périphérique sélectionné.
Le périphérique WebCam
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.
Le périphérique Scanner
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.
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.
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.
Acquisition d'image pour une WebCam:
Acquisition d'image pour un Scanner:
Sauvegarde du fichier
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.