Acesso a dados brutos no bitmap ARGB_8888 para Android

Estou tentando acessar os dados brutos de um Bitmap no formato ARGB_8888 no Android, usando ocopyPixelsToBuffer ecopyPixelsFromBuffer métodos. No entanto, a chamada dessas chamadas parece sempre aplicar o canal alfa aos canais rgb. Preciso dos dados brutos em um byte [] ou similar (para passar pela JNI; sim, eu sei sobre o bitmap.h no Android 2.2, não posso usá-lo).

Aqui está uma amostra:

    // Create 1x1 Bitmap with alpha channel, 8 bits per channel
    Bitmap one = Bitmap.createBitmap(1,1,Bitmap.Config.ARGB_8888);
    one.setPixel(0,0,0xef234567);
    Log.v("?","hasAlpha() = "+Boolean.toString(one.hasAlpha()));
    Log.v("?","pixel before = "+Integer.toHexString(one.getPixel(0,0)));

    // Copy Bitmap to buffer
    byte[] store = new byte[4];
    ByteBuffer buffer  = ByteBuffer.wrap(store);
    one.copyPixelsToBuffer(buffer);

    // Change value of the pixel
    int value=buffer.getInt(0);
    Log.v("?", "value before = "+Integer.toHexString(value));
    value = (value >> 8) | 0xffffff00;
    buffer.putInt(0, value);
    value=buffer.getInt(0);
    Log.v("?", "value after = "+Integer.toHexString(value));

    // Copy buffer back to Bitmap
    buffer.position(0);
    one.copyPixelsFromBuffer(buffer);
    Log.v("?","pixel after = "+Integer.toHexString(one.getPixel(0,0)));

O log mostra

hasAlpha() = true
pixel before = ef234567
value before = 214161ef
value after = ffffff61
pixel after = 619e9e9e

Eu entendo que a ordem dos canais argb é diferente; isso é bom. Mas não quero que o canal alfa seja aplicado a todas as cópias (que é o que parece estar fazendo).

É assim quecopyPixelsToBuffer ecopyPixelsFromBuffer deveria funcionar? Existequalquer maneira de obter os dados brutos em um byte []?

Adicionado em resposta à resposta abaixo:

Colocandobuffer.order(ByteOrder.nativeOrder()); antes de ocopyPixelsToBuffer muda o resultado, mas ainda não da maneira que eu quero:

pixel before = ef234567
value before = ef614121
value after = ffffff41
pixel after = ff41ffff

Parece sofrer essencialmente do mesmo problema (o alfa é aplicado a cadacopyPixelsFrom/ToBuffer)

questionAnswers(4)

yourAnswerToTheQuestion