Java - 将byte []转换为int [] rgb

时间:2014-03-26 05:49:32

标签: java arrays converter

我有一个使用RobotPeer.getRGBPixels()获得的int数组。我将它转换为字节数组,通过使用:

将其发送到套接字
 public static byte[] toByteArray(int[] ints){
    byte[] bytes = new byte[ints.length * 4];
            for (int i = 0; i < ints.length; i++) {
        bytes[i * 4] = (byte) (ints[i] & 0xFF);
        bytes[i * 4 + 1] = (byte) ((ints[i] & 0xFF00) >> 8);
        bytes[i * 4 + 2] = (byte) ((ints[i] & 0xFF0000) >> 16);
        bytes[i * 4 + 3] = (byte) ((ints[i] & 0xFF000000) >> 24);
    }
    return bytes;
}

问题是: 我用这个方法:

public static int[] toIntArray(byte buf[]) {
    int intArr[] = new int[buf.length / 4];
    int offset = 0;
    for (int i = 0; i < intArr.length; i++) {
        intArr[i] = (buf[3 + offset] & 0xFF) | ((buf[2 + offset] & 0xFF) << 8)
                | ((buf[1 + offset] & 0xFF) << 16) | ((buf[0 + offset] & 0xFF) << 24);
        offset += 4;
    }
    return intArr;
}

获取int数组。然后我从它创建BufferedImage,我得到: https://www.dropbox.com/s/p754u3tnivigu70/test.jpeg

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

不要打扰位移等; Java有ByteBuffer可以为你处理,以及endianness to boot:

public static int[] toIntArray(byte buf[]) 
{
    final ByteBuffer buffer = ByteBuffer.wrap(buf)
        .order(ByteOrder.LITTLE_ENDIAN);
    final int[] ret = new int[buf.length / 4];
    buffer.asIntBuffer().put(ret);
    return ret;
}

同样,反过来说:

public static byte[] toByteArray(int[] ints)
{
    final ByteBuffer buf = ByteBuffer.allocate(ints.length * 4)
        .order(ByteOrder.LITTLE_ENDIAN);
    buf.asIntBuffer().put(ints);
    return buf.array();
}

不要忘记在你的情况下指定字节顺序,因为默认情况下ByteBuffer是大端。