В чем может быть причина ошибки при работе с классом Graphics

Есть следующий код:

try
        {
            var bitmap = new Bitmap(Image.FromFile(image_name));
            if (_token.IsCancellationRequested)
                return;
            YoloV4Prediction predict;
            lock (_predictionEngine)
            {
                predict = _predictionEngine.Predict(new YoloV4BitmapData() { Image = bitmap });
            }
            if (_token.IsCancellationRequested)
                return;
            _handleOneAB = new ActionBlock<YoloV4Result>((res) => {
                //Записать результат, если нужно
                var x1 = res.BBox[0];
                var y1 = res.BBox[1];
                var x2 = res.BBox[2];
                var y2 = res.BBox[3];
                lock (bitmap)
                {
                    using (var g = Graphics.FromImage(bitmap))
                    {
                        g.DrawRectangle(Pens.Red, x1, y1, x2 - x1, y2 - y1);
                        using (var brushes = new SolidBrush(Color.FromArgb(50, Color.Red)))
                        {
                            g.FillRectangle(brushes, x1, y1, x2 - x1, y2 - y1);
                        }
                        g.DrawString(res.Label + " " + res.Confidence.ToString("0.00"),
                                             new Font("Arial", 12), Brushes.Blue, new PointF(x1, y1));
                    }
                    try
                    {
                        bitmap.Save(image_name + "WithRectangles.jpg");
                    }
                    catch
                    {

                    }
                }
                //Вывести результат на экран:
                UI.OutputFunc(res, image_name);
            }, new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = Environment.ProcessorCount
            });

В силу непонятных причин иногда выскакивает ошибка "parameter is not valid" при вызове конструктора класса Graphics. В чем может быть ошибка? Что интересно, на одном ноутбуке ошибок нет никогда, а на другом - иногда бывает


Ответы (1 шт):

Автор решения: Aziz Umarov

Если выскакивает иногда и в основном на больших изображениях то предположу такой ответ.

Ответ отсюда.

Имейте в виду, что это LOT памяти, которую вы пытаетесь выделить с помощью этого Bitmap.

См . http://social.msdn.microsoft.com/Форумы/en-US/netfxbcl/thread/37684999-62c7-4c41-8167-745a2b486583/

.NET, скорее всего, откажется создавать образ, который одновременно использует столько непрерывной памяти.

Немного сложнее читать, но эта ссылка также помогает:

http://www.tech-archive.net/Архив/DotNet/microsoft.public.dotnet.framework.drawing/2005-06/msg00176.html

Каждый образ в системе имеет объем памяти, определяемый этой формулой: bit-depth * width * height / 8 Это означает, что для изображения размером 40800 пикселей на 4050 потребуется более 660 мегабайт памяти.

→ Ссылка