减少BitmapImage的文件大小(质量)(不调整大小)

时间:2015-02-18 23:12:02

标签: c# xaml visual-studio-2013 windows-runtime windows-phone-8.1

我无法找到降低图片文件大小的方法。 我从使用FilePicker的StorageFile开始,然后使用WriteableBitmap类调整它的大小,现在我想减少我的图像文件。

这是我的代码中没有工作的部分:

BitmapDecoder compressDecoder = await BitmapDecoder.CreateAsync(imageStream);
PixelDataProvider compressionData = await compressDecoder.GetPixelDataAsync();
byte[] compressionBytes = compressionData.DetachPixelData();

//Set target image quality
BitmapPropertySet propertySet = new BitmapPropertySet();
BitmapTypedValue qualityValue = new BitmapTypedValue(0.5, PropertyType.Single);
propertySet.Add("ImageQuality", qualityValue);

imageStream.Seek(0);
BitmapEncoder compressionEncoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, imageStream, propertySet);
compressionEncoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, compressDecoder.PixelWidth, compressDecoder.PixelHeight, compressDecoder.DpiX, compressDecoder.DpiY, compressionBytes);
await compressionEncoder.FlushAsync();

问题在于,即使我尝试将qualityValue设置为0.5或更低,我仍然可以看到图像失去质量(当然),但文件大小保持完全相同。 怎么可能呢?

实际上,如果我将质量设置为1.0,文件大小几乎翻倍,我将其调低至0.5,文件大小保持不变(即使图像质量较差)然后如果我继续转动它文件大小不会改变。 如果这是有道理的,我不知道如何:/

我在这里遗漏了什么吗?还有另一种压缩图像的方法吗? 我的意思是,我只是希望我的流不要超过固定的最大长度,所以我想继续降低质量,直到达到适当的平衡。

感谢您的帮助! 塞尔吉奥

0 个答案:

没有答案