Является ли canvas.save/restore или canvas.drawBitmap (Bitmap, Matrix, Paint) лучше? - PullRequest
0 голосов
/ 21 августа 2011

В чем разница между этими двумя фрагментами кода?

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.image)
Matrix m = new Matrix();
m.postRotate(angle, bmp.getWidth()/2, bmp.getHeight()/2);
m.postTranslate(x,y);
canvas.drawBitmap(bmp,m,null);

Или:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.image)
canvas.save();
canvas.rotate(angle, bmp.getWidth()/2, bmp.getHeight()/2);
canvas.drawBitmap(bmp, x, y, null);
canvas.restore();

Есть ли разница в производительности? Стоит ли кэшировать матрицу в варианте 1, если я пытаюсь достичь высокой частоты кадров?

1 Ответ

1 голос
/ 21 августа 2011

Я не уверен, почему вы звоните canvas.save() и canvas.restore() только в одном из примеров, но я провел тесты производительности и покажу:

  • Использование Matrix кажется значительно быстрее (обычно на 30-50%) для загрузки того же изображения.
  • Однако некоторые тесты показывают, что Canvas в конечном итоге было быстрее: после 300 000 тесты - на 4-15%.

Так что, если вам нужно загрузить его несколько раз, используйте Matrix.
Если вам нужно загрузить его сотни тысяч раз - вам лучше использовать только Canvas (или хотя бы повторно использовать тот же экземпляр Matrix).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...