在C#中使用编码器压缩位图

时间:2014-04-20 17:59:40

标签: c# wpf bitmap compression

我正在为我的项目中的压缩.bmp图像做一个WPF表单应用程序。 我想使用RLE压缩算法和Huffman压缩图像。  我通过引用MSDN尝试下面的代码,但原始图像和压缩图像具有相同的大小。

    private List<double> HuffmanAndRle(int size)
    {
        try
        {
            if((size > _image.Width) || (size > _image.Height))
                throw new Exception("size is too large");
            Bitmap bitmaporg = crop(size);
            Bitmap bitmapRLE = crop(size);
            Bitmap bitmapHuffman = crop(size);
            ImageCodecInfo myImageCodecInfo ;

            myImageCodecInfo = GetEncoderInfo("image/bmp");


            var myEncoderParameters = new EncoderParameters(1);
            var enc = new Encoder(Encoder.Compression.Guid);
            myEncoderParameters.Param[0] = new EncoderParameter(enc, (long)EncoderValue.CompressionCCITT4);
            bitmapHuffman.Save("C:/Hffman.bmp", myImageCodecInfo, myEncoderParameters);
            //bitmapHuffman.Save()


            var myEncoderParameters1 = new EncoderParameters(1);
            myEncoderParameters1.Param[0] = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionNone);
            bitmaporg.Save("C:/org.bmp", myImageCodecInfo, myEncoderParameters1);



            var myEncoderParameters2 = new EncoderParameters(1);
            myEncoderParameters2.Param[0] = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionRle);
            bitmapRLE.Save("C:/RLE.bmp", myImageCodecInfo, myEncoderParameters2);


            var org =new BitmapImage(new Uri("C:/org.bmp"));
            var rle = new BitmapImage(new Uri("C:/RLE.bmp"));
            var huffman = new BitmapImage(new Uri("C:/Hffman.bmp"));

            var dobles = new List<double>();
            dobles.Add(ImageSize2(huffman)/ImageSize2(org));
            dobles.Add(ImageSize2(rle)/ImageSize2(org));
            return dobles;

        }
        catch (Exception e)
        {
            MessageBox.Show("Error : " + e.Message);
            return null;
        }
    }

那么问题在哪里?

1 个答案:

答案 0 :(得分:0)

霍夫曼算法不适合所有文件的压缩,如果我们有少量字符,我们的压缩结果会更好,但如果我们有更多,那么压缩将更少或在某些情况下比原始文件大小更多。我们在文本文件上使用Huffman算法时的最佳压缩。