1

我想通过使用像素位来操纵图像。所以,我想隐藏从 PixelGrabber 抓取的像素。argb 值以字节为单位。现在我想将字节数组转换为位并对其进行操作。然后转换回字节数组。

例如:-1057365 到 11101111 11011101 10101011 11111111 和 11101111 11011101 10101011 11111111 到 -1057365

有人知道有什么有效的方法可以在它们之间进行转换吗?或者java已经为它实现了方法,我不知道。

谢谢帮助。

4

2 回答 2

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;

来源

于 2012-08-23T22:05:52.553 回答
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();

/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();
于 2012-08-23T22:04:29.387 回答