我的应用程序使用相机拍摄图像并将其上传到flickr。我想压缩图片,以便上传不会像目前那样长。我尝试了BitmapSource和WriteableBitmap的'SaveJpeg'方法来完成这个,但失败了。位图源在Silverlight/WP中没有与完整的.NET框架版本中相同的可用成员,并且WriteableBitmap一直给我提供'此流不支持写入'错误的SaveJpeg方法。如何在Windows Phone上压缩图像
这是我目前在做我的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);
}
此代码给我:“流不支持写入”错误。
有没有其他一些方法可以压缩图像,还是必须编写压缩算法?
UPDATE FIXED !!
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);
}
我正试图写入源码流。卫生署!
谢谢。
PhotoResult e不是一个流,因此SaveJpeg无法正常工作,您想在哪里保存图片? IsolatedStorage或临时流或其他地方... – ameer 2012-02-16 22:19:43
只要你知道,当你将它保存到新的MemoryStream()时,你现在没有参考你现在保存的位置,最好先创建内存流,然后将它传递给内存流那么一旦你获得了压缩文件,可以直接从存储器流中上传它,或者将其保存到独立的存储器中,然后再上传。 – ameer 2012-02-16 22:45:20