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

API, COM et SDKs Delphi Discussion :

[Tuto][LibTiffDelphi 3.7.0.00] Comment créer ses propres TIFFTag


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Points : 10
    Points
    10
    Par défaut [Tuto][LibTiffDelphi 3.7.0.00] Comment créer ses propres TIFFTag
    Bonjour,

    ces quelques lignes pour vous dire qu'il est possible de passer des données avec des TAGs perso dans un fichier Tiffgrace à la LibTiffDelphi V3.7.

    Aucun problème avec les Tiff_tag standards de la norme Tiff :

    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
    cree_nom_fichier;                     // fabrique le nom du fichier de stockage
      // création d'un fichier Tiff
      Destination:=TIFFOpen(fichier_vid+'.TIF','w');       // création de la structure
      assert(Destination<>nil,'Impossible de créer le fichier TIFF');
    ....
    //Champ TIFFTAG standards
        TIFFSetField(Destination,TIFFTAG_IMAGEWIDTH,iW);                    // champs taillle de l'image
        TIFFSetField(Destination,TIFFTAG_IMAGELENGTH,iH);
        TIFFSetField(Destination,TIFFTAG_BITSPERSAMPLE,8);                  // champ niveaux de gris 8 => 256 niveaux de gris
        TIFFSetField(Destination,TIFFTAG_SAMPLESPERPIXEL,3);                // champ échantillonnage 3=> 3 octets par pixel
        TIFFSetField(Destination,TIFFTAG_ROWSPERSTRIP,iH);                  // champ taille de bande (facilite la lecture des grandes images). Ici 1 bande = 1 ligne
        TIFFSetField(Destination,TIFFTAG_COMPRESSION,COMPRESSION_NONE);     // champ de compression (surtout pas de compression !)
        TIFFSetField(Destination,TIFFTAG_PHOTOMETRIC,PHOTOMETRIC_RGB);      // système colorimétrique
        TIFFSetField(Destination,TIFFTAG_PLANARCONFIG,PLANARCONFIG_CONTIG);
        TIFFSetField(Destination,TIFFTAG_RESOLUTIONUNIT,RESUNIT_CENTIMETER);// resolution de l'image
        TIFFSetField(Destination,TIFFTAG_XRESOLUTION,resolution);
        TIFFSetField(Destination,TIFFTAG_YRESOLUTION,resolution);
    Création des TAG personnels, ici un exemple avec de ll'ASCII, et des DOUBLE :

    Juste après le TIFFOpen, j'ajoute mes tags au dictionnaire (il faut le refaire à chaque sollicitation du TiffOpen, car le dictionnaire n'est pas global, il est lié au tiff sur lequel il pointe):
    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
    // création des tags propres 
      with xtiffFieldInfo[0] do
        begin
          FieldTag:=$D000;
          FieldReadCount:=TIFF_VARIABLE;
          FieldWriteCount:=TIFF_VARIABLE;
          FieldType:=TIFF_ASCII;
          FieldBit:=FIELD_CUSTOM;
          FieldOkToChange:=1;
          FieldPassCount:=0;
          FieldName:=Pchar('EssaiTexte');
        end;
     
      with xtiffFieldInfo[1] do
        begin
          FieldTag:=$D001; 
          FieldReadCount:=1;
          FieldWriteCount:=1;
          FieldType:=TIFF_DOUBLE;
          FieldBit:=FIELD_CUSTOM;
          FieldOkToChange:=1;
          FieldPassCount:=1;
          FieldName:=Pchar('ExposureTime');
        end;
     
      with xtiffFieldInfo[2] do
        begin
          FieldTag:=$D002;  
          FieldReadCount:=1;
          FieldWriteCount:=1;
          FieldType:=TIFF_DOUBLE;
          FieldBit:=FIELD_CUSTOM;
          FieldOkToChange:=1;
          FieldPassCount:=1;
          FieldName:=Pchar('FocalLength');
        end;
     
      TIFFMergeFieldInfo(destination,@xtiffFieldInfo,3);
    Notez que la longueur des champs passé est TIFF_VARIABLE pour de l'ascii (chaine à 0 terminal à passer avec un Pchar). Pour les tags non ASCIII, il est indispensable d'utiliser TIFFSetField en mode passage de la longueur (et donc avec FieldPassCount à True, euh... à 1), je n'ai pas réussi avec le mode standard d'appel de TIFFSetField.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       // custom fields spécifiques
        ch:='Camera n°'+Cam_serial;           TIFFSetField(Destination,$D000,PChar(ch));
        longueur:=1;
        new(Pexposition); Pexposition^:=1.2345;            TIFFSetField(Destination,$D001,longueur,Pexposition);     // exposition
        new(Pfocale); Pfocale^:=6.7891011;                TIFFSetField(Destination,$D002,longueur,Pfocale);         // focale
    AsTiffTagViewer me donne ça :
    ImageWidth (1 Short): 1280
    ImageLength (1 Short): 1024
    BitsPerSample (3 Short): 8, 8, 8
    Compression (1 Short): Uncompressed
    Photometric (1 Short): RGB
    StripOffsets (1 Long): 8
    SamplesPerPixel (1 Short): 3
    RowsPerStrip (1 Short): 1024
    StripByteCounts (1 Long): 3932160
    XResolution (1 Rational): 100,199996948242
    YResolution (1 Rational): 100,199996948242
    PlanarConfig (1 Short): Contig
    ResolutionUnit (1 Short): Centimeter
    Software (10 ASCII): RJLab5#12
    53248 (18 ASCII): Camera n°20003776
    53249 (1 Double):
    53250 (1 Double):

    Les deux derniers tags ne sont pas interprétés par le Viewer, mais il ne faut pas s'inquiéter, ça marche quand même.
    Le tag 53250 est vu par le viewer comme "54 F3 66 1E 0A 28 1B 40".

    C'est bien confirmé par la trace CPU dit que c'est stocké dans la mémoire comme tel (voir image jointe).

    En toute rigueur, dans le Tiff, il faudrait créer un subdirectory propre à l'application et y coller ses tags perso, mais j'ai choisi de les mettre dans le root car mon appli est scientifique et les fichiers ne seront exploités que par des logiciels dédiés.

    Voilà, j'espère que ça pourra servir à d'autres.

    @+
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/09/2012, 14h28
  2. WSS 3 : comment créer ses propres pages modèles?
    Par chatroux dans le forum SharePoint
    Réponses: 3
    Dernier message: 12/11/2008, 09h27
  3. [TP 7] Comment créer mes propres unités ?
    Par bongo parfait dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 17/04/2007, 22h31
  4. [C#] Comment créer ses propres thèmes
    Par sorcer1 dans le forum C#
    Réponses: 2
    Dernier message: 26/03/2007, 14h40
  5. Comment créer son propre logiciel de gestion ?
    Par Sayanne dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 11/04/2006, 18h03

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