Такого изящного копирования не знаю. Знаю такой: рисуешь всё не в графикс канваса, а в графикс рисунка.
Создаём картинку и задаём координаты начальной точки, откуда копировать:
int grabX = 20;
int grabY = 50;
int width = 100;
int height = 100;
boolean needGrab = false;
Image image = Image.createImage(width, height);
При установленном флаге needGrab подменяем графикс канваса на графикс рисунка, и делаем сдвиг, чтоб в точку (0,0) рисунка отобразилась точка (grabX, grabY) канваса.
Флаг можно устанавливать по нажатию кнопки или по какому тебе надо условию.
А вот кусок функции рисования канваса:
protected void paint(Graphics g)
{
if(needGrab == true)
{
g = image.getGraphics();
g.translate(-grabX, -grabY);
needGrab = false; //одну отрисовку копируем и всё
}
//здесь идёт всё что есть по части рисования на канвасе
}
Ну и всё. После прохода с трюшным флагом в рисунок скопируется прамоугольная область канваса {grabX,grabY,width,height}.