转换像素颜色(字节到位和位到字节)

时间:2012-08-23 21:57:56

标签: java

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

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

任何人都知道有任何有效的方式在它们之间进行转换吗?或者java有为它实现的方法,我不知道。

帮助你。

2 个答案:

答案 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;

Source

答案 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();