IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ C++ BuilderConsultez toutes les FAQ

Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe C++ Builder de Developpez.

Commentez cette FAQ : Commentez

SommaireWindows Image Acquisition (WIA) (10)
précédent sommaire
 

Pour utiliser l'assistant Photographie Windows il vous faut tout d'abord créer une connexion avec le WIA, ajouter les images à imprimer, et pour finir il ne suffit plus qu'à lancer l'assistant :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <utilcls.h> // <---- ne pas oublier d'inclure 
void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    // impression d'image en utilisant WIA 
    Variant vMSWIACommonDialog, vMSWIAVector; 
    // créer un objet dialog 
    vMSWIACommonDialog = Variant::CreateObject("WIA.CommonDialog"); 
    vMSWIAVector = Variant::CreateObject("WIA.Vector"); 
    // sélection des images 
    vMSWIAVector.OleProcedure("Add", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\imageJPEG.jpg"); 
    vMSWIAVector.OleProcedure("Add", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\imageBMP.bmp"); 
    // impression 
    vMSWIACommonDialog.OleProcedure("ShowPhotoPrintingWizard", vMSWIAVector); 
  
    vMSWIACommonDialog = Unassigned; 
    vMSWIAVector = Unassigned; 
}

Mis à jour le 21 novembre 2010 blondelle ero-sennin yarp

Les filtres permettent de faire des opérations sur les images grâce au WIA.
Ce code simple permet d'obtenir toutes les informations sur ces différents filtres dans un Mémo :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <utilcls.h> // <----- ne pas oublier d'inclure 
  
void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
    // lister Informations Générales Filtres 
  
    Variant vMSWIAImageProcess; 
    String sWIAFiltres, sWIADescriptFiltres; 
    int iMSWIAnbFiltreDispo; 
  
    // creation du gestionnaire de filtre 
    vMSWIAImageProcess = Variant::CreateObject("WIA.ImageProcess"); 
    // nombre de filtres disponibles 
    iMSWIAnbFiltreDispo = vMSWIAImageProcess.OlePropertyGet("FilterInfos").OlePropertyGet("Count"); 
    // boucle sur l'ensemble des filtres disponibles 
    Memo1->ScrollBars = ssVertical; 
    for(int x = 1; x <= iMSWIAnbFiltreDispo; x++) 
    { 
        sWIAFiltres = vMSWIAImageProcess.OlePropertyGet("FilterInfos", x).OlePropertyGet("Name"); 
        Memo1->Lines->Add(sWIAFiltres); 
        sWIADescriptFiltres = vMSWIAImageProcess.OlePropertyGet("FilterInfos", x).OlePropertyGet("Description"); 
        Memo1->Lines->Add(sWIADescriptFiltres); 
        Memo1->Lines->Add("\r\n**************\r\n"); 
    } 
}

Mis à jour le 21 novembre 2010 blondelle pottiez

Pour redimensionner une image, il suffit d'utiliser le bon filtre :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <utilcls.h> // <---------ne pas oublier 
  
// redimensionner Image 
  
Variant vMSWIAImageProcess, vMSWIAImageFile; 
  
// Création conteneur pour l'image à manipuler 
vMSWIAImageFile = Variant::CreateObject("WIA.ImageFile"); 
// Création du gestionnaire de filtre 
vMSWIAImageProcess = Variant::CreateObject("WIA.ImageProcess"); 
// Chargement de l'image dans le conteneur 
vMSWIAImageFile.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\imageOrigine.bmp"); 
// Ajoute le filtre pour redimensionner l'image (Scale) 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Scale").OlePropertyGet("FilterID"))); 
// Définit la largeur maxi pour le redimensionnement 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "MaximumWidth", 90); 
// Définit la hauteur maxi pour le redimensionnement 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("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 
vMSWIAImageFile = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile); 
// Enregistre l'image redimensionnée 
vMSWIAImageFile.OleFunction("SaveFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\imageFinale.jpg");

Mis à jour le 21 novembre 2010 blondelle

Pour combiner deux images, il faut charger les images à combiner, puis utiliser le filtre approprié :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <utilcls.h> // <---------ne pas oublier 
  
// combiner Deux Images 
  
Variant vMSWIAImageProcess, vMSWIAImageFile1, vMSWIAImageFile2; 
  
// Création conteneur pour l'image à manipuler 
vMSWIAImageFile1 = Variant::CreateObject("WIA.ImageFile"); 
// remarque: vous devez créer un conteneur pour chaque image 
vMSWIAImageFile2 = Variant::CreateObject("WIA.ImageFile"); 
// Création du gestionnaire de filtre 
vMSWIAImageProcess = Variant::CreateObject("WIA.ImageProcess"); 
  
