Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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# 某些JPEG未正确显示/大小限制_C#_.net_Silverlight_Jpeg_Windows Phone 7.1 - Fatal编程技术网

C# 某些JPEG未正确显示/大小限制

C# 某些JPEG未正确显示/大小限制,c#,.net,silverlight,jpeg,windows-phone-7.1,C#,.net,Silverlight,Jpeg,Windows Phone 7.1,我有一个应用程序,我从网上下载JPEG,解码并在WindowsPhone7.1上显示。除了一个jpeg文件外,它工作正常。我用数百张JPEG图片试用了这个应用程序,但这个问题很少发生 顺便说一句,我试着用PictureDecoder.DecodeJpeg和ImageTools的Jpeg解码器解码Jpeg。两者都产生了相同的结果60%或70%的图片显示为黑色,其余为正常 注意:这不是2000像素的限制问题。我通过解码后将图像分割成几块来解决这个问题 另一个注意事项:我检查了那些黑色区域的像素值,它

我有一个应用程序,我从网上下载JPEG,解码并在WindowsPhone7.1上显示。除了一个jpeg文件外,它工作正常。我用数百张JPEG图片试用了这个应用程序,但这个问题很少发生

顺便说一句,我试着用PictureDecoder.DecodeJpeg和ImageTools的Jpeg解码器解码Jpeg。两者都产生了相同的结果60%或70%的图片显示为黑色,其余为正常

注意:这不是2000像素的限制问题。我通过解码后将图像分割成几块来解决这个问题

另一个注意事项:我检查了那些黑色区域的像素值,它们不是0(初始值)

另一个注意事项2:在XAML中使用
控件,并将其源代码设置为下面的URL。但这不是我的选择,因为我需要把它分成几个部分(因为2000像素的问题)

这是一个我有问题的jpeg:

更新:在我解码了JPEG之后,我再次对它进行编码,并将其保存到隔离的本地存储中,然后使用隔离存储资源管理器工具获取该文件。我可以显示图像,因此它被正确解码和编码。我仍在调查这个问题。

问题已解决:找不到原因
我通过降低图像的最大高度解决了这个问题。由于WindowsPhone7受到2000px 2000px的限制,我正在相应地分割我的图像。除了少数(百分之一)外,它可以处理数百张图像。不,这不是一个浮点数舍入问题,所有碎片的高度最大为2000像素。现在我把最大值从2000降到1800以下,它就可以工作了。然而,为什么会发生这种情况对我来说仍然是个谜。

我试着用我的jpeg解码器读取图像,它解码得很好。唯一值得注意的是,它是一个渐进的jpeg。您是否尝试读取与基线jpeg相同的图像?这可能是WP7的渐进式jpeg解码器中的一个错误。感谢您的评论。我检查了一些与我的解码器一起工作的其他照片,它们都是渐进的。我开始认为这可能不是解码器的问题,我还在调查。如果我找到答案,我将更新此帖子。@mostruash,将答案移动到一个答案帖子,并将其标记为答案,以帮助有类似问题的人集中精力回答问题。这可能是因为操作系统阻止应用程序使用太多内存。2000x2000彩色图像将在内部存储为RGB32,并占用16MB内存。这是一个非常可悲的限制,因为来自内部摄像头的图像比这个要大。这不是因为应用于整个应用程序的限制,因为我尝试使用比单个500x7500图像使用的内存多得多的内存。RAM限制并不能解释为什么拆分成更小的部分(拆分的部分会同时显示在同一个ScrollViewer中)。我相信Windows Phone 7.1中的任何单个图像的限制都是2048x2048。我不明白为什么拆分会在100分之一的情况下失败,但如果大小进一步减小,那么它就会起作用。我的猜测与BitBank相同,这取决于某个地方的内存或纹理缓冲区限制。