【发布时间】: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