2011-01-22 117 views
1

這是我到目前爲止已經過去了,我似乎無法走的更遠,因爲我不明白,在RGBJava初學者:將圖像轉換爲二進制數組

// 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)。

回答

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; 
} 

我選擇的輸出等式取自維基百科的亮度定義。你可以改變尺度,只要係數加起來1

+0

127使這一切都是假的,我試過(1),它工作正常,但爲什麼:) – 2011-01-22 21:37:14

0

您已經在int []中有RGB值,即每個像素的顏色。您可以將其與特定背景顏色(如黑色)進行比較,以獲得1位像素值。然後可能在另一個適當大小的字節[]數組中設置一點...

1

你可以做一些這樣的事情,

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

希望這有助於!

相關問題