2012-02-28 73 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)