В чем может быть причина ошибки при работе с классом 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 шт):
Если выскакивает иногда и в основном на больших изображениях то предположу такой ответ.
Ответ отсюда.
Имейте в виду, что это LOT памяти, которую вы пытаетесь выделить с помощью этого Bitmap.
См . http://social.msdn.microsoft.com/Форумы/en-US/netfxbcl/thread/37684999-62c7-4c41-8167-745a2b486583/
.NET, скорее всего, откажется создавать образ, который одновременно использует столько непрерывной памяти.
Немного сложнее читать, но эта ссылка также помогает:
Каждый образ в системе имеет объем памяти, определяемый этой формулой: bit-depth * width * height / 8 Это означает, что для изображения размером 40800 пикселей на 4050 потребуется более 660 мегабайт памяти.