Как оптимизировать рисование на холсте - drawBitmap на Android? - PullRequest
6 голосов
/ 02 декабря 2010

Я выполнил свое профилирование, и, похоже, большая часть моего времени уходит на drawBitmap, который вызывается (с пониманием) для каждого кадра.

Я использую SurfaceView / обновляю подход к блокировке потока / холста, как показано в примере LunarLander.Но я изменил его (в соответствии с этим вопросом ), чтобы

  • в самом первом кадре создать буфер растрового изображения и рисовать на нем
  • рисовать каждыйв последующем кадре повторное использование этого растрового изображения (не все на моем экране изменяется)
  • в конце каждого кадра рисует буфер один раз в целевой холст (на экран)

Traceview показал мнечто этот drawBitmap занимает 5 мс для каждого кадра на моем устройстве 800x480.Могу ли я получить что-то лучше, чем это, или это просто что-то «высеченное в камне», и мне просто нужно оптимизировать другие части кода для получения хороших кадров в секунду?

Ответы [ 2 ]

10 голосов
/ 02 декабря 2010

Это зависит от многих вещей, но обычно drawBitmap () будет настолько быстрым, насколько это возможно.В вашем конкретном случае, если вам не нужно смешивать, убедитесь, что вы используете непрозрачное растровое изображение.Кроме того, попробуйте использовать растровое изображение в формате, совместимом с вашей поверхностью.Например, если вы используете 16-битную поверхность, рисование 16-битной (RGB565) битовой карты будет очень быстрым (это просто вызов memcpy.) Если ваша поверхность 32-битная, используйте непрозрачную битовую карту ARGB8888.

0 голосов
/ 11 апреля 2013

проводится конкурс на самую быструю библиотеку чертежей ... libgdx в настоящее время побеждает ... примеры приложений также используют 800x480, как и вы.

http://code.google.com/p/libgdx/wiki/SimpleApp#Project_Setup

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