我想通过使用像素位来操纵图像。所以,我想隐藏从 PixelGrabber 抓取的像素。argb 值以字节为单位。现在我想将字节数组转换为位并对其进行操作。然后转换回字节数组。
例如:-1057365 到 11101111 11011101 10101011 11111111 和 11101111 11011101 10101011 11111111 到 -1057365
有人知道有什么有效的方法可以在它们之间进行转换吗?或者java已经为它实现了方法,我不知道。
谢谢帮助。
我想通过使用像素位来操纵图像。所以,我想隐藏从 PixelGrabber 抓取的像素。argb 值以字节为单位。现在我想将字节数组转换为位并对其进行操作。然后转换回字节数组。
例如:-1057365 到 11101111 11011101 10101011 11111111 和 11101111 11011101 10101011 11111111 到 -1057365
有人知道有什么有效的方法可以在它们之间进行转换吗?或者java已经为它实现了方法,我不知道。
谢谢帮助。
我假设您拥有的值是 ARGB 代码的原始 4 字节 int 表示。每个通道都是 1 字节宽,范围从 0 到 254,它们一起构成了 0-255^4(减 1)的整个范围。
获取不同通道值的最佳方法是结合屏蔽并将 argb 值转移到不同的字段中。
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel ) & 0xff;
你可能想看看BitSet
。
byte[] argb = ...
BitSet bits = BitSet.valueOf(argb);
bits.set(0); // sets the 0th bit to true
bits.clear(0); // sets the 0th bit to false
byte[] newArgb = bits.toByteArray();
/edit
将 a 转换byte[]
为int
:
int i = 0;
for(byte b : newArgb) { // you could also omit this loop
i <<= 8; // and do this all on one line
i |= (b & 0xFF); // but it can get kind of messy.
}
或者
ByteBuffer bb = ByteBuffer.allocate(4);
bb.put(newArgb);
int i = bb.getInt();