views:

648

answers:

0

I try to read an image from sdcard (in emulator) and then create a Bitmap image with the

BitmapFactory.decodeByteArray

method. I set the options:

options.inPrefferedConfig = Bitmap.Config.ARGB_8888
options.inDither = false

Then I extract the pixels into a ByteBuffer.

ByteBuffer buffer = ByteBuffer.allocateDirect(width*height*4)
bitmap.copyPixelsToBuffer(buffer)

I use this ByteBuffer then in the JNI to convert it into RGB format and want to calculate on it.

But always I get false data - I test without modifying the ByteBuffer. Only thing I do is to put it into the native method into JNI. Then cast it into a unsigned char* and convert it back into a ByteBuffer before returning it back to Java.

unsigned char* buffer = (unsinged char*)(env->GetDirectBufferAddress(byteBuffer))
jobject returnByteBuffer = env->NewDirectByteBuffer(buffer, length)

Before displaying the image I get data back with

bitmap.copyPixelsFromBuffer( buffer )

But then it has wrong data in it.

My Question is if this is because the image is internally converted into RGB 565 or what is wrong here?

.....

Have an answer for it:

->>> yes, it is converted internally to RGB565.

Does anybody know how to create such an bitmap image from PNG with ARGB8888 pixel format?

If anybody has an idea, it would be great!