Android передает растровое изображение в Native в версии 2.1 и ниже - PullRequest
5 голосов
/ 12 января 2011

Очень просто получить растровые данные в NDK при работе с Android 2.2, но с версией 2.1 и ниже функция AndroidBitmap_lockPixels недоступна.Я искал последние несколько часов, но ничего не помогло.

Как я могу получить доступ к пиксельным данным растрового изображения без использования этой функции?

Ответы [ 3 ]

1 голос
/ 18 января 2011

Создайте IntBuffer в вашем Java-коде и передайте массив вашей собственной библиотеке:

// this is called from native code
buffer = IntBuffer.allocate(width*height);
return buffer.array();

Используйте GetIntArrayElements для получения jint * и записи в массив:

jint * arr = env->GetIntArrayElements((jintArray)bufferArray, NULL);

Запись в массив, а когда закончите, отпустите:

env->ReleaseIntArrayElements((jintArray)bufferArray, arr, 0);

Сообщите Java-коду, что массив обновлен, и используйте Canvas.drawBitmap (), чтобы нарисовать IntBuffer:

canvas.drawBitmap(buffer.array(), ....);

Чтобы нарисовать растровое изображение, инициализируйте холст с помощью растрового изображения

... new Canvas(bitmap)
1 голос
/ 26 апреля 2011

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

Рендеринг Android на живые обои

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

1 голос
/ 14 января 2011

Создание пустого растрового изображения с размерами исходного изображения и форматом ARGB_8888:

int width =  src.getWidth();
int height = src.getHeight();
Bitmap dest = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

Копирование пикселей из исходного растрового изображения в массив int:

int[] pixels = new int[width * height];
src.getPixels(pixels, 0, width, 0, 0, width, height);

И установка этих пикселей в целевое растровое изображение:

dest.setPixels(pixels, 0, width, 0, 0, width, height);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...