调整结果相机流的大小

时间:2011-04-24 23:54:00

标签: c# silverlight windows-phone-7 camera

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

我正在启动摄像头任务,它会调用Completed事件。但是,当我尝试使用DecodeJpeg时,我得到一个“参数不正确”。异常。

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

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

第一行是应用崩溃的地方。有什么想法吗?

编辑: PhotoChooserTask的结果也会出现这种情况....

2 个答案:

答案 0 :(得分:4)

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

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

我在尝试访问原始图像时遇到了很多问题,尤其是自BitmapImage automatically resizes images over 2000x2000以来。如果您想要一个大于2000x2000的图像,您必须能够访问原始流并将其加载到WriteableBitmap object

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

更新:由于您想要的是在给定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方法)

答案 1 :(得分:-1)

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

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