2

我想在不创建新的位图实例的情况下替换位图的像素。是否可以在不创建新的位图实例的情况下更改提供给本机方法的位图的 void * 像素?

4

1 回答 1

2

根据 Android NDK r8b 文档(“稳定 API”部分),您可以将位图传递给 NDK 层并从那里处理其像素:

'jnigraphics' 库:

这是一个微型库,它公开了一个稳定的、基于 C 的接口,允许本地代码可靠地访问 Java 位图对象的像素缓冲区。

要使用它,请在源代码中包含标头,并链接到 jnigraphics 库,如下所示:

LOCAL_LDLIBS += -ljnigraphics

有关详细信息,请阅读以下位置的源标题:

build/platforms/android-8/arch-arm/usr/include/android/bitmap.h

简而言之,典型用法应如下所示:

1/ Use AndroidBitmap_getInfo() to retrieve information about a
   given bitmap handle from JNI (e.g. its width/height/pixel format)

2/ Use AndroidBitmap_lockPixels() to lock the pixel buffer and
   retrieve a pointer to it. This ensures the pixels will not move
   until AndroidBitmap_unlockPixels() is called.

3/ Modify the pixel buffer, according to its pixel format, width,
   stride, etc.., in native code.

4/ Call AndroidBitmap_unlockPixels() to unlock the buffer.
于 2012-11-23T09:32:29.503 回答