【问题标题】:Compressing a bitmap using Encoder in C#在 C# 中使用编码器压缩位图
【发布时间】:2016-04-02 22:45:12
【问题描述】:

我正在为我的项目中压缩 .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;
        }
    }

那么问题出在哪里??

【问题讨论】:

  • 我很困惑。你不是在这里再次将(可能压缩的)位图加载到位图对象中,从而在过程中解压缩图像吗?

标签: c# wpf bitmap compression


【解决方案1】:

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

【讨论】:

  • 这不是问题的确切答案,这是一个评论。
猜你喜欢
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多