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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Convertir image TIF 1bit en bmp RVB24


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Convertir image TIF 1bit en bmp RVB24
    Bonjour,

    Pour une application très spécifique j'ai besoin de convertir une image au format TIF 1 bit en image BMP RGB24. J'obtiendrai naturellement une image en noir et blanc en 24 bits mais c'est justement l'objet de la manoeuvre.

    Quelqu'un peut-il m'aider ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 519
    Points : 25 037
    Points
    25 037
    Par défaut
    Méthode Moche,
    Tu modifie largeur et hauteur de ton BitMap
    Tu lit Bit par Bit ton Image TIF, et tu affecté 0000000 ou FFFFFFFF à Pixels du TBitmap ... si c'est ton image de 9milliars de Bit, tu vas juste exploser la mémoire !

    Donc, tu es bon, pour te palucher toi même la gestion du format BMP directement sur le fichier ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut J'ai compris mais problème lecture TIF 1 Bit
    En fait je peux charger en mémoire un fichier bitmap au format du fo=ichier tif. Mais comment lire le fichier Tif bit par bit ?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 519
    Points : 25 037
    Points
    25 037
    Par défaut
    Pour le Fichier TIF, je ne sais pas, j'ai cru que tu savais déjà le faire puisque tu voulais utiliser le TBits ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    format TIF 1 bit en image BMP RGB24
    TIF 1bpp -> Bitmap 1bpp!

    tu affecté 0000000 ou FFFFFFFF à Pixels du TBitmap
    methode moche -> Scanline!
    en passant par Pixels, non seulement il vas exploser la memoire, mais il vas aussi attendre 3 siecles avec son image de 800mo !



    donc on dit :

    une lib TIF

    et un Bitmap.Assign(TIFImage)


    follow -> http://esibert.developpez.com/delphi/libtiff/

    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut La variable density n'est pas définie
    J'ai chargé la lib sur le lien "follow"

    Dans le source décrit sur ce lien une varaible "density" est utilisée sans qu'elle soit définie.
    Par ailleurs comment obtenir le TiffImage à partir de ce source pour l'assigner à un bitmap ?

  7. #7
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 202
    Points : 91
    Points
    91
    Par défaut
    Bonjour,

    ce n'est pas pour répondre précisément à la question posée. Mais je profite de ce topic pour faire état d'une difficulté fréquente :
    Il s'agit d'afficher une image avec Delphi alors que cette image est dans un format non reconnu par Delphi, par exemple .TIF, .PNG, etc.
    Bien sûr, on peut préalablement la convertir en .bmp grâce à un logiciel de traitement d'image.
    Au lieu de le faire "à la main", on peut programmer dans l'application Delphi un appel au logiciel de traitement d'image et "automatiser" le processus avec les commandes nécessaires.
    Par exemple l'application suivante fait appel à "mspaint" qui lit le fichier "Photo1.TIF", le converti en .bmp , le met dans le presse-papier, qui est finalement lu par l'application et affiché sur Form1.Image1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    var
       Form1: TForm1;
       monImage:PChar;
       ImgHandle : THandle;
    Const
         maPhoto:PChar='Photo1.TIF';
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
         timer1.enabled:=false;
         timer2.enabled:=false;
         timer1.interval:=2000;
         timer2.interval:=2000;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         ShellExecute(0,'OPEN','mspaint.exe',maphoto, Nil, SW_SHOW);
         timer1.enabled:=true;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
                    {donne le temps à mspaint.exe de s'ouvrir et de lire le fichier}
    begin
         timer1.enabled:=false;
     
         monImage:=PChar(maPhoto+' - Paint');
         ImgHandle := FindWindow(nil,monImage);
                   {il faut que le focus soit sur l'image dans mspaint}
         BringWindowToTop(ImgHandle);
                                 { ensuite, sélection de l'image : }
         keybd_event(17, 0, 0, 0);
         keybd_event(65, 0, 0, 0);
         keybd_event(17, 0, 2, 0);
         keybd_event(65, 0, 2, 0);
                                 {conversion au format par défaut (.bmp)
                                 et copie dans le presse-papier : }
         keybd_event(17, 0, 0, 0);
         keybd_event(67, 0, 0, 0);
         keybd_event(17, 0, 2, 0);
         keybd_event(67, 0, 2, 0);
     
         timer2.enabled:=true;
    end;
     
    procedure TForm1.Timer2Timer(Sender: TObject);
                  {donne le temps de convertir et copier l'image}
    begin
         timer2.enabled:=false;
         image1.autoSize:=true;
         image1.picture.assign(clipboard);
         image1.visible:=true;
         SendMessage(ImgHandle,WM_CLOSE,0,0);  {mspaint est clos}
    end;
     
    {Finalement image1.picture.BitMap contient l'image initiale convertie}
    ( il faut ShellApi,clipbrd,ExtCtrls dans les uses )
    Evidemment, comme cela, c'est trop rustique : il faudrait ajouter des tests d'existence, mettre des wait pour optimiser les délais d'exécution, etc. Mais ça marche quand même.
    Les spécialistes vont surement se tirbouchonner en voyant une méthode aussi naïve, alors qu'il existe certainement des modules pour convertir en .bmp des tas de formats différents.
    Malheureusement, on n'a pas toujours le bon module de conversion disponible pour l'incorporer à l'application. Avec cette méthode lourdingue, on peut quand même lire n'importe quel fichier dont le format est reconnu par mspaint.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme C++ pour convertir les images tif ou JPG en image raw
    Par kruskal21 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 29/01/2010, 22h09
  2. convertir image gif en bmp
    Par Teddy7 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/12/2009, 12h22
  3. VBA:convertir images en BMP
    Par popol5485 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/09/2008, 18h39
  4. convertir simplement un jpg en bmp
    Par Invité dans le forum Multimédia
    Réponses: 4
    Dernier message: 17/08/2005, 09h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo