Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:将图像插入byteArray_Android_Image_Bitmap_Bytearray - Fatal编程技术网

Android 安卓:将图像插入byteArray

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

在我的项目中,我有一个位图图像。我需要将此图片转换为byteArray,以便处理一些字节,然后将其另存为图像

使用此代码image=BitmapFactory.decodeResourcecontext.getResources,R.drawable.tasnim;我可以访问宽度和高度,但如何访问此图像的字节


谢谢

我假设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。任何想法!!