Different ways to implement zoom on canvas?

I have an array of objects that draw themselves on a canvas. I’m wondering about different ways to implement zoom on that canvas.

As you need double-buffering for Windows anyway, and printing is easy if you use a bufferPicture, an obvious way is to create a larger picture, draw at the bigger size, and paint a part of that on the canvas. However the downside of that is that you run into size constraints for your bufferPicture fairly soon.

There are ways around it (eg limit the bufferPicture to the size required by the canvas, use a second bufferPicture for printing and/or previewing) but are there any more elegant ways of doing this? Seems all a bit pedestrian …

I wouldn’t change the buffer picture, I would just select a smaller area and draw it bigger into the canvas.

g.scaleX and g.scaleY?