Intereting Posts
Свертывание панели инструментов и вложенного scrollview не прокручивается плавно Скрыть кнопку и показать снова при касании Создание простого экземпляра ExoPlayer Объявление пространства имен Xml: имя пакета автозамены Надежно скрывать программную панель Как ограничить отображение элементов списка в ListView на 10 и последующих 10 после нажатия следующей кнопки Как сохранить работу службы в фоновом режиме даже после выхода пользователя из приложения? Ошибка: не удается открыть файл класса R.java Почему существуют две папки Cordova www? Android: установите флажки check checked Студия Android отключает точки останова Unregistering Android Broadcast Receiver в onReceive выбрасывает «Получатель не зарегистрирован» Можно ли установить System DateTime из моего Android-приложения? Android: View.setID (int id) программно – как избежать конфликтов идентификаторов? Android – масштабирование группы просмотра (макета) во время выполнения

Android, самый быстрый способ рисовать растровое изображение на холст

Просто интересно, какой самый быстрый способ – нарисовать растровое изображение на холсте?

В настоящее время у меня есть растровое изображение (и холст для рисования), который я использую для двойного вызова буфера рисования, а затем, когда я рисую на холст, есть эффект прокрутки, применяя трансляцию холста 1px. Это само по себе уменьшит частоту кадров от 60+ FPS до ~ 40, что вполне достаточно. Im не использует surfaceView (или GLSurfaceView) на данный момент, а просто задается вопросом, не потеряет ли Im что-нибудь, что улучшит скорость. OnDraw () код ниже

@Override public void onDraw(Canvas canvas) { //update fps text mFpsTracker.frameTouch(); if(mBufferedBitmap == null) { mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444); mBufferedCanvas = new Canvas(mBufferedBitmap); } paint.setColor(Color.BLUE); mBufferedCanvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint); mBufferedCanvas.translate(0, -1); canvas.drawBitmap(mBufferedBitmap, 0, 0, null); //draw fps mTextPaint.setColor(Color.WHITE); canvas.drawText(mFpsTracker.getFPSString(), 40, 40, mTextPaint); invalidate(); } 

Solutions Collecting From Web of "Android, самый быстрый способ рисовать растровое изображение на холст"

См. Это сообщение в блоге Ромен Гай.

Здесь доступна видео версия.

Больше не используйте ARGB_4444. Он устарел. Каждому пикселю присваивается только 4 бита на канал (отсюда и название). ARBG_8888 предлагает 16 777 216 цветов вместо ARPG_4444's 4,096, но использует 4 байта на пиксель вместо 2.

В Gingerbread Android сделал ARGB_8888 стандартным форматом для Surface и увеличил выделение памяти для каждого процесса из-за этого.

Более эффективно устанавливать для вашего окна и (при условии, что вы используете обтекаемый SurfaceView ) формат SurfaceHolder для RGBA_8888 . Это позволяет избежать изменений формата, которые заметно медленнее.

Другие советы включают:

  • Ограничьте альфа-композицию, поскольку для этого требуется сравнительно дорогое смешение от Skia.
  • Запросить параметры растрового изображения, которые предпочитают конфигурацию ARGB_8888 и отключить сглаживание.
  • Если возможно, удалите окно.
  • Включите аппаратное ускорение, но будьте осторожны с неподдерживаемыми операциями .

На устройстве 2.1 я могу нарисовать по меньшей мере 300 растровых изображений на экране со скоростью 50 кадров в секунду.

В onSizeChange вы можете изменять размер или создавать растровые изображения в соответствии с размером холста, тогда кадр будет намного быстрее около 60 кадров в секунду, однако использование пользовательского представления в бесконечном цикле замедляет работу некоторых устройств и становится неустойчивым на некоторых устройствах Android, поэтому я не рекомендую его , Вместо этого лучше использовать SurfaceView.

Проверьте этот пример: как я могу использовать рамку анимации внутри холста?

У меня такая же проблема, как у вас, пожалуйста, скажите мне, когда вы нашли что-то новое.

Это то, что я основал до сих пор:

  1. Для версии Android 3 лучше не использовать двойной буфер, потому что вы получаете аппаратное ускорение (нужно установить true в манифесте)
  2. Set paint.setDither (true) будет работать лучше на любом устройстве с другим цветом, чем ARGB_4444, ведь это большинство устройств. Проверьте это для получения дополнительной информации .

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

Это хорошее решение для меня, когда у меня есть подобные проблемы. Попробуйте создать это mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444); В другом месте, где недействительны. Надеюсь, что это поможет вам.

Я думаю, что вы можете получить хорошую производительность из холста. Но это требует много работы.

Если вы начнете с хорошей графической библиотеки производительности, то даже если вы получите много чего не так, вы, вероятно, по-прежнему в конечном итоге получите хорошую производительность 🙂 lol

Есть конкуренция за самую быструю библиотеку рисования … libgdx в настоящее время выигрывает …

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