Libtiff pour Delphi

Discussion de programmation pour éviter d'empiéter dans les autres forums

Modérateurs : Modérateurs, Développeurs

Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12835
Inscription : 28 oct. 2003 22:49

Libtiff pour Delphi

Message 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:
pf
Développeur(se)|Développeur|Développeuse
Développeur(se)|Développeur|Développeuse
Messages : 974
Inscription : 28 avr. 2004 8:45
Version de PhotoFiltre : 6
Système d'exploitation : xp seven
Localisation : 78

Message 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+
agambier
Régulier(ère)|Régulier|Régulière
Régulier(ère)|Régulier|Régulière
Messages : 263
Inscription : 15 févr. 2006 10:52
Version de PhotoFiltre : PF 6.2.5
Système d'exploitation : XP Pro SP2
Mémoire RAM : 768 Mo

Message 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);
    }
}
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12835
Inscription : 28 oct. 2003 22:49

Message 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:
agambier
Régulier(ère)|Régulier|Régulière
Régulier(ère)|Régulier|Régulière
Messages : 263
Inscription : 15 févr. 2006 10:52
Version de PhotoFiltre : PF 6.2.5
Système d'exploitation : XP Pro SP2
Mémoire RAM : 768 Mo

Message 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:
agambier
Régulier(ère)|Régulier|Régulière
Régulier(ère)|Régulier|Régulière
Messages : 263
Inscription : 15 févr. 2006 10:52
Version de PhotoFiltre : PF 6.2.5
Système d'exploitation : XP Pro SP2
Mémoire RAM : 768 Mo

Message 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);
    }
}
agambier
Régulier(ère)|Régulier|Régulière
Régulier(ère)|Régulier|Régulière
Messages : 263
Inscription : 15 févr. 2006 10:52
Version de PhotoFiltre : PF 6.2.5
Système d'exploitation : XP Pro SP2
Mémoire RAM : 768 Mo

Message 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
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12835
Inscription : 28 oct. 2003 22:49

Message 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:
pf
Développeur(se)|Développeur|Développeuse
Développeur(se)|Développeur|Développeuse
Messages : 974
Inscription : 28 avr. 2004 8:45
Version de PhotoFiltre : 6
Système d'exploitation : xp seven
Localisation : 78

Message par pf »

Et une question bete :wink:
GraphicEx le fait trés bien, pourquoi s'empoisonner avec celle-ci :?:
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12835
Inscription : 28 oct. 2003 22:49

Message 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:
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12835
Inscription : 28 oct. 2003 22:49

Message 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:
Antonio
Administrateur(trice)|Administrateur|Administratrice
Administrateur(trice)|Administrateur|Administratrice
Messages : 12835
Inscription : 28 oct. 2003 22:49

Message par Antonio »

Ouf c'est bon, j'ai réussi à gérer la compression LZW, JPEG, RLE et la couche alpha :lol:
agambier
Régulier(ère)|Régulier|Régulière
Régulier(ère)|Régulier|Régulière
Messages : 263
Inscription : 15 févr. 2006 10:52
Version de PhotoFiltre : PF 6.2.5
Système d'exploitation : XP Pro SP2
Mémoire RAM : 768 Mo

Message par agambier »

nickel 8)