Ответ 1
Код для копирования одного растрового изображения в другой выглядит следующим образом:
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, если вы делаете анимацию. Проблема с invalidate заключается в том, что она только рисует, как только поток простаивает, поэтому вы не можете использовать его в цикле - он будет рисовать только последний кадр. Вот некоторые ссылки на другие вопросы, которые я ответил о графике, они могут быть полезны, чтобы объяснить, что я имею в виду.
- Как нарисовать прямоугольник (пустой или заполненный и несколько других опций)
- Как создать пользовательский SurfaceView для анимации
- Ссылки на код для приложения со случайно отскакивающими шарами на экране, включая также сенсорное управление
- Дополнительная информация о SurfaceView и Invalidate()
- Некоторые трудности с рутинным вращением
В ответ на комментарии, вот дополнительная информация: Если вы получаете Canvas из SurfaceHolder.lockCanvas(), то я не думаю, что вы можете скопировать остаточные данные, которые были в нем, в растровое изображение. Но это не то, для чего этот контроль - вы используете, а не когда вы все разобрали, и вы готовы рисовать.
Что вы хотите сделать, это создать холст, который рисует растровое изображение, используя
Canvas canvas = new Canvas(yourBitmap)
Затем вы можете делать любые преобразования и чертежи, которые вы хотите. yourBitmap будет содержать всю новейшую информацию. Затем вы используете держатель поверхности следующим образом:
Canvas someOtherCanvas = surfaceHolder.lockCanvas()
someOtherCanvas.drawBitmap(yourBitmap, ....)
Таким образом, у вас всегда есть yourBitmap, который имеет любую информацию, которую вы пытаетесь сохранить.