Convertir une image .tif en format .bmp ? (Et/ou utiliser une feinte)

Signaler
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
-
SERIEUXETCOOL
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
-
Bonjour le Forum,

Avec l'aide du Forum, j'ai développé un code sous vba qui me conviens pratiquement. Il y a toute fois une astuce que j'aimerais employer avec votre aide.

Contexte :

Les image sur lesquelles je travaille sont au format .bmp sinon plus rien n'est fonctionnel par la suite si ces images ne sont pas en .bmp. Je dois donc ouvrir une image qui est au format .bmp.

J'aimerais maintenant pouvoir ouvrir des images enregistrées au format .tif. Et c'est la que je suis bloqué. J'aurais voulu savoir s'il était possible de proposer un code simple et efficace qui me permette d'ouvrir des images au format .bmp ET au format .tif.
Si les images sont au format .tif, alors il faut convertir temporairement cette image en .bmp pour que je puisse travailler avec et la supprimer ensuite pour ne pas encombrer le système.

Quelqu'un pourrait il m'apporter un peu d'aide ?

J'utilise la boite de dialogue "getopenfilename" pour proposer à l'utilisateur d'ouvrir soit des .bmp soit des .tif et récupérer le chemin du fichier. Si l'image ouverte est au format .tif, alors il faut la convertir en .bmp avant de pouvoir travailler dessus.

Voila en gros ce que je cherche à faire. Actuellement je dois manuellement ouvrir mes images .tif et les enregistrer sous au format .bmp pour ensuite pouvoir les traiter.


Merci à ceux qui oseront m'aider un peu.


Bien cordialement,

André

16 réponses


Bonjour,

J'ai vu ça sur le site:
CODE

Essaye de voir comment il fait...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Merci acive pour ton intérêt.

Je ne sais pas trop comment il s'y est pris le gars. Les dll et tout...piouf.

Je voyais plutôt la chose avec un petit bout de code sous vba quoi. Ce n'est peut-être pas faisable ?

Finalement il ne s'agit la "que" d'une conversion d'image ou alors "que" d'un enregistrer sous.

Je reste confus pour le moment...


André
Messages postés
14655
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2020
139
Bonjour,

