Как узнать сжатие изображения TIFF в FreeImage? - PullRequest
3 голосов
/ 25 марта 2011

Я использую FreeImage для работы с многостраничными TIFF-файлами, и в какой-то момент у меня появляется страница TIFF в FIBITMAP, и мне нужно знать, как она сжимается.Есть идеи как это сделать?

1 Ответ

1 голос
/ 29 февраля 2012

FreeImage не имеет встроенной функции для раскрытия схемы сжатия файлов TIFF, однако вы можете использовать метаданные Exif, чтобы выяснить это (dib - локальная переменная FIBITMAP, это код c #):

    public string GetCompressionName()
    {
        long _compression;

        if (dib.IsNull)
           throw new Exception("dib is empty - image haven't been loaded!");

        //Searching tag in metadata.
        ImageMetadata iMetadata = new ImageMetadata(dib);

        foreach (MetadataModel metadataModel in iMetadata)
        {
            if (metadataModel.ToString() == "FIMD_EXIF_MAIN")
            {
                try
                { long.TryParse(metadataModel.GetTag("Compression").ToString(), out _compression); }
                catch
                { return "Unknown"; }


                if (CompressType.ContainsKey(_compression))
                {
                    string _compressionName;
                    CompressType.TryGetValue(_compression, out _compressionName);

                    if (_compressionName != null)
                    {
                        return _compressionName;
                    }
                }
            }
        }

        return "Unknown";
    }

Dictionary<long, string> CompressType = new Dictionary<long, string>()
        { 
            {1, "Uncompressed" } ,
            {2, "CCITT modified Huffman RLE"},
            {32773, "PackBits"}, 
            {3, "CCITT3"},
            {4, "CCITT4"},
            {5, "LZW"},
            {6, "JPEG_old"},
            {7, "JPEG_new"},
            {32946, "DeflatePKZIP"},
            {8, "DeflateAdobe"},
            {9, "JBIG_85"},
            {10, "JBIG_43"},
            {11, "JPEG"},
            {12, "JPEG"},
            {32766, "RLE_NeXT"},
            {32809, "RLE_ThunderScan"},
            {32895, "RasterPadding"},
            {32896, "RLE_LW"},
            {32897, "RLE_HC"},
            {32947, "RLE_BL"},
            {34661, "JBIG"},
            {34713, "Nikon_NEF"},
            {34712,"JPEG2000"}
        };
...