Android: разница между canvas.drawBitmap и BitmapDrawable.draw? - PullRequest
9 голосов
/ 13 июля 2011

Когда я хочу нарисовать BitmapDrawable на Canvas в Android, есть две возможности, которые делают то же самое, и я не знаю, какую из них выбрать:

  1. Использование canvas.drawBitmap () и извлечение растрового изображения из объекта рисования с использованием getBitmap ()

  2. Используя drawable.draw (canvas), передавая холст в качестве аргумента для drawable.

Сейчас я использую первый вариант, но он кажется совершенно произвольным, поскольку я не вижу никакой разницы.

Спасибо за ваши ответы

1 Ответ

10 голосов
/ 13 июля 2011

Никогда не делайте вариант № 1 так, как вы это делаете. Вместо того, чтобы создавать растровое изображение из прорисовки каждый раз, когда вы хотите нарисовать его, сначала создайте растровое изображение. То есть не создавайте Drawable, если вы собираетесь рисовать растровое изображение. Создайте растровое изображение так:

mBitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.myImage);
mBitmap = Bitmap.createScaledBitmap(mBitmap, width, height, true);

И это то, что вы делаете только один раз. После этого просто нарисуйте, как вы (canvas.drawbitmap ()).

Что касается варианта №2, вы делаете это правильно.

Теперь есть некоторые различия. Вариант 1 быстрее рисовать и обычно хорош для фоновых изображений. Существенное изменение FPS зависит от того, рисуете вы растровое изображение или рисуете Растровые изображения быстрее.

Вариант 2 - это путь, если вам нужны такие вещи, как масштабирование, перемещение и другие виды манипуляций с изображением. Не так быстро, но другого выбора нет, если вы хотите сделать что-то из перечисленного.

Надеюсь, это поможет!

...