调整产生的相机流的大小

本文关键字:相机 调整 | 更新日期: 2023-09-27 17:52:38

我试图让用户捕获图像并使用图像将其添加到屏幕上。但是,由于内存限制,我还需要将该图像的大小调整到一半左右(12x 500万像素的图像在手机上从来都不好…)

我很好地启动了相机任务,它调用了Completed事件。然而,当我尝试使用DecodeJpeg时,我得到一个"参数不正确"的异常。

这是我的代码调整大小,其中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自动调整图像大小超过2000x2000。如果你想要一个大于2000x2000的图像,你必须访问原始流并将其加载到WriteableBitmap对象

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

UPDATE:因为所有你想要的是调整图像的大小给定e.s 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方法)