Android: преобразование изображения в byteArray

1

В моем проекте у меня есть растровое изображение. Мне нужно преобразовать это изображение в byteArray, чтобы манипулировать несколькими байтами, а затем сохранить его как изображение.

с этим кодом image = BitmapFactory.decodeResource(context.getResources(), R.drawable.tasnim); У меня есть доступ к ширине и высоте, но как я могу получить доступ к байтам этого изображения?

Спасибо

Теги:
image
bitmap
bytearray

2 ответа

2
Лучший ответ

Я предполагаю, что OP хочет управлять пикселями, а не информацией заголовка изображения...

Предполагая, что ваш image является Bitmap

int w = image.getWidth(), h = image.getHeight();
int[] rgbStream = new int[w * h];
image.getPixels(rgbStream, 0, w, 0, 0, w, h);

Конечно, это дает вам значения Pixel как целые числа... Но вы всегда можете их преобразовать снова.

    int t = w * h;

    for (int i = 0; i < t; i++) {
        pixel = rgbStream[i];  //get pixel value (ARGB)
        int A = (pixel >> 24) & 0xFF; //Isolate Alpha value...
        int R = (pixel >> 16) & 0xFF; //Isolate Red Channel value...
        int G = (pixel >> 8) & 0xFF; //Isolate Green Channel value...
        int B = pixel & 0xFF; //Isolate Blue Channel value...
                       //NOTE, A,R,G,B can be cast as bytes...


    }
  • 0
    Спасибо, классно, но у меня есть вопрос. Я думаю, что в растровых изображениях каждый пиксель включает 3 байта для R, G и B. Итак, я должен написать int [w * h * 3] вместо int [w * h] во второй строке?
  • 0
    о, я думаю, что каждое целое число включает 4 байта, поэтому не нужно * 3. исправить?
Показать ещё 1 комментарий
3

AFAIK Самый правильный способ:

ByteBuffer copyToBuffer(Bitmap bitmap){
    int size = bitmap.getHeight() * bitmap.getRowBytes();
    ByteBuffer buffer = ByteBuffer.allocateDirect(size);
    bitmap.copyPixelsToBuffer(buffer);
    return buffer;
}
  • 0
    ByteBuffer buffer = ByteBuffer.allocateDirect (size); дает OutOfMemoryException. Есть идеи!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню