I've never done this.
I'd try to construct a new image of whatever size I am displaying using a clipping region of the original image effectively zooming in on the original image. To zoom in some more, repeat using some clipping region of the new image. To zoom out, either maintain a collection of images and step backwards through them, or use some clipping region from the original image to construct a new image, etc.
For a more sophisticated approach, you might want to see what the group at
Koala Graphics did. They provide an open source, high end, 2D graphics package.
Good Luck.