我正在使用Java处理视频数据,并希望在32位Integer中存储四个8位整数。换句话说,我想将0到255之间的R,G,B和A值打包为一个32位整数。
我该怎么办:
要创建0到255之间的4个整数值并将它们存储在32位整数中?
要从32位整数解压缩4个8位整数值吗?
谢谢!
答案 0 :(得分:0)
很简单。使用Color
类。
- 要创建0到255之间的4个整数值并将它们存储在32位整数中?
使用Color(int, int, int, int)
构造函数和getRGB
方法。
- 要从32位整数解压缩4个8位整数值吗?
使用Color(int)
构造函数和方法getRed
,getGreen
,getBlue
和getAlpha
。
答案 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();
}