XL 2016 VBA Windows Image Acquisition & fichiers RAW

Dudu2

XLDnaute Barbatruc
Bonjour les Excellents

Sur Windows 7 j'utilise la VBA Reference Microsoft Windows Image Acquisition Library V2.0 pour convertir des images sur la base de ces exemples très bien faits.

Pour des formats d'images "classiques" BMP, GIF, JPEG, PNG, TIFF tout se passe bien.

Dès lors que l'image à convertir est un format RAW d'un fabriquant (.cr2 ou .cr3 pour Canon, .arw pour Nikon, etc...) ça plante.
Dans Windows 7 ça semble normal car les Codecs de ces formats ne sont pas intégrés. Par exemple les Thumbnails de ces images RAW ne s'affichent pas dans l'explorateur Windows.
Dans Windows 10, alors que l'explorateur Windows les affiche, et donc que Windows connait les Codecs, ça plante aussi !

Un point de départ ? https://docs.microsoft.com/en-us/windows/win32/wia/-wia-startpage

J'aimerais:
- d'une part que des Excellents ayant Windows 10 et un Canon ou Nikon essaient d'utiliser le fichier joint pour essayer des conversions de RAW en JPEG et indiquer le résultat obtenu,
- d'autre part que si des Excellents ont eu à faire face à cette problématique qu'ils donnent leurs points de vue.

Merci par avance.
 

Pièces jointes

  • Convertir image en JPEG.xlsm
    27.1 KB · Affichages: 32

patricktoulon

XLDnaute Barbatruc
zip moi un ".cr2"
au pire verifie si tu l'a dispo dans les reference
1619427516430.png
 

patricktoulon

XLDnaute Barbatruc
ben non bien évidement
tu peux installer les deux si tu veux tu aura deux fois la référence dans la liste des ref il faudra tester la quelle est la bonne pour toi
mais si tu a excel 32 pourquoi voudrais tu installer la 64 ??
même l'application exe en 32 fonctionne sur W64 c'est donc pas utile ;)
 

patricktoulon

XLDnaute Barbatruc
arrete d'installer que la dll installe la version 32 que je te donne dans le post 13
au pire tu supprime le dossier dans progamfile(x86) après si tu ne veux pas garder l'application
essaie en late binding
VB:
Sub a()
    Dim Source As String
    Dim Destination As String
    Source = "H:\Téléchargements\xxx.cr2"
    Destination = "H:\Téléchargements\xxx.jpg"
    Set img = CreateObject("ImageMagickObject.MagickImage.1")
    img.Convert Source, Destination
End Sub
 

patricktoulon

XLDnaute Barbatruc
a ben moi si je cherche pour excel je cherche pour 32 bits et je tombe pas sur sur qui est recommandé pour 64 ;)

en late binding(createobject.......) tu vois tout de suite si ta ref est bonne
si elle ne l'ai pas tu a le message
"un object activx ne peut pas créer un activx "
voili voilou ;)
 

patricktoulon

XLDnaute Barbatruc
re
un vbs dynamique
tu en céee un seul et tu l'appel autant de fois que nécessaire
chaque instance est exécutée séparément
engros chaque instance est enclenchée quasiment simultanément
une fois la boucle d'apel vba terminée vba est libéré les instances du vbs font leur boulot des la première instance lancée
quand tu a des grosse serie ca a son avantage et sur tout comme vba est gourmand en mémoire il n'est pas dit qu'au bout de x conversion bing!! out of memory capout !! walouh!! walouh!!!
et c'est beaucoup plus rapide
 

patricktoulon

XLDnaute Barbatruc
alors regarde bien @Dudu2 ça va très vite
VB:
Sub test()
    Dim code$, Scripts$, fichier$, x&, dossier$
    'le code du vbs
    code = "Set img = CreateObject(""ImageMagickObject.MagickImage.1"")" & vbCrLf
    code = code & "img.Convert wscript.arguments(0), wscript.arguments(1)"

    ' creation du fichier vbs
    fichier = ThisWorkbook.Path & "\convertSerie.vbs"
    x = FreeFile
    Open fichier For Output As #x: Print #x, code: Close #x

    'raccourci a utiliser avec wscript.shell
    Scripts = """" & fichier & """ "
    'dossier contenant les fichiers a convertir
    dossier = "H:\fond_d_ecran\animaux\"

    With CreateObject("WScript.Shell")
        itemvu = Dir(dossier & "\*.jpg")
        Do While itemvu <> ""    'boucle  dir sur fichier

            Source = dossier & "\" & itemvu
            Destination = Replace(Source, ".jpg", ".png")

            ' run avec plusieurs arguments exemple  (.Run scripts i, " " & "toto" & " titi"
            .Run Scripts & " " & Source & " """ & Destination & """  "
            itemvu = Dir
        Loop
    End With
    'si tu veux supprimer le vbs dynamique a la fin
    'Do While Dir(Destination) = "": DoEvents: Loop
        'Kill fichier 'supprime le vbs dynamique
End Sub

demo7.gif

a oui ca fait peur hein 🤣 ;)
 
Dernière édition:

Statistiques des forums

Discussions
315 123
Messages
2 116 458
Membres
112 747
dernier inscrit
Boudiou