Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调整生成的摄影机流的大小_C#_Silverlight_Windows Phone 7_Camera - Fatal编程技术网

C# 调整生成的摄影机流的大小

C# 调整生成的摄影机流的大小,c#,silverlight,windows-phone-7,camera,C#,Silverlight,Windows Phone 7,Camera,我试图让用户捕获图像并使用图像将其添加到屏幕上。但是,由于内存限制,我还需要将此图像的大小调整到大约一半(12x5MP图像在手机上永远不会好用…) 我正在启动相机任务,它将调用已完成事件。但是,当我尝试使用DecodeJpeg时,我得到一个“参数不正确”异常 这是我调整尺寸的代码,其中mx和my是int表示尺寸。我已经证实e.Chosen照片中有一个长度约为5500的东西: WriteableBitmap bitmap = PictureDecoder.DecodeJpeg(e.ChosenPh

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

我正在启动相机任务,它将调用已完成事件。但是,当我尝试使用DecodeJpeg时,我得到一个“参数不正确”异常

这是我调整尺寸的代码,其中mx和my是int表示尺寸。我已经证实e.Chosen照片中有一个长度约为5500的东西:

WriteableBitmap bitmap = PictureDecoder.DecodeJpeg(e.ChosenPhoto, mx, my);
Image img = new Image();
img.Source = bitmap;
第一行是应用程序崩溃的地方。有什么想法吗

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

请尝试使用该方法,而不是。还要确保流位于流的开头。如果您已经使用了该流,则需要使用以下方法重置它:

MyImageStream.Seek(0, System.IO.SeekOrigin.Begin)
我在尝试访问原始图像时遇到了很多问题,尤其是在BitmapImage之后。如果您希望图像大于2000x2000,则必须访问原始流并将其加载到

如果您想查看一些更复杂的图像处理代码,包括使用和旋转图像流检测图像流的分辨率,请查看的类

更新:由于您只需要根据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方法)

它崩溃时会发生什么?引发了哪些异常?从我在文档中看到的情况来看,LoadJpeg不允许我调整图像大小(无论如何都需要在2k*2k以下),但我会尝试重置流。不过,我以前从未使用过它。如果您只想将图片加载到小于2000x2000的图像中,那么只需使用此处概述的位图即可:然后您可以使用WriteableBitmap调整其大小,或者使用ScaleTransform,我需要能够对大小进行一些控制,因此仅使用WriteableBitmap是行不通的。现在看ScaleTransform。。。我需要能够调整图像大小,这样屏幕上就不会同时出现一堆2k*2k图像,所以我需要能够在图像对象中再次使用图像(即,不保存到磁盘),我认为Extensions.LoadJpeg将保持可写位图的原始大小,因此,您可以创建一个任意大小的图像,然后将图像加载到其中,它将自动调整大小。它不会拉伸或倾斜,因此您需要确保保持原始纵横比不变。使用ExifLib获取有关原始大小的信息。