Я знаю, что GDI + немного устарел, но в настоящее время я вынужден использовать его в приложении WinForms для рисования сложных моделей типов CAD.
Я столкнулся с той же проблемой, что и: Почему моему методу рисования c # не хватает памяти? , как описано в принятом в настоящее время ответе (https://stackoverflow.com/a/7501899/9300908), а также в некоторых комментариях. Я обеспечил удаление моих кистей, ручек и шрифтова также растровые изображения и другие объекты gdi. Я рисую от 10 до 100 тысяч дуг с помощью функции DrawArc()
, и одна и та же дуга (1,13 градуса) каждый раз доставляет мне неприятности. Я подозреваю, что столкнулся с маленькой дугойошибка.
Я планирую просто нарисовать линию вместо дуги, когда условия превышают определенный порог, но я пытаюсь определить порог. Я пытаюсь найти хороший источник длякакой размер слишком мал (я вижу ссылки на <1 градус, <2 пикселя, <3,5 градуса), так что мне не нужно полагаться на обработчик исключений, особенно когда имеешь дело с подобнымиy маленькие дуги. </p>
Ссылочный ответ, а также комментарии относятся к ряду статей Microsoft Connect, которые недоступны в настоящее время после выхода Microsoft Connect на пенсию. Кажется, у меня нет волшебного соуса, чтобы найти его в сообществе разработчиков визуальных студий, где я думал, что его можно перенести. У кого-нибудь есть какие-либо справочные материалы по ошибке в DrawArc или, возможно, альтернативный обходной путь?
Соедините ссылки:
Упоминается в msdn относительно DrawPath:
Другие форумы, которые я нашел, указывают нассылка вопрос .
Обновление
Среда - x64, .NET 4.5.2
1.13 - SweepAngle (действующие значения см. ниже). Это и startAngle оба являются родными числами с плавающей точкой.
Я могу воссоздать исключение с этим примером кода из нового приложения WinForms.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// g is a graphics object created from a 1920W x 1080H Bitmap:
using (Bitmap mBitmapModel = new Bitmap(1920, 1080))
{
using (Graphics g = Graphics.FromImage(mBitmapModel))
{
float lStartAngle = -0.00816029962F;
float lSweepAngle = 1.13203466F;
RectangleF lRect = new RectangleF(742.741333F, 157.927505F, 3.28945208F, 3.28945208F);
using (Pen lPen = new Pen(Color.Blue, 2F))
{
g.DrawArc(lPen, lRect, lStartAngle, lSweepAngle);
}
}
}
}
}