2011-04-24 41 views
4

我想让用户捕捉图像并使用图像将其添加到屏幕上。但是,由于内存限制,我还需要将此图像调整为大约一半尺寸(12x 500万像素在手机上绝对不行)。调整生成相机流的大小

我正在启动相机任务,它会调用Completed事件。但是,当我尝试使用DecodeJpeg时,出现“参数不正确”。例外。

这里是我的代码调整大小,其中mx和我的尺寸为int。我已经验证,有一些在e.ChosenPhoto约5500〜长度:

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

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

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

+0

当它崩溃时会发生什么?抛出什么异常? – 2011-04-25 10:41:01

回答

4

尝试使用System.Windows.Media.Imaging - Extensions.LoadJpeg方法而不是PictureDecoder.DecodeJpeg。还要确保该流位于流的开始位置。如果您已经使用的流则需要使用重置密码:

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

我有很多的试图访问原始图像的问题,尤其是因为BitmapImage的automatically resizes images over 2000x2000。如果你想要一个形象大于2000x2000大,你必须访问原始数据流,如果你想看到一些更复杂的图像处理代码,包括使用ExifLib从图像流检测分辨率,并使用旋转流将其加载到WriteableBitmap object

WriteableBitmap Extensions检查了类为Silverlight ZXing Library

UPDATE:由于您只是想调整给定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方法)

+0

从我在文档中看到的,LoadJpeg不允许我调整图像大小(反正需要在2k * 2k以下),但我会尝试重置流。不过,我从来没有使用过它。 – 2011-04-26 22:32:52

+0

如果您只想将图片加载到小于2000x2000的图像中,则只需使用如下所示的BitmapImage:http://www.ginktage.com/2011/04/using-the-cameracapturetask-in-windows -phone-7 /然后您可以使用WriteableBitmap来调整其大小或使用ScaleTransform http://blogs.msdn.com/b/mikeormond/archive/2010/12/09/resizing-images-in-windows-phone- 7.aspx – 2011-04-26 22:35:27

+0

我需要能够控制大小,所以只使用WriteableBitmap将不起作用。现在看ScaleTransform ...我需要能够调整图像的大小,所以我一次没有一堆2k * 2k的图像,所以我需要能够在Image对象中再次使用图像(即不保存到磁盘) – 2011-04-26 22:41:20

-1

出于好奇,如果你调用重载DecodeJpeg方法,只有1个参数(stream参数,你还可以得到这个错误)而不通过mx和我的整数参数以上?

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

+0

是的,仍然崩溃(在仿真器上,顺便说一句,但我不能在设备上调试,因为相机插入并连接到Zune时无法正常工作)。以下是例外的详细信息:http://pastebin.com/WpCnbK3k – 2011-04-26 21:21:05

+0

至少我们知道这肯定是第一个流参数的问题。它出于某种原因不喜欢你的流。我看到别人有这个问题解决它与这个决议,这是否有帮助http://www.codeproject.com/Questions/152085/WP7-string-to-stream-and-back.aspx?display=Print – Matt 2011-04-26 21:43:34

+0

我我以前看过那个,它并不适用于我,因为我只是将要转换为图像的Stream。在他的情况下,他将流转换为byte [],然后返回到Stream,因为他做错了,似乎将其搞乱了...... – 2011-04-26 22:14:14