Java初学者:将图像转换为二进制数组

时间:2011-01-22 19:44:12

标签: java image-processing binary rgb

这就是我到目前为止所做的事情,我似乎无法继续前进,因为我不理解RGB上的按位操作

// Read from a file
File file = new File("src/a.gif");
image = ImageO.read(file);
int[] rgbarr = image.getRGB(0, 0, 13, 15, null, 0, 13);// image is 13*15 
System.out.println(rgbarr.length);
for (int i : rgbarr)
    {
        System.out.println(i);
    }
  

输出:是-16777216和-1之类的值因为我已经制作了黑白图像以便于理解

但在我们的例子中,我们假设它只是随机图像,我如何从普通RGB图像到每个像素的二进制值(0或1)。

3 个答案:

答案 0 :(得分:2)

我打赌数组中的每个int都是打包的ARGB值;

boolean [] output = new boolean[rgbarr.length];
for ( int i=0; i<rgbarr.length; ++i ) {
  int a = (rgbarr[i] >> 24 ) & 0x0FF;
  int r = (rgbarr[i] >> 16 ) & 0x0FF;
  int g = (rgbarr[i] >> 8  ) & 0x0FF;
  int b = (rgbarr[i]       ) & 0x0FF;
  output[i] = (0.30*r + 0.59*g + 0.11*b) > 127;
}

我选择的输出方程取自维基百科的Luminance定义。只要系数加起来为1,就可以更改比例。

答案 1 :(得分:1)

你可以做这样的事情,

BufferedImage img = (BufferedImage) image;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img , "jpg", baos);
byte[] previewByte = baos.toByteArray();

希望这会有所帮助!!

答案 2 :(得分:0)

你已经在int []中有RGB值,即每个像素的颜色。您可以将其与特定背景颜色(如黑色)进行比较,以获得1位像素值。然后可能在另一个适当大小的byte []数组中设置一个位......