如何在FreeImage中找出TIFF图像的压缩?

时间:2011-03-25 10:45:12

标签: tiff freeimage

我使用FreeImage处理多页TIFF文件,在某些时候我有一个FIBITMAP的TIFF页面,我需要知道它的压缩。知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

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