C# 加载JPEG时出错:";GDI+;中发生一般性错误&引用;
我有些JPEG文件似乎无法加载到我的C#应用程序中。它们可以很好地加载到其他应用程序中,比如GIMP。这是我用来加载图像的代码行: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#中不起作用的问题,这可能会很有用 该错误可能意味着数据已损坏 或者有
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块,但相反,它会