Frage

Ich möchte Libtiff verwenden, um auf sehr große Tiff -Dateien zuzugreifen. Ich brauche Funktionen wie mehrere Seiten und Kacheln, und so scheint Libtiff der richtige Weg zu sein. Kann mir jemand helfen, wie ich Libtiff von C#benutzt? Ich habe einige Links gefunden (wie wie blog.bee-ee welches Teilcode enthielt. Aber ich komme nicht mehr als eine Version. Ich habe mich angesehen Freies Bild Aber es fand es nicht geeignet (Bilder sind ca. 800 Mpixel 8 oder 16-Bit-Graustufen-> 800-1600 MByte) und ich kann es nicht in Speicher in einer 32-Bit-Umgebung laden)

Ich bin sehr erfahren in C/C ++, aber noch nicht in C#. Kann mir jemand zu einem Wrapper oder einigen Hinweisen helfen?

HINWEIS: Ich benötige Seiten, um auf pyramidische Ebenen (Mehrauflösung) in einem TIFF zuzugreifen, und Fliesen von 256x256, um einen schnellen Zugriff auf verschiedene Teile des Bildes zu haben, ohne es gleichzeitig zu laden.

Bearbeiten] die Libtiff.net Die Lösung schien mir am praktischsten zu sein. Ich integriere es jetzt in eine Produktentwicklung, und es wird mir durchaus viele Kopfschmerzen ersparen, wenn ich den verwalteten Speicher eingeht. Ich habe die "Rückruf -Funktionalität" noch nicht ausprobiert, die auf .NET -Weise gut gelöst zu werden scheint. Vielen Dank für die Hilfe bei Stackoverflow [/edit

War es hilfreich?

Lösung

Sie können unsere libtiff.net ausprobieren. Es ist kostenlos und Open -Source -Version von libtiff, die mit Managed C#geschrieben wurden. Die API unserer Implementierung hielt sich dem Original sehr ähnlich.

http://bitmiracle.com/liBtiff/

Wir haben es gerade veröffentlicht, also gibt es möglicherweise Fehler. Der vollständige Quellcode wird jedoch mit einer Reihe von Tests geliefert, sodass die meisten offensichtlichen Fehler behoben werden sollten.

Andere Tipps

WIC unterstützt sehr große Bilddateien. Es gibt einen schönen Wrapper dafür im .NET -Framework: TiffbitMapDeCoder.

Meine ursprüngliche Lösung bestand darin, einen C#.NET -Wrapper für die LIBTIFF -DLL zu verwenden. Ich habe es gefunden libtiff ftp. Es scheint alle wichtigen Methoden der Libtiff -Bibliothek zu enthalten. Es behält sich in unwirklichem Libtiff -Gedächtnis in Erinnerung. Dies bedeutet, dass der C# -Code darüber informiert sein muss und Daten kopieren müssen, wenn er in sicherem Code verarbeitet werden muss.

Mein 'Fliesenlesencode', um es zu testen wie Lesen wie

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);   
    }
}

Ich werde mich jedoch für den .NET -Port von Libtiff entscheiden, aber diese Lösung kann für andere Menschen das richtige sein, also lasse ich sie auf Stackoverflow.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top