none
Utiliser la librairie Windows Image Acquisition en VBA RRS feed

  • Question

  • Bonjour à tous,

    J’essaye d’extraire d’un fichier TIF multipage chaque image vers autant de fichier TIF que d’image. Un fichier multiframe avec 5 images me donne 5 fichiers avec chacun, une image différente (TOTO.tif doit me donner TOTO_001.tif, TOTO_002.tif, TOTO_00x.tif). Pour ouvrir et faire cette manip à la "main", j'utilise Microsoft Office Document Imaging mais je ne trouve rien sur le VBA de cette appli. Pour faire cela, j’utilise la librairie « wiaaut.dll » de Microsoft (je n’ai trouvé que cela pour l’instant avec un fichier d’aide de SilkyRoad(silkyroad.developpez.com)).

    Grace à ce fichier d’aide, j'ai déjà réussit à faire une macro qui fait l'inverse et qui regroupe plusieurs fichiers TIF simple image dans un fichier TIF multipage en fonction de leur nom (TOTO_001.tif, TOTO_002.tif, TOTO_00x.tif me donne TOTO.tif avec les x images insérées).

    Maintenant, je bloque sur les filtres car à l’exécution de ces lignes, les fichiers obtenus sont tous identiques au fichier d’origine. Je n’arrive pas à ne sélectionner qu’une image et à l’extraire.

    J’utilise VBA Excel parce que ce traitement termine toute une série de macro sous celle application.

    En espérant que cette question aiguise l’intérêt d’un gourou.

    D'avance, merci.

    Bonne journée à tous et merci d’avance.

    Patrick

    Sub essai_02()
    Dim Nom_fichier As String
    Dim Nom_fichier_Orig As String
    Dim Nom_fichier_final As String
    Dim Nom_Fichier_trait As String
    Dim Sous_Rep As String
    Dim Nb_Image As Integer
    Dim ImageFile_MF As ImageFile
    Dim ImageFile() As ImageFile
    Dim IPM As ImageProcess '
    Dim Bcl1 As Integer

    'nom du fichier à traiter
    Nom_Fichier_trait = "C:\Users\Patrick\Desktop\BUG45.tif"

    'nom du fichier
    Nom_fichier = "BUG45"

    'répertoire de destination
    Sous_Rep = "C:\Users\Patrick\Desktop\Traitement\"

    'nom de fichier "commun"
    Nom_fichier_Orig = Sous_Rep & Nom_fichier
      
    'création du conteneur pour le fichier image multiframe
    Set ImageFile_MF = CreateObject("WIA.ImageFile")

    'Création du gestionnaire de filtre
    Set IPM = CreateObject("WIA.ImageProcess")

    'chargement du fichier
    ImageFile_MF.LoadFile Nom_Fichier_trait

    'définition du filtre sur le conteneur
    IPM.Filters.Add (IPM.FilterInfos("Frame").FilterID)
       
    'nombre de feuille dans le fichier
    Nb_Image = ImageFile_MF.FrameCount

    'CTRL du type de traitement
    If Nb_Image > 1 Then 'pas de copie simple du fichier si fichier non multiframe
            
        ' redimensionne le tableau au nombre d'image à traiter.
       ReDim ImageFile(Nb_Image)
      
       For Bcl1 = 1 To Nb_Image 'passage sur tous les indexs du fichier multiframe
          
           IPM.Filters(1).Properties("FrameIndex") = Bcl1
          
           'Création du conteneur pour les images à manipuler
           Set ImageFile(Bcl1) = CreateObject("WIA.ImageFile")
          
           'Création du gestionnaire de filtre
           Set ImageFile(Bcl1) = ImageFile_MF
          
       Next Bcl1

    End If
        
    For Bcl1 = 1 To Nb_Image
       Nom_fichier_final = Nom_fichier_Orig & "_" & Format(Bcl1, "000") & ".TIF"
       ImageFile(Bcl1).SaveFile Nom_fichier_final
    Next Bcl1
     
    'message de fin
    MsgBox ("Fin de la macro")

    End Sub

    dimanche 28 novembre 2010 14:43

