Я работаю над приложением для Android, которое работает с графическими операциями в собственном коде в буфере общей памяти.Я создал функции для вызова своего собственного кода из Java с использованием JNI, а мой собственный код использует API JNI для вызова Java из собственного кода.Поскольку копирование больших массивов пикселей оказывает значительное влияние на производительность, мне нужно как можно больше этого избегать.
В документации Android для класса Bitmap говорится о двух способах копирования пикселей во внутренний буфер Bitmap: http://developer.android.com/reference/android/graphics/Bitmap.html
setPixels (int [] пиксели, смещение int, шаг int, int x, int y, ширина int, высота int) Заменить пиксели в растровом изображении цветами в массиве.
copyPixelsFromBuffer (Buffer src) Копирует пиксели из буфера, начиная с текущей позиции, перезаписывая пиксели растрового изображения.
Проблема с документацией API заключается в том, что она очень расплывчата в том, что происходит за кулисамиВы используете эти функции.Однако где-то упоминается, что copyPixelsFromBuffer () копирует пиксели напрямую без какого-либо внутреннего преобразования цветового формата, в отличие от setPixels (), который во всех случаях будет выполнять это преобразование, даже если исходные пиксели имеют целевой формат пикселей.Очевидно, что это не то, чего я хочу, поскольку пиксели в моем буфере уже находятся в хорошем формате.
Теперь copyPixelsFromBuffer () выглядит очень хорошо, поскольку не будет выполнять это преобразование, но документация этого не делает.поговорим о том, как скопировать пиксели из буфера в конкретное смещение в целевом растровом изображении.К сожалению, это очень важно, так как я не хочу каждый раз копировать весь буфер, а только область в нем.Да, в документации сказано, что он будет копировать из текущей позиции в исходном буфере , но ничего не сказано о целевом буфере.SetPixels () выполняет ненужное преобразование, но позволяет указать смещение в целевом буфере.
Итак, я застрял между:
Копирование только той области, которую я хочу, за счетс преобразованием пикселей
ИЛИ
Предотвращение преобразования пикселей за счет копирования всего буфера каждый раз
Чтобы получить представление, у меня может быть буфер, представляющий экран 1024x768,с недопустимым регионом, который изменяется от (300 300) до (400 400).
Если я копирую только тот регион, который мне нужно обновить, я могу копировать и конвертировать 100 * 100 пикселей или копировать без преобразования 1024 * 768 пикселей.недопустимая область размером 100x100 мала и только в конкретном случае большинство недопустимых областей будет занимать гораздо большую часть буфера.Оба метода очень негативно влияют на производительность.
Кто-нибудь имеет представление о том, как я мог бы копировать пиксели из моего буфера с определенным смещением в целевом буфере без принудительного преобразования пикселей?Это было бы лучшее из обоих миров, и я не понимаю, почему он не доступен.
Большое спасибо за вашу помощь