Question

Je voudrais utiliser LibTIFF pour accéder très gros fichiers TIFF. J'ai besoin des fonctions telles que plusieurs pages et les tuiles, et ainsi LibTIFF semble être la bonne façon de procéder. Quelqu'un peut-il me aider sur la façon d'utiliser LibTIFF de C #? J'ai trouvé quelques liens (comme blog.bee-ee qui contenait code partiel. Mais je couln't aller au-delà d'obtenir une version. Je l'ai regardé FreeImage mais trouvé ne convient pas (photos sont environ 800 MPixel 8 ou 16 bits en niveaux de gris -.> 800-1600 mégaoctet) taille et je ne peux pas le charger en mémoire dans un 32- milieu de bit)

Je suis très expérimenté en C / C ++, mais pas encore en C #. Quelqu'un peut-il me aider à une enveloppe ou quelques conseils?

Note: ai-je besoin d'accéder à des pages avions pyramidaux (multi-résolution) dans un fichier TIFF, et les tuiles de 256x256 pour avoir un accès rapide aux différentes parties de l'image sans le charger à la fois.

[Modifier] Le LibTIFF.NET solution me semblait plus pratique. Je suis maintenant l'intégrer dans un développement de produits, et ce sera propably me sauver beaucoup de maux de tête d'aller dans / de mémoire gérée. Je ne l'ai pas encore essayé la fonctionnalité « de rappel », qui semble être résolu bien d'une manière .net. Merci pour l'aide sur stackoverflow [/ Modifier]

Était-ce utile?

La solution

Vous pouvez essayer notre LibTiff.Net. Il est gratuit et la version open source de LibTIFF écrit en utilisant géré C #. API de notre mise en œuvre toujours très semblable à l'original de.

http://bitmiracle.com/libtiff/

Nous venons juste de sortir, donc il peut y avoir des bugs. Mais le code source complet est livré avec un certain nombre de tests, de sorte que les bugs les plus évidents devrait être corrigé.

Autres conseils

WIC prend en charge les fichiers d'images très grandes. Il y a une enveloppe agréable pour elle dans le cadre de .NET. TiffBitmapDecoder

Ma solution initiale était d'utiliser un C # .NET wrapper pour la LibTIFF DLL. Je l'ai trouvé sur libtiff ftp . Il semble contenir toutes les méthodes importantes de la bibliothèque libtiff. Il conserve la mémoire dans la mémoire non géré LibTIFF; cela signifie que le code C # doit être conscient de cela et de copie des données quand il doit être traité dans le code de sécurité.

Mon « code de lecture de tuiles » pour le tester comme lu

if (LibTIFF.IsTiled(tiff))
{
    if (LibTIFF.GetField(tiff, (int)TIFFTags.TIFFTAG_TILEWIDTH, out tileWidth) &&
        LibTIFF.GetField(tiff, (int)TIFFTags.TIFFTAG_TILELENGTH, out tileLength))
    {
        uint tiles = 0;
        IntPtr pTile = LibTIFF._malloc((int)(tileLength*tileWidth*bitsPerSample/2));
        for (uint y = 0; y < imageLength; y += tileLength)
        {
            for (uint x = 0; x < imageWidth; x += tileWidth)
            {
                LibTIFF.ReadTile(tiff, pTile, x, y, 0, 0);
                tiles++;
            }
        }                        
        LibTIFF._free(pTile);   
    }
}

Je vais aller pour le port de .NET LibTIFF bien, mais cette solution peut être la bonne pour les autres, donc je laisse sur StackOverflow.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top