VBA est limité au niveau des types de fichiers images.
BMP, GIF et Jpg, je crois.
Donc, tu devra coder ton propre décodeur (càd, lire le ficheir, analyser sa structure et dessiner l'image pixel par pixel).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Messages postés
6566
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 février 2020
95
Bonjour,
J'ai fait un programme de conversion en VB.Net et vba Excel

http://www.vbfrance.com/codes/CONVERTIR-FORMAT-IMAGE_50553.aspx

Ce programme utilise Windows Image Acquisition Bibliothèque v2.0 avec: wiaaut.dll
Tout est expliqué pour l'utilisation de cette dll.
Je n'ai pas trouvé depuis une autre manière en vba pour convertir un format image.
@+Le Pivert
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Si j'ai bien compris, il est difficile à l'heure d'actuelle de convertir une image tif en image bmp.

De plus il faudrait réaliser une conversion pixel par pixel ce qui se traduit probablement par un temps de conversion long.

Ma question est alors la suivante...Si la conversion directe semble difficile, peut on utiliser la ruse ?

Mon intuition est la suivante : Par VBA, demander d'ouvrir une image tif, ouvrir cette image avec un programme (paint, aperçu, etc) fichier enregistrer-sous en image bmp et travailler ensuite avec cette image bmp. A la fin supprime l'image bmp qui est devenue inutile.

Faire cette "feinte" ne doit pas prendre plus de 2 sec de tps d’exécution au programme je pense. C'est d'ailleurs ce que je fais manuellement. Je prends mon image tif, fichier ouvrir, puis fichier enregistrer-sous en bmp et je travail avec cette dernière image.


Comment pourrais-je m'y prendre pour ouvrir une image tif et l'enregistrer-sous au format bmp ?


Merci de vos conseils et de votre aide.


André
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Je viens de réussir à ouvrir mon image tif avec le programme aperçu de Windows via vba

voici le code que j'utilise...

Sub test()

    Dim chemin As String
    chemin = "E:\STATIQUE.tif"
   
    Shell ("rundll32.exe c:\windows\system32\shimgvw.dll,ImageView_Fullscreen" & " " & chemin)

End Sub



Sa fonctionne très bien. Maintenant je souhaiterais enregistrer cette image au format bmp via vba.

Comment devrais-je m'y prendre très simplement ? Le but c'est vraiment de résoudre mon problème en 10 lignes de code maxi...

André
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bonjour André,
Je crois que tu sais pourquoi je ne suis pas intervenu dans cette discussion, n'est-ce-pas ?
Mon unique intervention ici sera pour te dire ceci, en ce qui concerne la "démarche/feinte" telle que tu l'as imaginée :
MSPaint ne se prête pas à l'automation et ne peut donc être "piloté" depuis VBA.
Reste la ressource scabreuse (et aléatoire) d'une succession de Sendkeys. Je ne la recommande surtout pas !
Une autre démarche serait :
- l'insertion d'un objet OLE (Insertion ==>> objet ===>> image bitmap
- une macro pour le copier en mémoire (SetclipboardData)
- l'utilisation de la fonction (GetclipboardData) pour l'utiliser
Mais cela ne suffira pas et il faudra probablement passer en plus par un fichier temporaire à créer, utiliser, puis zigouiller.
(ces deux fonctions de gestion du presse-papier sont les fonctions de l'Api de Windows)
Tout cela est démesuré.
Voilà ma seule intervention ici.




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
6566
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 février 2020
95
Tu ne pourras faire cela sans passer par la conversion. Je t'ai fait un code qui marche très bien pour les jpg et gif mais pas pour les bmp:

Option Explicit
Private Sub CommandButton1_Click()
InserImage
End Sub
Sub InserImage()
Dim chemin
    Sheets("Feuil1").Activate
    ChDir "C:" '<-- changez pour votre répertoire
    chemin = Application.GetOpenFilename _
                ("Images (*.bmp;*.gif;*.jpg;*.tif),*.bmp;*.gif;*.jpg;*.tif")
    If chemin <> False Then
        Range("A1").Select
    ActiveSheet.Pictures.Insert(chemin).Select  'inserer image
    End If
   exportimage
End Sub
Sub exportimage()
Application.DisplayAlerts = False
  Dim sh As Shape
  For Each sh In ActiveSheet.Shapes
     If sh.Type = 13 Then
      sh.Copy
      With ActiveSheet
         .ChartObjects.Add(0, 0, sh.Width, sh.Height).Chart.Paste
         .ChartObjects(1).Chart.Export Filename:="C:\monimage.gif", FilterName:="gif"
         .Shapes(ActiveSheet.Shapes.Count).Delete
        End With
     End If
   Next
   Selection.Cut 'supprime l'image
 Application.DisplayAlerts = True
 End Sub



@+Le Pivert
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Bonjour Ucfoutu, j'espère que tu te porte bien.

Je connais parfaitement la raison qui t'empêche de participer activement au sujet. Et je ne t'en veux pas. C'est ton choix, je respecte.

D'autant plus que mes choix risquent d'aller totalement à l'encontre de tes idées puisque je sens bien que je vais partir sur les sendkeys...

En tout cas, en guise de première approche pour commencer. On verra bien ou sa me mène et si c'est viable sur d'autres machines.

J'ai bien compris que l'on ne pilote pas d'autres logiciels à proprement parlé, mais plutôt que l'on feinte les logiciels en jouant sur les raccourcis claviers. Pas très approprié comme méthode, mais à tester quand même.

De plus j'ai déjà un code de 2 lignes qui me permet d'ouvrir mes images tif sous aperçu. Je vais essayer de jouer rapidement avec les raccourcis pour voir si je peux inclure une liste de sendkeys...

Si cette idée n'aboutit pas, alors je laisserais tomber ce projet de conversion d'images tif en bmp. Je le ferais à la main et sa ira tout aussi bien pour le moment.



Merci Le Pivert pour ton code. Je vais le tester. Mais bon s'il faut l'adapter pour un conversion tif, bmp...je sens que sa sera tout autant mission impossible.

A voir.

Je pars sur les sendkeys dans une première approche car elle me semble directement accessible pour mon niveau.

Je viendrais poster les résultats et conclusions.


André
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
bonjour

Je te suggère de regarder ce projet :

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=42376&lngWId=1

bon courage
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Merci loulou pour ton lien, mais après avoir téléchargé je ne trouve pas de fichier Excel, ni comment lancer quoique se soit.

Je vais relire attentivement...


Pour Le Pivert, je viens de tester ton code. J'ai réussi à ouvrir une image tif, et sortir une image bmp....malheureusement c'est tout blanc. Ce n'est pas une image vide, car sa taille correspond à l'original quasiment. Mais je pense que ce n'est pas aussi simple que je le pensais^^

Voila les modifs que j'ai apporté mais qui ne donnent pas un bon résultat

Option Explicit

Public Sub AAAA()
    
    InserImage
    
End Sub

Private Sub InserImage()

    Dim chemin
    
    Sheets("Feuil1").Activate
    
    ChDir "C:" '<-- changez pour votre répertoire

    chemin = Application.GetOpenFilename("Images (*.bmp;*.gif;*.jpg;*.tif),*.bmp;*.gif;*.jpg;*.tif")
    
    If chemin <> False Then
        Range("A1").Select
        ActiveSheet.Pictures.Insert(chemin).Select  'inserer image
    End If
    
    exportimage
   
End Sub

Private Sub exportimage()

    Application.DisplayAlerts = False
    
    Dim sh As Shape
    
    For Each sh In ActiveSheet.Shapes
        If sh.Type = 13 Then
            sh.Copy
            With ActiveSheet
                .ChartObjects.Add(0, 0, sh.Width, sh.Height).Chart.Paste
                .ChartObjects(1).Chart.Export Filename:="C:\Documents and Settings\ANDRE\Bureau\Nouveau dossier\MonImage.bmp", FilterName:="bmp"
                .Shapes(ActiveSheet.Shapes.Count).Delete
            End With
        End If
    Next
    
    Selection.Cut 'supprime l'image
    
    Application.DisplayAlerts = True

End Sub



En même temps je n'ai touché à aucun moment à la conversion, donc normal que ça ne marche pas^^


André
Messages postés
6566
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 février 2020
95
C'est normal le format tif n'est pas pris en compte. Avec ce code tu peux convertir des tif en jpg et gif. J'ai essayé aussi avec une UserForm et un contrôle image. C'est facile, mais là aussi ce n'est pas reconnu à l'ouverture:
Private Sub CommandButton1_Click()
Dim chemin
 chemin = Application.GetOpenFilename( _
    "Fichiers Image (*.jpg;*.gif;*.png;*.tif;*.bmp),*.jpg;*.gif;*.png;*.tif;*.bmp")
    If chemin = False Then Exit Sub
   Image1.Picture = LoadPicture(chemin)
SavePicture Image1.Picture, "C:\monimage.bmp"
End Sub

C'est dommage que tu ne veuilles pas te servir de la Windows Image Acquisition Bibliothèque v2.0 avec: wiaaut.dll
Je t'aurais fait un code simple de conversion.
@+Le Pivert
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
bonjour
Je m'excuses le projet que je proposais hier ne résouds rien
par contre, après quelques recherche le projet FreeImage a un module VB6 pour transformer une image TIFF en BITMAP

http://sourceforge.net/projects/freeimage/?source=directory

dans le dossier dist : la dll freeimage.dll
dans le dossier wrapper : le module VB6 pour accéder aux fonctions de la dll
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Bonjour le Forum, LePivert et Louou69


Les deux derniers posts, traitent de dll. Je ne me suis jamais servis de dll à titre personnel. Du coup je suis bien incompétent dans ce terrain de jeu. Je me sens totalement désarmé pour être franc.

Je tombe sur une dll...et je ne sais pas quoi en faire ensuite. Du coup je ne vais pas bien loin de cette manière et je passe à coté de jolies choses sans doute.

Le Pivert :
C'est dommage que tu ne veuilles pas te servir de la Windows Image Acquisition Bibliothèque v2.0 avec: wiaaut.dll
Je t'aurais fait un code simple de conversion.


Quand tu parles de code... tu veux dire un code vba ??? Si c'est le cas, je suis partant pour utiliser cette bibliothèque mais je pense qu'il faut installer d'autres composants ou des choses dans ce genre non ?


D'autre part je suis sous vba et non vb6. Il doit bien y avoir une nuance entre les deux^^

Je pensais vraiment qu'il serait possible avoir un petit bout de code sous vba qui permette d'ouvrir une image tif et de la convertir en bmp. Tout comme le code que tu propose LePivert, mais avec les formats Tif et bmp.

Je vais me renseigner sur les dll mais je le sens moyen perso...


Merci à vous deux en tout cas.


André
Messages postés
6566
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 février 2020
95
Pour te servir de la dll tout est expliqué dans ce programme:
http://www.vbfrance.com/codes/CONVERTIR-FORMAT-IMAGE_50553.aspx

Il te faut savoir que si ton programme est à distribuer il faut que la dll soit sur la machine des utilisateur. Si c'est pour un usage personnel, il n'y a aucun problème, tu suis les indications données pour enregistrer la dll.
A ce moment là je te communiquerais le code qui est très simple.


@+Le Pivert
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Merci LePivert pour ces explications.

Donc ma seule solution est de passer par l'utilisation d'une fameuse dll qui serait livrée en plus du fichier Excel. Malheureusement, c'est incompatible avec ma vision du tout en un.

A la base c'est un projet personnel que j'entreprends. S'il fonctionne, il pourra éventuellement être partagé à quelques collègues. Mais de toutes les manières, je refuse catégoriquement d'utiliser plus qu'un fichier Excel. C'est très restrictif j'en conviens, mais c'est ma vision des choses.

Je n'utiliserai donc pas de dll à installer en plus. Ce qui du coup viens quelques peu fermer cette discussion...

Je vais essayer encore un peu avec les Sendkeys et paint pour parvenir à mes fains, sinon je laisserais tomber et j'enregistrerais manuellement les images tif en bmp. Tant pis pour l'automatisme cette fois-ci.

Merci à vous tous d'avoir tenté de m'aider, et d'avoir essayé surtout !


Si je parviens à réaliser ma demande via paint ou aperçu, alors je viendrai en parler ici.

Cordialement,

André