Cra*_*rge 5 c# silverlight image-processing windows-phone-7
我的应用程序使用相机拍摄图像并将其上传到flickr.我想压缩图像,以便上传时间不会像目前那样长.我尝试了BitmapSource和WriteableBitmap的'SaveJpeg'方法来完成此任务但失败了.位图源在Silverlight/WP中没有与完整.NET框架版本中相同的成员,而WriteableBitmap一直在向我提供"此流不支持写入它"错误的SaveJpeg方法.
这是我目前在我的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);
}
Run Code Online (Sandbox Code Playgroud)
这段代码给了我一个:"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);
}
Run Code Online (Sandbox Code Playgroud)
我试图写入源流.卫生署!
谢谢.
我认为 SaveJpeg 是我这样做的方式。你可能可以用其他方法来做,但我认为这是最简单、最自然的。错误“此流不支持写入”可能是因为无论您传递给 SaveJpeg 的流是什么,它都是不可写的。我不太确定您要写入的内容,请尝试仅使用普通的旧内存流,看看是否可以这样工作
using System.IO;
// ...
MemoryStream ms = new MemoryStream();
pic.SaveJpeg(ms, pic.PixelWidth, pic.PixelHeight, 0, 0, 50);
Run Code Online (Sandbox Code Playgroud)
您可以在最终参数中调整质量。PixelWidth/Height 来自WriteableBitmap,因此如果您有其他来源,您可能必须使用其他方法/属性来获取宽度/高度。您可能需要缩放它们,因为相机拍摄的图片可能非常大。这取决于您上传这些图片的目的,但缩放它们也可以使文件大小更小。