В моем проекте у меня есть растровое изображение. Мне нужно преобразовать это изображение в byteArray, чтобы манипулировать несколькими байтами, а затем сохранить его как изображение.
с этим кодом image = BitmapFactory.decodeResource(context.getResources(), R.drawable.tasnim);
У меня есть доступ к ширине и высоте, но как я могу получить доступ к байтам этого изображения?
Спасибо
Я предполагаю, что 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...
}
AFAIK Самый правильный способ:
ByteBuffer copyToBuffer(Bitmap bitmap){
int size = bitmap.getHeight() * bitmap.getRowBytes();
ByteBuffer buffer = ByteBuffer.allocateDirect(size);
bitmap.copyPixelsToBuffer(buffer);
return buffer;
}