Android 安卓:将图像插入byteArray
在我的项目中,我有一个位图图像。我需要将此图片转换为byteArray,以便处理一些字节,然后将其另存为图像 使用此代码image=BitmapFactory.decodeResourcecontext.getResources,R.drawable.tasnim;我可以访问宽度和高度,但如何访问此图像的字节Android 安卓:将图像插入byteArray,android,image,bitmap,bytearray,Android,Image,Bitmap,Bytearray,在我的项目中,我有一个位图图像。我需要将此图片转换为byteArray,以便处理一些字节,然后将其另存为图像 使用此代码image=BitmapFactory.decodeResourcecontext.getResources,R.drawable.tasnim;我可以访问宽度和高度,但如何访问此图像的字节 谢谢我假设OP想要操纵像素,而不是图像的标题信息 假设您的图像是位图 当然,这会将像素值转换为整数…但您始终可以再次转换它们 int t = w * h; for (in
谢谢我假设OP想要操纵像素,而不是图像的标题信息 假设您的图像是位图 当然,这会将像素值转换为整数…但您始终可以再次转换它们
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...
}
我假设OP想要操纵像素,而不是图像的标题信息 假设您的图像是位图 当然,这会将像素值转换为整数…但您始终可以再次转换它们
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...
}
最正确的方法是:
ByteBuffer copyToBuffer(Bitmap bitmap){
int size = bitmap.getHeight() * bitmap.getRowBytes();
ByteBuffer buffer = ByteBuffer.allocateDirect(size);
bitmap.copyPixelsToBuffer(buffer);
return buffer;
}
最正确的方法是:
ByteBuffer copyToBuffer(Bitmap bitmap){
int size = bitmap.getHeight() * bitmap.getRowBytes();
ByteBuffer buffer = ByteBuffer.allocateDirect(size);
bitmap.copyPixelsToBuffer(buffer);
return buffer;
}
谢谢,不过我有个问题。我认为在位图图像中,每个像素包含3个字节,分别代表R、G和B。那么,我应该在第二行中写入int[w*h*3]而不是int[w*h]吗?哦,我认为每个整数包含4个字节,所以不需要*3。正确吗?不,请看像素值完全存储在一个整数中…因此ARGB每个1字节x4都存储为一个整数4字节…因此每个整数都是一个完整的像素,而不仅仅是a、R、G、B…您需要逐位操作来提取/隔离它们:我将添加一个编辑,以防万一,以帮助您…谢谢酷的st0le,但我有一个问题。我认为在位图图像中,每个像素包含3个字节,分别代表R、G和B。那么,我应该在第二行中写入int[w*h*3]而不是int[w*h]吗?哦,我认为每个整数包含4个字节,所以不需要*3。正确吗?不,请看像素值完全存储在一个整数中…因此ARGB每个1字节x4都存储为一个整数4字节…因此每个整数都是一个完整的像素,而不仅仅是a、R、G、B…您需要逐位操作来提取/隔离它们:我将添加一个编辑,以防万一,以帮助您…ByteBuffer buffer=ByteBuffer.allocateDirectsize;给出OutOfMemoryException。任何想法!!ByteBuffer缓冲区=ByteBuffer.allocateDirectsize;给出OutOfMemoryException。任何想法!!