Toutes les réponses

  • bonjour Patrick,

    as-tu regardé ce tutoriel :  http://silkyroad.developpez.com/VBA/WindowsImageAcquisition/

    isabelle

    Le 2010-11-28 09:43, PANGOT911 a écrit :

    Bonjour à tous,

    J’essaye d’extraire d’un fichier TIF multipage chaque image vers autant de fichier TIF que d’image. Un fichier multiframe avec 5 images me donne 5 fichiers avec chacun, une image différente (TOTO.tif doit me donner TOTO_001.tif, TOTO_002.tif, TOTO_00x.tif). Pour ouvrir et faire cette manip à la "main", j'utilise Microsoft Office Document Imaging mais je ne trouve rien sur le VBA de cette appli. Pour faire cela, j’utilise la librairie « wiaaut.dll » de Microsoft (je n’ai trouvé que cela pour l’instant avec un fichier d’aide deSilkyRoad<http://www.developpez.net/forums/member.php?u=70508>(silkyroad.developpez.com)<http://silkyroad.developpez.com/>).

    Grace à ce fichier d’aide, j'ai déjà réussit à faire une macro qui fait l'inverse et qui regroupe plusieurs fichiers TIF simple image dans un fichier TIF multipage en fonction de leur nom (TOTO_001.tif, TOTO_002.tif, TOTO_00x.tif me donne TOTO.tif avec les x images insérées).

    Maintenant, je bloque sur les filtres car à l’exécution de ces lignes, les fichiers obtenus sont tous identiques au fichier d’origine. Je n’arrive pas à ne sélectionner qu’une image et à l’extraire.

    J’utilise VBA Excel parce que ce traitement termine toute une série de macro sous celle application.

    En espérant que cette question aiguise l’intérêt d’un gourou.

    D'avance, merci.

    Bonne journée à tous et merci d’avance.

    Patrick

    Sub essai_02()
    Dim Nom_fichier As String
    Dim Nom_fichier_Orig As String
    Dim Nom_fichier_final As String
    Dim Nom_Fichier_trait As String
    Dim Sous_Rep As String
    Dim Nb_Image As Integer
    Dim ImageFile_MF As ImageFile
    Dim ImageFile() As ImageFile
    Dim IPM As ImageProcess '
    Dim Bcl1 As Integer

    'nom du fichier à traiter
    Nom_Fichier_trait = "C:\Users\Patrick\Desktop\BUG45.tif"

    'nom du fichier
    Nom_fichier = "BUG45"

    'répertoire de destination
    Sous_Rep = "C:\Users\Patrick\Desktop\Traitement\"

    'nom de fichier "commun"
    Nom_fichier_Orig = Sous_Rep&  Nom_fichier

    'création du conteneur pour le fichier image multiframe
    Set ImageFile_MF = CreateObject("WIA.ImageFile")

    'Création du gestionnaire de filtre
    Set IPM = CreateObject("WIA.ImageProcess")

    'chargement du fichier
    ImageFile_MF.LoadFile Nom_Fichier_trait

    'définition du filtre sur le conteneur
    IPM.Filters.Add (IPM.FilterInfos("Frame").FilterID)

    'nombre de feuille dans le fichier
    Nb_Image = ImageFile_MF.FrameCount

    'CTRL du type de traitement
    If Nb_Image>  1 Then 'pas de copie simple du fichier si fichier non multiframe

         ' redimensionne le tableau au nombre d'image à traiter.
        ReDim ImageFile(Nb_Image)

        For Bcl1 = 1 To Nb_Image 'passage sur tous les indexs du fichier multiframe

            IPM.Filters(1).Properties("FrameIndex") = Bcl1

            'Création du conteneur pour les images à manipuler
            Set ImageFile(Bcl1) = CreateObject("WIA.ImageFile")

            'Création du gestionnaire de filtre
            Set ImageFile(Bcl1) = ImageFile_MF

        Next Bcl1

    End If

    For Bcl1 = 1 To Nb_Image
        Nom_fichier_final = Nom_fichier_Orig&  "_"&  Format(Bcl1, "000")&  ".TIF"
        ImageFile(Bcl1).SaveFile Nom_fichier_final
    Next Bcl1

    'message de fin
    MsgBox ("Fin de la macro")

    End Sub

    vendredi 3 décembre 2010 19:30
  • Bonjour,

     

    Merci IsabelleV pour ce lien ! Pangot911, est-ce que cette information répond a votre question ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    mercredi 8 décembre 2010 10:14