尝试使用System.Windows.Media.Imaging - Extensions.LoadJpeg http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.extensions.loadjpeg%28v=vs.92%29.aspx方法而不是图片解码器.DecodeJpeg http://msdn.microsoft.com/en-us/library/microsoft.phone.picturedecoder.decodejpeg%28v=vs.92%29.aspx。还要确保流位于流的开头。如果您已经使用过该流,则需要使用以下方法重置它:
MyImageStream.Seek(0, System.IO.SeekOrigin.Begin)
我在尝试访问原始图像时遇到了很多问题,特别是自从 BitmapImage自动调整图像大小超过 2000x2000 http://social.msdn.microsoft.com/Forums/en/wpf/thread/21dbdb45-d49b-486a-83f8-58fb27987c4f。如果您想要大于 2000x2000 的图像,您必须有权访问原始流并将其加载到可写位图对象 http://msdn.microsoft.com/en-us/library/ff967560%28v=vs.92%29.aspx#BKMK_Images
如果您想查看一些更复杂的图像处理代码,包括使用以下命令检测图像流的分辨率ExifLib https://stackoverflow.com/questions/4661825/windows-phone-7-picture-metadata和旋转流使用可写位图扩展 http://writeablebitmapex.codeplex.com/看看条码采集结果 http://silverlightzxing.codeplex.com/SourceControl/changeset/view/3bd7fb2d5eb2#WP7_Barcode_Library/BarcodeCaptureResult.cs类为Silverlight ZXing 库 http://silverlightzxing.codeplex.com/.
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 方法)