调整生成的相机流的大小

我试图让用户捕获图像并使用图像将其添加到屏幕上。 但是,由于内存限制,我还需要将此图像的大小调整为大约一半(12x 5MP图像在手机上永远不会好…)

我正在启动相机任务很好,它调用Completed事件。 但是,当我尝试使用DecodeJpeg时,我得到一个“参数不正确”。 例外。

这是我resize的代码,其中mx和my是维度的int。 我已经确认e.ChosenPhoto中有一些长度约为5500的东西:

WriteableBitmap bitmap = PictureDecoder.DecodeJpeg(e.ChosenPhoto, mx, my); Image img = new Image(); img.Source = bitmap; 

第一行是应用程序崩溃的地方。 有任何想法吗?

编辑:这也发生在PhotoChooserTask的结果….

尝试使用System.Windows.Media.Imaging – Extensions.LoadJpeg方法而不是PictureDecoder.DecodeJpeg 。 还要确保流位于流的开头。 如果您已经使用了流,则需要使用以下方法重置它:

 MyImageStream.Seek(0, System.IO.SeekOrigin.Begin) 

我试图访问原始图像时遇到很多问题,特别是因为BitmapImage会自动调整2000×2000以上的图像大小 。 如果您想要一个大于2000×2000的图像,您必须能够访问原始流并将其加载到WriteableBitmap对象中

如果您想查看一些更复杂的图像处理代码,包括使用ExifLib检测图像流的分辨率,使用WriteableBitmap Extensions旋转流,请查看Silverlight ZXing Library的BarcodeCaptureResult类。

更新:由于你想要的是在给定e.ChosenPhoto结果的情况下调整图像大小,我从Silverlight ZXing库中提取了代码。 这应该工作:

 WriteableBitmap wbBarcodeImage = new WriteableBitmap(mx, my); Extensions.LoadJpeg(wbBarcodeImage, e.ChosenPhoto);//Load JPEG from stream into our re-sized writeable bitmap 

请注意,您需要使用正确的高度/宽度比,否则图像底部或侧面会出现黑条。 您可以使用ExifLib检测原始图像大小并使用它进行缩放(请参阅上面链接的BarcodeCaptureResult中的GetWriteableBitmap方法)

出于好奇,如果你调用重载的DecodeJpeg方法只有1个参数(stream参数)而没有传入上面的mx和我的整数参数,你也会得到这个错误吗?

我只是想缩小这个问题确实是stream参数的问题,而不是mx或my。