从 C 中尽快填充 Android 位图中的数据
我已经设法创建了一个android.graphics.Bitmap,并且我通过SetPixels命令成功填充了它。
问题是我从RGBA数据开始。然后,我创建了一个 jintArray。然后,我调用 SetIntArray(有效地将数据导入缓冲区)。然后,最后,我调用setPixels来实际设置像素(这可能会导致另一个副本)。
这样做的一个大问题是,无论我使用R8G8B8A8还是R5G6B5或A8,我仍然必须将我的像素数据转换为R8G8B8A8数据。
理想情况下,我想要一种方法来仅使用一个副本填充缓冲区,并允许我在不进行像素格式转换的情况下执行此操作。
有没有办法直接获取位图中包含的缓冲区数据?我看到JNI中有一个函数GetDirectBufferAddress,但我能找到的文档表明它仅限于java.nio.buffer。我可以使用此功能直接获取像素数据吗?也许通过获取位图类使用的内部缓冲区?
我使用它来创建全局 Ref'd Java.nio.buffer 的唯一方法是否是每次我想更新时,将我的像素数据复制到其中,然后使用 copyPixelsFromBuffer?这仍然涉及2个副本,但至少可以消除像素格式更改。这会比我已经使用的方法更有效吗?
有没有更好的方法来做到这一点?
顺便说一句,我知道我可以使用<android / bitmap.h中的功能>但我真的希望不要失去对Android 2.1和Android 2.2的支持...
提前干杯!