// Chargement de la 1ere image dans le conteneur 
vMSWIAImageFile1.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\YourBmpHere.bmp"); 
// Remarque pour cet exemple : 
// Les dimensions de la 2ème image doivent être plus petites que la première afin 
// que celle-ci ne soit pas totalement masquée 
// Chargement de la 2ème image dans le conteneur 
vMSWIAImageFile2.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\Photo\\Photo.jpg"); 
  
// Ajoute le filtre pour combiner/fusionner (Stamp) 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Stamp").OlePropertyGet("FilterID"))); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "ImageFile", vMSWIAImageFile2); 
// définit la position horizontale de la 2eme image pour la fusion 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Left", (vMSWIAImageFile1.OlePropertyGet("Width") - vMSWIAImageFile2.OlePropertyGet("Width"))); 
// définit la position verticale de la 2eme pour la fusion 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Top", (vMSWIAImageFile1.OlePropertyGet("Height") - vMSWIAImageFile2.OlePropertyGet("Height"))); 
  
// Application du filtre à la 1ere image 
vMSWIAImageFile1 = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile1); 
// sauvegarde de la nouvelle image 
vMSWIAImageFile1.OleFunction("SaveFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\fourmiz_ImageCombinee.JPG");

Mis à jour le 21 novembre 2010 blondelle

Pour fusionner deux images, il faut charger les images à fusionner, puis utiliser le filtre approprié :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <utilcls.h> // <---------ne pas oublier 
  
// Fusion Verticale Deux Images 
Variant Largeur, Hauteur, vMSWIAVector, vMSWIAImageProcess, vMSWIAImageFile1, vMSWIAImageFile2, vMSWIAImageFile3; 
long C; 
  
// Création conteneur pour l'image à manipuler 
vMSWIAImageFile1 = Variant::CreateObject("WIA.ImageFile"); 
// remarque: vous devez créer un conteneur pour chaque image 
vMSWIAImageFile2 = Variant::CreateObject("WIA.ImageFile"); 
// Création du gestionnaire de filtre 
vMSWIAImageProcess = Variant::CreateObject("WIA.ImageProcess"); 
  
// Chargement de la 1ère image dans le conteneur 
// (l'image qui sera placée au-dessus) 
vMSWIAImageFile1.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\Grue_Atelier.jpg"); 
// Chargement de la 2ème image dans le conteneur 
// (l'image qui sera placée dessous) 
vMSWIAImageFile2.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\Photo\\Photo.jpg"); 
  
// ------création d'un support pour fusionner les deux images 
if(vMSWIAImageFile1.OlePropertyGet("Width") > vMSWIAImageFile2.OlePropertyGet("Width")) 
        { 
        Largeur = vMSWIAImageFile1.OlePropertyGet("Width"); 
        } 
else 
        { 
        Largeur = vMSWIAImageFile2.OlePropertyGet("Width"); 
        } 
Hauteur = vMSWIAImageFile1.OlePropertyGet("Height") + vMSWIAImageFile2.OlePropertyGet("Height"); 
  
C = 0x80000004; // couleur de fond 
vMSWIAVector = Variant::CreateObject("WIA.Vector"); 
vMSWIAVector.OleProcedure("Add", C); 
vMSWIAVector.OleProcedure("Add", C); 
vMSWIAVector.OleProcedure("Add", C); 
vMSWIAVector.OleProcedure("Add", C); 
  
vMSWIAImageFile3 = vMSWIAVector.OlePropertyGet("ImageFile", 2, 2); 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Scale").OlePropertyGet("FilterID"))); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "MaximumWidth", Largeur); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "MaximumHeight", Hauteur); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "PreserveAspectRatio", false); 
vMSWIAImageFile3 = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile3); 
// ------------------ 
// réinitialisation des filtres 
for(int i = 1; i <= vMSWIAImageProcess.OlePropertyGet("Filters").OlePropertyGet("Count"); i++) 
{ 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Remove", i); 
} 
// fusionne l'image1 dans le support 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Stamp").OlePropertyGet("FilterID"))); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "ImageFile", vMSWIAImageFile1); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Left", 0); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Top", 0); 
vMSWIAImageFile3 = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile3); 
// fusionne l'image2 dans le support 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "ImageFile", vMSWIAImageFile2); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Left", 0); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Top", vMSWIAImageFile1.OlePropertyGet("Height")); 
// wiaFormatBMP ="{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"; 
// wiaFormatPNG ="{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"; 
// wiaFormatGIF ="{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"; 
// wiaFormatJPEG ="{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; 
// wiaFormatTIFF ="{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"; 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Convert").OlePropertyGet("FilterID"))); 
vMSWIAImageProcess.OlePropertyGet("Filters", 2).OlePropertyGet("Properties", "FormatID").OlePropertySet("Value", "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"); 
vMSWIAImageProcess.OlePropertyGet("Filters", 2).OlePropertyGet("Properties", "Quality").OlePropertySet("Value", 90); 
vMSWIAImageFile3 = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile3); 
// sauvegarde de la nouvelle image 
vMSWIAImageFile3.OleFunction("SaveFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\resultat_Fusion_Deux_images.jpg");

