Home » U++ Library support » Draw, Display, Images, Bitmaps, Icons » Drawing performance issue
Drawing performance issue [message #43147] |
Mon, 19 May 2014 10:01  |
crydev
Messages: 151 Registered: October 2012 Location: Netherlands
|
Experienced Member |
|
|
Hello,
I am having some trouble with drawing a big amount of lines on a panel. The drawing takes very long. I know this is not strange because the amount of lines is very high, but I was wondering if I could speed it up. Drawing 3 to 12 million lines takes 5 to 20 seconds. The following is the drawing code.
void KochPanel::Paint(Draw& draw)
{
const Size sz = this->GetSize();
const int cx = sz.cx;
const int cy = sz.cy;
draw.DrawRect(0, 0, cx, cy, Black);
if (!kochFractal->IsRunningCalculation())
{
for (int i = 0; i < kochFractal->GetNumberOfEdges(); ++i)
{
const Edge& e = (*kochFractal)[i];
draw.DrawLine((int)e.X1, (int)e.Y1, (int)e.X2, (int)e.Y2, 1, Color::FromRaw(e.Color));
}
}
}
Thanks in advance!
crydev
|
|
|
Re: Drawing performance issue [message #43148 is a reply to message #43147] |
Mon, 19 May 2014 11:47  |
|
Hi crydev,
Here's few tricks that I deployed successfully in past:
- Don't draw anything that is not visible (out of viewport, overlapped by other shapes).
- Don't draw details that can't be visible on screen. Only use high level of detail when you export images or print.
- Use clever algorithms. Sometimes images can be generated much faster going pixel by pixel than using lines and other drawing primitives.
In your particular case with Koch curve, I think the best would be to apply the second optimization. Only use enough iterations so that length of the line is more than one pixel. If you need the data for some subsequent operations, you could also add conditions to only use point when its distance from last drawn point is more than 1 pixel (or 0.5pixel, it might look better).
Best regards,
Honza
|
|
|
Goto Forum:
Current Time: Mon May 12 22:41:15 CEST 2025
Total time taken to generate the page: 0.00326 seconds
|