2012-02-28 71 views
0

如何判断我生成的二进制图像是0索引还是1索引?Java - 二进制图像像素索引

我制作了一个程序,它读入图像,生成二进制图像并在图像上执行一些其他功能。但是,我想知道如何判断二进制映像中的像素值是哪个“索引”?

这是如何完成的?

是否有一个简单的内置函数(例如image.getRGB();,可以调用它来确定这个函数)?

+0

什么是'二值图像'?你使用的是什么类或数据结构? – 2012-02-28 15:42:07

+0

二进制像纯黑色和白色图像中的像素是黑色或白色。 – MusTheDataGuy 2012-02-28 15:43:29

+0

当你“读入图像”时,它是如何存储的?这应该回答你的问题:“是否有一个简单的内置函数(如image.getRGB();例如)”。一旦你把它分类出来,手动创建一个小图像,将其中一个像素设置为黑色,其余的设置为白色,并且可以非常快速地确定如何设置索引,例如通过打印索引和值。 – YXD 2012-02-28 15:48:15

回答

2

我不知道你的意思是0或1索引,但这里有一些事实。

BufferedImage是一个通用的形象,所以在像素起始坐标为(0,0)

如果你想要一个阵列上下工夫,从这个图片的到来,左上角会在索引0(除非另有规定)

image.getRGB(0, 0, image.getWidth(), image.getHeight(), array, 0, image.getWidth());

BufferedImage不支持1个BPP图像本身,但无论哪种经由盒装模式用的ColorModel,或2-索引调色板。如果没有例子,我无法分辨出你有哪一个。

无论内部格式如何,不同的getRGB()方法应该总是每个像素返回一个值,每个值返回一个像素。请注意,全不透明度值(0xFF000000,-16777216)也将包含在结果中。

例如。

BufferedImage image = new BufferedImage(16, 16, BufferedImage.TYPE_BYTE_BINARY); 

    image.setRGB(0, 0, 0xFFFFFFFF); 
    image.setRGB(1, 0, 0xFF000000); 
    image.setRGB(0, 1, 0xFF000000); 
    image.setRGB(1, 1, 0xFFFFFFFF); 

    System.out.println(image.getRGB(0, 0)); 
    System.out.println(image.getRGB(1, 0)); 
    System.out.println(image.getRGB(0, 1)); 
    System.out.println(image.getRGB(1, 1)); 

    int[] array = image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth()); 
    System.out.println(array[0]); // at (0,0) 
    System.out.println(array[1]); // at (1,0) 
    System.out.println(array[16]); // at (0,1) 
    System.out.println(array[17]); // at (1,1)