Mis à jour le 21 novembre 2010 blondelle

Pour couper ou rogner une image, il suffit d'utiliser le filtre approprié :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <utilcls.h> // <---------ne pas oublier 
  
// couper Image 
  
Variant vMSWIAImageProcess, vMSWIAImageFile; 
  
// Création conteneur pour l'image à manipuler 
vMSWIAImageFile = Variant::CreateObject("WIA.ImageFile"); 
// Création du gestionnaire de filtre 
vMSWIAImageProcess = Variant::CreateObject("WIA.ImageProcess"); 
  
// Chargement de l'image dans le conteneur 
vMSWIAImageFile.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\Grue_Atelier.jpg"); 
  
// Ajoute le filtre pour Couper/Rogner l'image (Crop) 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Crop").OlePropertyGet("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 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Left", 0); 
// definit la position à partir du bord supérieur pour la coupe 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Top", 0); 
// definit la position à partir du bord droit pour la coupe 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Right", (vMSWIAImageFile.OlePropertyGet("Width") / 3)); 
// definit la position à partir du bord inférieur pour la coupe 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Bottom", (vMSWIAImageFile.OlePropertyGet("Height") / 3)); 
  
// application du filtre 
vMSWIAImageFile = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile); 
  
// Sauvegarde de la nouvelle image 
vMSWIAImageFile.OleFunction("SaveFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\sauvegarde_Image_Coupee.JPG");

Mis à jour le 21 novembre 2010 blondelle

Pour créer une image multipages, il faut tout d'abord charger les différentes images utilisées pour l'image finale, puis il faut utiliser le filtre approprié :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <utilcls.h> // <---------ne pas oublier 
  
// création Image Multipage TIFF 
Variant vMSWIAImageFile1, vMSWIAImageFile2, vMSWIAImageFile3, vMSWIAImageProcess; 
  
// Création des conteneurs pour les images à manipuler 
vMSWIAImageFile1 = Variant::CreateObject("WIA.ImageFile"); 
vMSWIAImageFile2 = Variant::CreateObject("WIA.ImageFile"); 
vMSWIAImageFile3 = Variant::CreateObject("WIA.ImageFile"); 
  
// Création du gestionnaire de filtre 
vMSWIAImageProcess = Variant::CreateObject("WIA.ImageProcess"); 
  
// chargement des images 
vMSWIAImageFile1.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\Grue_Atelier.jpg"); 
vMSWIAImageFile2.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\resultat_Fusion_Deux_images.JPG"); 
vMSWIAImageFile3.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\fourmiz_ImageCombinee.JPG"); 
  
// Ajoute un filtre pour gérer un premier Frame/Multipage 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Frame").OlePropertyGet("FilterID"))); 
// définit le contenu du Frame 
vMSWIAImageProcess.OlePropertyGet("Filters", (vMSWIAImageProcess.OlePropertyGet("Filters").OlePropertyGet("Count"))).OlePropertySet("Properties", "ImageFile", vMSWIAImageFile2); 
// Ajoute un filtre pour gérer un deuxieme Frame/Multipage 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Frame").OlePropertyGet("FilterID"))); 
// définit le contenu du Frame 
vMSWIAImageProcess.OlePropertyGet("Filters", (vMSWIAImageProcess.OlePropertyGet("Filters").OlePropertyGet("Count"))).OlePropertySet("Properties", "ImageFile", vMSWIAImageFile3); 
// Ajoute un filtre de conversion pour la nouvelle image (au format TIFF) 
// (TIFF est le seul format qui supporte la sauvegarde en multi-frames) 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Convert").OlePropertyGet("FilterID"))); 
// wiaFormatTIFF ="{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}" 
vMSWIAImageProcess.OlePropertyGet("Filters", (vMSWIAImageProcess.OlePropertyGet("Filters").OlePropertyGet("Count"))).OlePropertySet("Properties", "FormatID", "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"); 
  
// Application du filtre à la 1ere image: 
// (ajoute 2 frames dans la 1ere image, au format Tiff 
vMSWIAImageFile1 = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile1); 
  
