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