Page 1 sur 1

Libtiff pour Delphi

Publié : 05 avr. 2006 17:51
par Antonio
Pour le momment, je ne maîtrise pas bien cette librairie et je n'arrive pas vraiement à avoir ce que je veux. En fait dans les exemples que je trouve, on ouvre un tiff de façon générique en forçant le mode 32 bits. le problème c'est que dans PF je dois conservé le mode couleurs, soit:

TIFF monochrome ==> bitmap monochrome
TIFF 4 bits ==> Bitmap 4 bits
TIFF 8 bits ==> Bitmap 8 bits
TIFF 24 bits ==> Bitmap 24 bits
TIFF 32 bits ==> Bitmap 32 bits

Idem pour l'enregistrement mais ça semble pas si simple :cry:
Si un développeur a déjà travaillé avec cette lib, ça m'intéresse :wink:

Publié : 05 avr. 2006 22:19
par pf
Salut Antonio,
Hélas, jamais vu...... :cry:
Peut tu donner une adresse ou se la procurer, maniere de jetter un oeil :wink: Y'a p'tet un moyen de contourner le probleme
A+

Publié : 06 avr. 2006 7:56
par agambier
Je sais pas si c'est cela que tu cherches ?
En utilisant la fonction TIFFReadRGBAImage
http://www.remotesensing.org/libtiff/libtiff.html

Code : Tout sélectionner

#include "tiffio.h"
main(int argc, char* argv[])
{
    TIFF* tif = TIFFOpen(argv[1], "r");
    if (tif) {
        uint32 w, h;
        size_t npixels;
        uint32* raster;
        
        TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w);
        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h);
        npixels = w * h;
        raster = (uint32*) _TIFFmalloc(npixels * sizeof (uint32));
        if (raster != NULL) {
            if (TIFFReadRGBAImage(tif, w, h, raster, 0)) {
                ...process raster data...
            }
            _TIFFfree(raster);
        }
        TIFFClose(tif);
    }
}

Publié : 06 avr. 2006 10:38
par Antonio
Peut tu donner une adresse
==> site officiel : http://www.libtiff.org
==> version pour Delphi : http://www.awaresystems.be/imaging/tiff/delphi.html


En utilisant la fonction TIFFReadRGBAImage
==> justement, cette fonction force le tiff en 32 bits, mais moi je veux conserver le format original :cry:

Publié : 06 avr. 2006 10:43
par agambier
Antonio a écrit :==> justement, cette fonction force le tiff en 32 bits, mais moi je veux conserver le format original
Ha désolé j'avais pas compris ta question :oops:

Publié : 06 avr. 2006 10:49
par agambier
Tu ne pense pas que la fonction tiffreadscanline te retourne chaque ligne mais codé suivant le codage du nombre de couleur.
Elle décompresse les données, mais peut être qu'elle ne les repasse pas en 32bits !

Code : Tout sélectionner

#include "tiffio.h"
main()
{
    TIFF* tif = TIFFOpen("myfile.tif", "r");
    if (tif) {
        uint32 imagelength;
        tdata_t buf;
        uint32 row;
        
        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength);
        buf = _TIFFmalloc(TIFFScanlineSize(tif));
        for (row = 0; row < imagelength; row++)
            tiffreadscanline(tif, buf, row);
        _tifffree(buf);
        tiffclose(tif);
    }
}

Publié : 06 avr. 2006 10:52
par agambier
Oui il faut utiliser la fonction Scanline c'est marqué sur le site !
Below this high-level interface the library provides scanline-, strip-, and tile-oriented interfaces that return data decompressed but otherwise untransformed.
http://www.remotesensing.org/libtiff/libtiff.html

Publié : 06 avr. 2006 14:56
par Antonio
Je pense que c'est la solution mais ça signifie aussi que je dois gérér un par un tous les cas possible de format :cry: La librairie GraphicEx charge un TIFF dans un Bitmap en conservant le format et c'est bien plus simple à utiliser :wink:

Publié : 09 avr. 2006 20:08
par pf
Et une question bete :wink:
GraphicEx le fait trés bien, pourquoi s'empoisonner avec celle-ci :?:

Publié : 09 avr. 2006 21:25
par Antonio
Ba parce que GraphicEx n'est plus maintenu et que ça lit pas tous les types de compression (jpeg par exemple)

Mais je vais contourner le problème car j'arrive à récupérer toutes les infos sur le mode de couleur dans les tags du tiff sans avoir à le charger complètement. Mais je bloque encore au niveau des différentes possibilités d'enregistrement. C'est quand même un petite usine à gaz si on veut traiter tous les cas :wink:

Publié : 19 avr. 2006 17:46
par Antonio
Pour l'enregistrement, LibTIFF est assez simple à utiliser. J'arrive à enregistrer avec compression LZW, RLE mais pas encore en JPEG...je sais pas si c'est très utilisé d'ailleurs...?

Par contre la couche alpha est plus délicate, je pense que ça sera pas pour tout de suite :oops:

Publié : 24 avr. 2006 17:51
par Antonio
Ouf c'est bon, j'ai réussi à gérer la compression LZW, JPEG, RLE et la couche alpha :lol:

Publié : 24 avr. 2006 17:59
par agambier
nickel 8)