// sauvegarde de la nouvelle image 
vMSWIAImageFile1.OleFunction("SaveFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\monImageMultipage.tif");

Mis à jour le 21 novembre 2010 blondelle

Pour savoir si l'image GIF chargé est animé, il suffit de tester la propriété IsAnimated de cette image :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <utilcls.h> // <---------ne pas oublier 
  
// contrôle Format Image GIF 
  
Variant vMSWIAImageFile; 
  
// Création conteneur pour l'image à manipuler 
vMSWIAImageFile = Variant::CreateObject("WIA.ImageFile"); 
  
// chargement de l'image 
vMSWIAImageFile.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\YourBmpHere1.gif"); 
  
if(vMSWIAImageFile.OlePropertyGet("IsAnimated")) 
{ 
    ShowMessage("Gif animé"); 
} 
else 
{ 
    ShowMessage("Gif standard"); 
}

Mis à jour le 21 novembre 2010 blondelle

Pour modifier les TAG d'une image il suffit de procéder de la manière suivante :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <utilcls.h> // <---------ne pas oublier 
  
// Titre, Commentaire, Auteur, Mots clés 
  
// création TAG TITRE copie Image 
Variant vMSWIAVector, vMSWIAImageProcess, vMSWIAImageFile; 
  
// Création conteneur pour l'image à manipuler 
vMSWIAImageFile = Variant::CreateObject("WIA.ImageFile"); 
// creation du gestionnaire de filtre 
vMSWIAImageProcess = Variant::CreateObject("WIA.ImageProcess"); 
// création d'un vecteur 
// (Un vecteur permet de créer une collection pour des valeurs du même type.) 
vMSWIAVector = Variant::CreateObject("WIA.Vector"); 
  
// chargement de l'image 
vMSWIAImageFile.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\Grue_Atelier.jpg"); 
  
//  définit le filtre pour gérer l'EXIF 
vMSWIAImageProcess.OlePropertyGet("Filters").OleProcedure("Add", (vMSWIAImageProcess.OlePropertyGet("FilterInfos", "Exif").OlePropertyGet("FilterID"))); 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("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) 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Type", 1101); 
// voir le fichier d'aide fourni avec la librairie WIA pour 
// obtenir la liste des constantes disponibles 
// stocke une chaîne de caractères dans le vecteur 
vMSWIAVector.OleProcedure("SetFromString", "Test de TAG 'TITRE' : utilisation de WIA v2.0"); 
// applique au filtre le contenu du vecteur 
vMSWIAImageProcess.OlePropertyGet("Filters", 1).OlePropertySet("Properties", "Value", vMSWIAVector); 
  
// application du filtre dans l'image 
vMSWIAImageFile = vMSWIAImageProcess.OleFunction("Apply", vMSWIAImageFile); 
  
// sauvegarde de l'image 
vMSWIAImageFile.OleFunction("SaveFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\fourmiz_Test_EXIF.JPG");

Mis à jour le 21 novembre 2010 blondelle

Pour lister les propriétés d'une image il suffit de procéder de la manière suivante, ici on les charge dans un TMemo :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <utilcls.h> // <---------ne pas oublier 
  
// lister les proprietés d'une image 
Variant vMSWIAImageFile; 
String S; 
  
// Création conteneur pour l'image à manipuler 
vMSWIAImageFile = Variant::CreateObject("WIA.ImageFile"); 
  
// Chargement de l'image dans le conteneur 
vMSWIAImageFile.OleFunction("LoadFile", "C:\\Documents and Settings\\toto\\Mes documents\\Mes images\\monImageMultipage.tif"); 
  
// Boucle sur la collection de propriétés 
for(int nb = 1; nb <= vMSWIAImageFile.OlePropertyGet("Properties").OlePropertyGet("Count"); nb++) 
{ 
    S = vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("Name"); 
    S = S + " ("; 
    S = S + vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("PropertyID"); 
    S = S + ") ="; 
    if(vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("IsVector")) 
    { 
        S = S + " - vector data not emitted - "; 
    } 
    // RationalImagePropertyType = 1006 
    else if(vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("Type") == 1006) 
    { 
        S = S + (vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("Value").OlePropertyGet("Numerator")); 
        S = S + "/"; 
        S = S + (vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("Value").OlePropertyGet("Denominator")); 
    } 
    else if(vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("Type") == 1002) 
    { 
        S =S + """" + (vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("Value")) + """"; 
    } 
    else 
        S = S + (vMSWIAImageFile.OlePropertyGet("Properties", nb).OlePropertyGet("Value")); 
    Memo1->Lines->Add(S); 
}

Mis à jour le 21 novembre 2010 blondelle

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.