¿Cómo dibujar parte de una gran imagen almacenada?

Tengo un 10000x10000BufferedImage y estoy mirando para dibujar sólo una parte de ella a unaCanvas, ¿hay una manera de hacer esto usando args como:

x, y, width, height ?

Entonces, por ejemplo, ¿drawImage (img, x, y, width, height) dibujaría un rectángulo de la imagen comenzando en (x, y) y teniendo (width, height) como las dimensiones?

EDITAR:

Voy a repetir esta pregunta:

Tengo una imagen de 10000x10000 y solo quiero mostrar una parte de la misma en la pantalla, el problema con solo compensarla con xey es que esto sigue causando un retraso en el procesamiento de la imagen completa, casi la mayoría fuera del lienzo. ¿Cómo puedo básicamente hacer que toda la imagen se renderice pero puedo desplazarme alrededor sin hacer que el lienzo se retrase?

Respuestas a la pregunta(3)

Su respuesta a la pregunta