如何在Windows Phone上压缩图像
本文关键字:压缩 图像 Phone Windows | 更新日期: 2023-09-27 18:24:58
我的应用程序使用相机拍摄图像并将其上传到flickr。我想压缩图像,这样上传的时间就不会像现在这样长。我尝试了BitmapSource和WriteableBitmap的"SaveJpeg"方法来实现这一点,但都失败了。Bitmap源在Silverlight/WP中没有与完整.NET框架版本和SaveJpeg方法中相同的可用成员WriteableBitmap一直给我一个"This stream not support write to it"错误。
这就是我目前在CameraCaptureTask完成的事件处理程序中所做的:
private void CameraCaptureCompleted(object sender, PhotoResult e)
{
if (e == null || e.TaskResult != TaskResult.OK)
{
return;
}
BitmapImage bitmap = new BitmapImage {CreateOptions = BitmapCreateOptions.None};
bitmap.SetSource(AppHelper.LoadImage(e.ChosenPhoto));
WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap);
// Encode the WriteableBitmap object to a JPEG stream.
writeableBitmap.SaveJpeg(e.ChosenPhoto, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 85);
}
这段代码给了我一个错误:"Stream不支持写入"。
有没有其他方法可以压缩图像,或者我必须写一个压缩算法?
更新已修复!!
private void CameraCaptureCompleted(object sender, PhotoResult e)
{
if (e == null || e.TaskResult != TaskResult.OK)
{
return;
}
BitmapImage bitmap = new BitmapImage {CreateOptions = BitmapCreateOptions.None};
bitmap.SetSource(AppHelper.LoadImage(e.ChosenPhoto));
WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap);
// Encode the WriteableBitmap object to a JPEG stream.
writeableBitmap.SaveJpeg(new MemoryStream(), writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 85);
}
我正试图写入源流。Doh!
谢谢。
SaveJpeg是我想做这件事的方法。你可能可以用其他方式来做,但我认为这将是最简单、最自然的。错误"This stream not support write to it"可能是因为您传递给SaveJpeg的任何流都是不可写的。我不太确定你想写什么,试着只使用一个普通的旧内存流,看看它是否像这样的一样工作
using System.IO;
// ...
MemoryStream ms = new MemoryStream();
pic.SaveJpeg(ms, pic.PixelWidth, pic.PixelHeight, 0, 0, 50);
您可以在最终参数中调整质量。PixelWidth/Height来自WriteableBitmap
,因此如果您有其他来源,则可能需要使用其他方法/属性来获取宽度/高度。你可能想缩放这些,因为相机拍摄的照片可能很大。这取决于你上传这些图片的目的,但缩放它们也可以缩小文件大小。