I’m writing a simple painting program. To simulate a pencil drawing, I’ve stored the drawn points in a set, so when the window is resized the points won’t be gone, and whenever another point is added I call the repaint method (the paint method draws all paints in the array on screen). But when the number of points increases, the program runs slowly.
Is there a more efficient method to do this?
I’m writing a simple painting program. To simulate a pencil drawing, I’ve stored the
Share
The fastest way to get constant-speed repainting is to store the entire image that’s drawn as a bitmap, and of course update it when the user draws. This way, you can redraw the right thing, and even add scrollbars and the like if you want. You can keep the array of points for an “undo” feature, for example.
If instead you want to make a vector-drawing program, then you have to keep the individual primitive operations (such as line, rectangles, etc). In that case it still pays off to keep an image for fast repainting, and now the trick becomes how to efficiently update that image when the user modifies the drawing (e.g. by resizing a rectangle). One way to do that is to tile the drawing area into lots of smaller ones, so you only need to recompute the underlying image for the parts that intersect with the object being modified by the user.
In both techniques, you’d use double-buffering just so that the user doesn’t perceive flicker. But with double-buffering alone, the “redraw the whole set of points” would still be slow.