C# System.OverflowException:&x27;算术运算导致溢出;

C# System.OverflowException:&x27;算术运算导致溢出;,c#,.net-core,system.drawing.common,C#,.net Core,System.drawing.common,我创建了.NET核心控制台应用程序,并添加了对System.Drawing.Commonnuget的引用。 我正在尝试从运行以下代码,但在bitmap1.GetEncoderParameterList和System.OverflowException上失败: '算术运算导致溢出。' 这个代码有什么问题?我做了什么违法的事吗 class Program { public static void Main(string[] args) { new Program().Get

我创建了.NET核心控制台应用程序,并添加了对
System.Drawing.Common
nuget的引用。 我正在尝试从运行以下代码,但在
bitmap1.GetEncoderParameterList
System.OverflowException上失败:

'算术运算导致溢出。'

这个代码有什么问题?我做了什么违法的事吗

class Program
{

   public static void Main(string[] args)
   {
      new Program().GetSupportedParameters();
   }
   private void GetSupportedParameters()
   {
       Bitmap bitmap1 = new Bitmap(1, 1);
       ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
       //this one also does not work:
       //Bitmap bitmap1 = new Bitmap(Image.FromFile(@"C:\temp\0\2.png"));
       //ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Png);
       EncoderParameters paramList = bitmap1.GetEncoderParameterList(jpgEncoder.Clsid);
       EncoderParameter[] encParams = paramList.Param;
       StringBuilder paramInfo = new StringBuilder();

       for (int i = 0; i < encParams.Length; i++)
       {
           paramInfo.Append("Param " + i + " holds " + encParams[i].NumberOfValues +
                    " items of type " +
                encParams[i].ValueType + "\r\n" + "Guid category: " + encParams[i].Encoder.Guid + "\r\n");

       }            
   }

   private ImageCodecInfo GetEncoder(ImageFormat format)
   {
       ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

       foreach (ImageCodecInfo codec in codecs)
       {
          if (codec.FormatID == format.Guid)
          {
               return codec;
          }
       }
       return null;
    }
 }
更新 这一个也崩溃了:

Bitmap bitmap1 = new Bitmap(Image.FromFile(@"C:\temp\0\2.png"));
ImageCodecInfo pngEncoder = GetEncoder(ImageFormat.Png);

编辑:看起来它在.NETFramework上运行得很好,它在.NETCore2.1中作为OP抛出了一个异常


EDIT2:这似乎是一个已知问题,如下所示:

这是.NET Core中的一个错误,正在为.NET Core 5.0解决:请参见。

我猜您尝试加载的图像已损坏,或者不是图像,或者是不支持的格式。根据经验,,NET中的图像加载代码在这种错误处理方面相当短,因此它可能只是试图为一个TB大小的图像构造内存,因为它从文件中获得了非常高的宽度和高度值,并在计算过程中计算出分配溢出总量的内存。@LasseVågsætherKarlsen I尝试了另一个位图,相同的故事位图bitmap1=新位图(Image.FromFile(@“C:\temp\0\2.png”);ImageCodecInfo-jpgEncoder=GetEncoder(ImageFormat.Png)@LasseVågsætherKarlsen不,对于png,我使用了pngdecoder。我不知道它与windows窗体有什么关系,除了从一个问题的标签上,但不管你是在windows窗体上还是在其他任何地方调用该方法。从我的角度来看,似乎只是缺少microsoft针对.net core的最新文档。感谢您的确认,我在corefx repo中创建了错误。您引用的bug与文档相关。但我的示例与代码相关,而不是文档。这种情况不应该发生。我仍然不理解您答案的这一部分:您调用的方法GetSupporterParameters是错误的。这并不是真的错。你可以让所有的方法都是静态的,也可以像我一样。我的方法并不要求所有方法都是静态的。我在Windows10上的.NETFramework4.8(新型WPF项目)中遇到了同样的错误。
Bitmap bitmap1 = new Bitmap(Image.FromFile(@"C:\temp\0\2.png"));
ImageCodecInfo pngEncoder = GetEncoder(ImageFormat.Png);