Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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时出错:";GDI+;中发生一般性错误&引用;_C#_Image_Gdi+ - Fatal编程技术网

C# 加载JPEG时出错:";GDI+;中发生一般性错误&引用;

C# 加载JPEG时出错:";GDI+;中发生一般性错误&引用;,c#,image,gdi+,C#,Image,Gdi+,我有些JPEG文件似乎无法加载到我的C#应用程序中。它们可以很好地加载到其他应用程序中,比如GIMP。这是我用来加载图像的代码行: System.Drawing.Image img = System.Drawing.Image.FromFile(@"C:\Image.jpg"); 我得到的例外是:“GDI+中发生了一个通用错误”,这真的没有多大帮助。有没有其他人遇到过这个问题,或者知道如何解决这个问题 注意:如果您想测试在C#中不起作用的问题,这可能会很有用 该错误可能意味着数据已损坏 或者有

我有些JPEG文件似乎无法加载到我的C#应用程序中。它们可以很好地加载到其他应用程序中,比如GIMP。这是我用来加载图像的代码行:

System.Drawing.Image img = System.Drawing.Image.FromFile(@"C:\Image.jpg");
我得到的例外是:“GDI+中发生了一个通用错误”,这真的没有多大帮助。有没有其他人遇到过这个问题,或者知道如何解决这个问题

注意:如果您想测试在C#中不起作用的问题,这可能会很有用

该错误可能意味着数据已损坏 或者有一些潜在的流 这已经很接近了,为时过早

这可能有用

该错误可能意味着数据已损坏 或者有一些潜在的流 这已经很接近了,为时过早


该错误可能是权限问题。尤其是当您的应用程序是ASP.NET应用程序时。尝试将文件移动到与可执行文件相同的目录(如果是Win forms)或web应用程序的根目录(如果是asp.net)。

此错误可能是权限问题。尤其是当您的应用程序是ASP.NET应用程序时。尝试将文件移动到与可执行文件(如果是Win forms)或web应用程序的根目录(如果是asp.net)相同的目录。

.net无法处理该特定图像的格式,可能是因为jpeg数据格式稍有损坏或不标准。如果将图像加载到GIMP并保存到新文件中,则可以使用image类加载它。大概GIMP对文件格式问题更宽容一些。

.Net没有处理特定图像的格式,可能是因为jpeg数据格式有点破损或不标准。如果将图像加载到GIMP并保存到新文件中,则可以使用image类加载它。大概GIMP对文件格式问题更宽容一些。

这个问题有一个确切的答案。我们今天在工作中遇到了这个问题,我能够确凿地证明这里发生了什么

JPEG标准定义了一种元数据格式,一种由一系列数据“块”(他们称之为“段”)组成的文件。每个区块以FF标记开始,然后是另一个标记字节以确定它是什么类型的区块,然后是一对描述区块长度的字节(一个16位的小endian值)。有些块(如FFD8,“图像的开始”)对文件的使用至关重要,而有些块(如FFFE,“注释”)则毫无意义

当JPEG标准被定义时,它们还包括所谓的“应用程序标记”——FFE0到FFEF类型——这些标记本应用于“特定于应用程序的数据”。这些标记被各种程序以各种方式滥用,但在大多数情况下,它们是无意义的,可以安全地忽略,APP0(FFE0)除外,用于JFIF数据:JFIF稍微扩展了JPEG标准,以包括额外的有用信息,如图像的DPI

问题在于它包含一个FFE1标记,该标记后面有一个大小为零的块。除了那个奇怪的无用的APP1块之外,它是一个不起眼的图像数据(一个引人注目的图像,但不起眼的数据)。GDI+错误地试图解释APP1块,可能试图将其解码为EXIF数据,结果它爆炸了。(我的猜测是GDI+正在消亡,因为它正试图实际处理一个大小为零的数组。)GDI+如果编写正确,将忽略任何它不理解的APPn块,但相反,它试图理解定义为非标准的数据,并因此爆发

因此,解决方案是编写一个小例程,将文件读入内存,去掉不需要的APPn块(标记FFE1到FFEF),然后将生成的“干净”图像数据输入GDI+,然后它将正确处理

我们目前正在进行一场竞赛,看看谁能以最快的速度编写JPEG清洗程序,并获得有趣的奖品:-)



对于反对者:该图像并非“略微不标准”。该图像出于自身目的使用APP1,而GDI+试图处理该数据是非常错误的。其他应用程序读取图像没有问题,因为它们正确地忽略了应用程序块,就像它们应该忽略的那样。

这个问题有一个确切的答案。我们今天在工作中遇到了这个问题,我能够确凿地证明这里发生了什么

JPEG标准定义了一种元数据格式,一种由一系列数据“块”(他们称之为“段”)组成的文件。每个区块以FF标记开始,然后是另一个标记字节以确定它是什么类型的区块,然后是一对描述区块长度的字节(一个16位的小endian值)。有些块(如FFD8,“图像的开始”)对文件的使用至关重要,而有些块(如FFFE,“注释”)则毫无意义

当JPEG标准被定义时,它们还包括所谓的“应用程序标记”——FFE0到FFEF类型——这些标记本应用于“特定于应用程序的数据”。这些标记被各种程序以各种方式滥用,但在大多数情况下,它们是无意义的,可以安全地忽略,APP0(FFE0)除外,用于JFIF数据:JFIF稍微扩展了JPEG标准,以包括额外的有用信息,如图像的DPI

问题在于它包含一个FFE1标记,该标记后面有一个大小为零的块。除了那个奇怪的无用的APP1块之外,它是一个不起眼的图像数据(一个引人注目的图像,但不起眼的数据)。GDI+错误地试图解释APP1块,可能试图将其解码为EXIF数据,结果它爆炸了。(我的猜测是GDI+正在消亡,因为它正试图实际处理一个大小为零的数组。)GDI+如果编写正确,将忽略任何它不理解的APPn块,但相反,它会