Максимально быстрое заполнение данных в растровом изображении Android из C

Мне удалось создать файл android.graphics.Bitmap и успешно заполнить его с помощью команды SetPixels.

Проблема в том, что я начинаю с данных RGBA. Затем я создаю jintArray. Затем я вызываю SetIntArray (эффективно сохраняя данные в буфере). Затем, наконец, я вызываю setPixels, чтобы на самом деле установить пиксели (что предположительно вызывает еще одну копию).

одна большая проблема с этим заключается в том, что независимо от того, использовал ли я R8G8B8A8, R5G6B5 или A8, мне все равно нужно преобразовать свои пиксельные данные в данные R8G8B8A8.

В идеале я хотел бы иметь способ заполнить буфер, используя только одну копию, и позволить мне сделать это без преобразования формата пикселей.

Есть ли способ напрямую получить данные буфера, содержащиеся в Bitmap? Я вижу, что в JNI есть функция GetDirectBufferAddress, но документация, которую я могу найти по ней, предполагает, что она ограничена java.nio.buffer. Могу ли я напрямую получить данные о пикселях с помощью этой функции? Возможно, за счет использования внутреннего буфера классом Bitmap?

Я могу использовать это только для создания Global Ref'd Java.nio.buffer, а затем каждый раз, когда я хочу обновить, копировать в него свои пиксельные данные, а затем использовать copyPixelsFromBuffer? Это все еще включает 2 копии, но может, по крайней мере, устранить изменение формата пикселей.Будет ли это более эффективным, чем метод, который я уже использую?

Есть ли еще лучший способ сделать это?

Между прочим, я AM знаю, что могу использовать функции из , но мне бы очень не хотелось потерять поддержку Android 2.1 и Android 2.2 ...

Заранее ура!

15
задан Goz 14 October 2011 в 22:19
поделиться