我想通过播放像素位来操纵图像。所以,我想要隐藏我从PixelGrabber抓取的像素。 argb值以字节为单位。现在我想将字节数组转换为位并进行操作。然后转换回bytes数组。
例如: -1057365进11101111 11011101 10101011 11111111和 11101111 11011101 10101011 11111111进-1057365
任何人都知道有任何有效的方式在它们之间进行转换吗?或者java有为它实现的方法,我不知道。
帮助你。
答案 0 :(得分:4)
我假设你拥有的值是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;
答案 1 :(得分:0)
您可能需要查看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();
/编辑
要将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();