Не глядя ни на что другое, вам понадобятся 2 перевода: один до, чтобы переместить точку мыши на (0,0), и один после, чтобы переместить (0,0) (теперь с увеличенным изображением) туда, где мышь была.
Я предполагаю, что вам нужно выполнять canvas.context.restore ()
после каждой перерисовки, если вы сохраняете уровень масштабирования.