将32位整数拆分为4个8位整数

时间:2019-05-19 17:54:25

标签: java video video-processing

我正在使用Java处理视频数据,并希望在32位Integer中存储四个8位整数。换句话说,我想将0到255之间的R,G,B和A值打包为一个32位整数。

我该怎么办:

  1. 要创建0到255之间的4个整数值并将它们存储在32位整数中?

  2. 要从32位整数解压缩4个8位整数值吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

很简单。使用Color类。

  
      
  1. 要创建0到255之间的4个整数值并将它们存储在32位整数中?
  2.   

使用Color(int, int, int, int)构造函数和getRGB方法。

  
      
  1. 要从32位整数解压缩4个8位整数值吗?
  2.   

使用Color(int)构造函数和方法getRedgetGreengetBluegetAlpha

链接: Documentation of the java.awt.Color class

答案 1 :(得分:0)

包装:

int rgba = (a << 24) | (b << 16) | (g << 8) | r;

<<是左移运算符; |是按位或运算符。

拆箱:

int r = rgba & 0xff;
int g = (rgba >> 8) & 0xff;
int b = (rgba >> 16) & 0xff;
int a = (rgba >> 24) & 0xff;

>>是(符号*)右移运算符; &是按位和运算符。

很显然,您可以按照需要的任何顺序打包/拆包。


(*)您可以在此处使用有符号或无符号(>>>)右移。在这种情况下,结果没有任何区别。

答案 2 :(得分:0)

您可以使用以下基于ByteBuffer的实用程序:

    int transformToInt(byte[] array) {
        return ByteBuffer.wrap(array).order(ByteOrder.BIG_ENDIAN).getInt();
    }

    byte[] transformToBytes(int value) {
        return ByteBuffer.allocate(4).putInt(value).array();
    }