Код для копирования одного растрового изображения в другое выглядит так:
Rect src = new Rect(0, 0, 50, 50);
Rect dst = new Rect(50, 50, 200, 200);
canvas.drawBitmap(originalBitmap, src, dst, null);
Это означает, что вы хотите скопировать верхний левый угол (50x50) растрового изображения, а затем растянуть его в растровое изображение 150x150 и записать его со смещением 50px от верхнего левого угла вашего холста.
Вы можете запустить рисование с помощью invalidate (), но я рекомендую использовать SurfaceView, если вы делаете анимацию. Проблема с инвалидом состоит в том, что он рисует только тогда, когда поток простаивает, поэтому вы не можете использовать его в цикле - он будет рисовать только последний кадр. Вот несколько ссылок на другие вопросы, которые я ответил о графике, они могут быть полезны, чтобы объяснить, что я имею в виду.
В ответ на комментарии вот дополнительная информация:
Если вы получаете Canvas из SurfaceHolder.lockCanvas (), то я не думаю, что вы сможете скопировать оставшиеся в нем данные в растровое изображение. Но это не то, для чего предназначен этот элемент управления - вы используете его только тогда, когда вы все разобрались и готовы рисовать.
То, что вы хотите сделать, это создать холст, который рисует в растровое изображение, используя
Canvas canvas = new Canvas(yourBitmap)
Затем вы можете делать любые преобразования и рисовать операции, которые вы хотите. yourBitmap будет содержать всю новейшую информацию. Тогда Вы используете держатель поверхности следующим образом:
Canvas someOtherCanvas = surfaceHolder.lockCanvas()
someOtherCanvas.drawBitmap(yourBitmap, ....)
Таким образом, у вас всегда есть ваш Bitmap, в котором есть вся информация, которую вы пытаетесь сохранить.