System.OverflowException: 'Арифметическая операция привела к переполнению.' - PullRequest
0 голосов
/ 01 ноября 2018

Я создал консольное приложение .NET Core и добавил ссылку на System.Drawing.Common nuget. Я пытаюсь запустить следующий код из ms docs , но он не работает на 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;
    }
 }

StackTrace:

at System.Drawing.Imaging.EncoderParameters.ConvertFromMemory(IntPtr memory)
at System.Drawing.Image.GetEncoderParameterList(Guid encoder)
at ConsoleApp16.Program.GetSupportedParameters() in Program.cs:line 19
at ConsoleApp16.Program.Main(String[] args)
in Program.cs:line 13

UPDATE Этот также падает:

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

Ответы [ 2 ]

0 голосов
/ 09 августа 2019

Это ошибка в .NET Core, и она решается для .NET Core 5.0: см. https://github.com/dotnet/corefx/pull/40181.

0 голосов
/ 01 ноября 2018

РЕДАКТИРОВАТЬ: похоже, что он работает нормально на .NET Framework и выдает исключение в качестве OP с .NET Core 2.1.

EDIT2: похоже, это известная проблема, перечисленная здесь: https://github.com/dotnet/docs/issues/5607

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...