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

C++Builder Discussion :

Lecture fichier Tiff


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut Lecture fichier Tiff
    Bonjour à tous!

    Ça fait déjà une bonne journée que je troune autour d'un problème qui est pourtant simple. Enfin, je crois.

    Je dois créer un programme pour visualiser les fax entrants et ensuite les classer selon différents critères.

    Les fax sont en format tif/tiff. Alors, j'utilise la librairie "GraphicEx" pour ouvrir les images. Je ne retrouve plus le lien d'origine (sur devellopez.net), mais celui-ci devrait faire l'affaire :


    http://delphi.developpez.com/freewares/composants/?page=ImagesGraphismeMultimedia#GraphicEx


    J'ai deux problèmes avec cette librairie.

    Premier problème

    Je charge un fichier .tiff. Tout va bien. Je l'affiche dans un PaintBox via un Canvas->StrechtDraw sans problème.

    Mon problème survient lorsque j'essaie d'enregistrer le .tiff.

    J'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Graphics::TBitmap * bmp = new Graphics::TBitmap();
    	TTIFFGraphic * tiff = new TTIFFGraphic();
     
    	tiff->LoadFromFile("P:/Fiches Client/Classeur Commandes/1001-29LA-P5-ANNULLEE.TIFF");
    	tiff->SaveToFile("C:/test.tiff");
     
    	bmp->Assign(tiff);
    	PaintBox1->Canvas->StretchDraw(Rect(0,0,PaintBox1->Width,PaintBox1->Height),bmp);
     
    	delete bmp;
    	delete tiff;
    Il est relativement simple. Je charge le tiff et je l'enregistre immédiatement ensuite. Il ne devrait y avoir de problème, cependant, le fichier obtenu "test.tiff" est vide. Il a 0 octets.

    J'ai chercher sur google, sur developper.net, j'ai rien à ce sujet.

    Deuxième problème

    Lorsque je charge un fichier .tiff qui a été modifié par "Appercu des images et des télécopies Windows", la librairie ne reconnait plus le fichier. Il ne veut pas charger le fichier, il dit que ce n'est pas un fichier encoder .tiff. Dans ce cas-ci, la modification est une rotation de 180° (le fax était à l'envers).

    J'ai épuissé toute mes ressources, alors si vous avez une idée, je serai prenneur.

    Merci,

    Bonne journée!

    antoine

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut Librairie
    Peut-être la solution réside dans le choix d'une autre librairie, quelqu'un connait une autre?

    J'ai trouvé http://openil.sourceforge.net/docs/index.php sur le forum.

    Commentaires/suggestions?

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    GraphicEx library de Soft-Gems
    Page de téléchargement ici, c'est vrai que c'est difficile à trouver.

    http://www.soft-gems.net/index.php?o...d=30&Itemid=35

    La librairie est un peu ancienne et n'évolue plus.

    Sinon pour une autre librairie, que soit OpenIL ou autres ils passent tous par libtiff. C'est la référence pour lire du Tiff et franchement si tu as le temps ce serait mieux pour toi que de passer par une librairies intermédiaire qui va cacher des informations, bufferiser (et libtiff est déja assez lente comme ça), etc...

    Ce qu'il faur faire:
    - compiler la librarie
    - écrire le code pour charger les images

    Mais évidemment ce n'est pas si simple - ni non plus difficile.
    Compte entre 2 et 3 jours en fonction de ton niveau. Un peu plus si tu ne l'as jamais fait.

    ps ça ne te couteras pas beaucoup moins avec OpenIL mais regarde quand même comment ils chargent un image Tiff dans cette librairies. Regarde aussi dans FreeImage.

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    (GraphicEx) C'est déjà la librairie qu'il utilise.
    La réponse est dans le fichier d'aide.
    GraphicEx is an addendum to Delphi's Graphics.pas in order to enable your application to load many common image formats. This library is primarily designed to load images as background (buttons, forms, toolbars) and textures (DirectX, OpenGL) or for image browsing and editing purposes as long as you don't need to save images. Currently only TTargaGraphic also supports saving an image.
    Donc, tu peux sauvegarder les images aux formats Targa mais pas en TIFF.

    Sachant que tu travailles sur une solution de fax, tu peux regarder les composants Turbo Power Async qui sont gratuit en GPL sur sourceforge.

    Sinon, tu peux peut-être convertir ton fichier TIFF dans un autre format ou regarder si la JVCL permet d'ouvrir et d'enregistrer ce format.

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut
    Bonjour à vous deux!

    Tout d'abord merci d'avoir pris le temps de répondre!

    Il me semble que je sois un peu retardé.

    cxImage

    J'ai essayé avec cxImage, mais je n'arrive pas à compiler les lib.
    -> J'ai compilé la lib zlib, la jpeg et ensuite la tiff en incluant la jpeg.lib et la zlib.lib.
    -> J'ai ensuite voulu compiler la cxImage.lib avec la tiff.lib que je venait de faire. Ici, il me sort une erreur de variable inconnue : mp_f

    J'ai donc laisse de côté cet avenue.

    OpenIL

    Je me part un nouveau projet. Je configure les paths en ajoutant le dossier include et lib de OpenIL.
    ->J'ajoute #include <il.h>
    ->J'ajoute la commande ilInit();
    ->Il me donne une erreur de référence, alors j'ajoute directement le fichier DevIl.lib au projet.
    -> Il me donne l'erreur "Erreur : '.../DevIL.lib' contains invalid OMF record, type 0x21 (possibly COFF)

    Donc la je suis coincé.

    Il me reste la biblio FreeImage a essayé, mais bon... mon problème ne semble pas venir des biblio utilisées, mais bien du programmeur (moi ;P ).

    C'est la portion "compiler des lib" que je ne pige pas.

    Enfin, je vais continuer à chercher.

    Si quelqu'un a un petit tuto sur la compilation de lib sous borland, ça serait apprécié.

    Pour ce qui est de Turbo Power Async, je le met sur la glace, ça me semble très intéressant, mais pour l'instant je vais me concentrer sur mon problème d'image puisque le fax enregistre automatiquement sous format tiff sur le serveur les fax entrants.


    Antoine

  7. #7
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut antoinelac
    Je ne l'ai jamais utilise, mais c'est tire de l'aide en ligne BCB6
    Using the COFF2OMF import library conversion tool
    Coff2Omf is a command line tool that converts a COFF import library file (InputFile) to a corresponding OMF import library file (OutputFile). Coff2Omf.exe is located in the C++Builder BIN directory. The syntax is:
    Coff2Omf [options] InputFile OutputFile
    Coff2Omf converts the publicly exported symbols in the COFF import library to a corresponding set of symbols in the OMF import library. Coff2Omf enables C++Builder users to link to Microsoft and other third-party DLLs that use the COFF format. Coff2Omf does not convert .OBJ files.
    Run the Coff2Omf tool on a COFF import library created for a specific DLL, and use the resulting import library to link OMF format EXEs and DLLs to the COFF DLL. The switches for Coff2Omf are:
    -q - Quiet mode (converts without writing tool and copyright information to standard output)
    -v - Dump of selected symbols (dumps the symbols that have been converted to standard output which can be redirected to an output file)
    -d - Delete output file if empty (deletes the output file there is an error and the conversion results in an empty file)
    -h, -? Display help
    -r - Remove (delete) output file if empty
    -libx Specify options for OMF import library generation:
    xx can be:
    · ms - Allow entries that have MS C++ name mangling (default: no)
    · st - Normalize names instead of aliasing MS stdcall mangling
    · ca - Don't perform MS cdecl aliasing (default is to alias)
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Comme je te disais l'autre jour je pense que tu te complique la vie en essayant de compiler ces librairies. Elles sont généralement concues pour compiler avec Visual Studio alors pour quelqu'un qui n'a pas l'habitude c'est un peu difficile.
    Compiler les librairies ce n'esrt déja pas si évident alors si tu as compilé libtiff et zlib tu as fait le plus difficle.

    Regarde dans le répertoire contrib de libtiff. Tu verras des exemples dont un qui s'appelle win_dib (from Tiff to Windows bitmap).
    Un TBitmap c'est un DIB.

    Allez, je te donne quelques tuyaux:

    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
    TIFF* pTiff;
    pTiff = TIFFOpen(<fichier>,"r");
    TIFFGetField(pTiff, TIFFTAG_IMAGEWIDTH, nImageWidth);
    TIFFGetField(pTiff, TIFFTAG_IMAGELENGTH, nImageHeight);
    ...
    TGraphics::TBitmap* bmp = new Graphics::TBitamp;
    bmp->Width = nImageWidth;
    bmp->Height = nImageHeight;
    bmp->PixelFormat = pf32bit;
     
    TIFFRGBAImage img;
     
    TIFFRBAImageBegin(&img, pTiff, 0, szMsg);
      return;
     
    BYTE* pBits = new BYTE[W*H*4];
     
    TIFFRGBAImageGet(&img, pBits, W, H);
    A partir de la pBits contient un Buffer du bitmap en 32 bits, c'est facile de remplir les ScanLine du Bitmap avec.

    Il manque la gestion des erreurs et pas mal de détails. Je te laisse chercher.

    Comme je te disais l'autre jour le mieux est de regarder le chargement du Tiff dans CxImage (mais pas le source) et de l'adapter pour un TBitmap (ou un autre format si tu travaille avec ta propre librairie d'images).

    ps Les formats internes de CxImage et consort sont également des DIB.

    La page de présentation de libtiff donne aussi des exemples:
    http://www.libtiff.org/libtiff.html
    Regarde la section: TiffRGBAImageSupport

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    ps CxImage utilise une autre méthode que TiffRGBAImageGet mais contrib/win_dib/Tiffile.cpp l'utilise. Prends conc ce code alors, il en manque que la conversion en TBitmap.

    ps2 Bien entendu tu n'as pas du tout besoin de CxImage.lib. Link ton projet avec libtiff.lib & zlib.lib et c'est tout (libjpeg.lib eventuellement je ne me rappelle plus).

    Si tu as récupéré des binaires Visual Studio fait comme te dit Blondelle pour convertir les .lib au format CBuilder. Mais si tu as compilé toi-même libtiff et zlib c'est ok (et si tu as des erreurs lit attentivement).

    Voici mes notes concernant la compilation de libtiff 3.94 sous CBuilder 5.

    - copy tif_config.vc.h to tif_config.h
    - copy tiffconf.vc.h to tiffconf.h
    - edit tif_config.h
    add: #ifndef _TIF_CONFIG_ etc...
    change: #define lfind _lfind
    to #define std::lfind _lfind
    include <search.h> in your project (for lfind)

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Points : 81
    Points
    81
    Par défaut
    Excellent!

    Merci pour votre aide!

    Je me suis affecté à un autre projet qui est redevenu actif malgré moi (les utilisateurs en veulent plus! quand ça vient de eux, il est toujours plaisant de les écouter!), je replonge dans mon projet de fax d'ici la fin de la semaine!

    Je vous reviens très vite sur le sujet!

    Une fois encore merci de votre aide, j'étais un peu découragé!

    antoine

Discussions similaires

  1. [Débutant] lecture fichier tiff
    Par issane dans le forum Images
    Réponses: 4
    Dernier message: 03/06/2010, 08h11
  2. Réponses: 0
    Dernier message: 11/05/2010, 10h22
  3. [LG]probleme lecture fichier
    Par yp036871 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2004, 19h22
  4. [LG]Probleme lecture fichier file of ....
    Par John_win dans le forum Langage
    Réponses: 11
    Dernier message: 11/11/2003, 18h53
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08

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