2011-01-22 72 views
1

これは私がRGBのJava初心者:バイナリ配列に画像を変換する

// 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)を試しましたが、うまくいきました。なぜなら、なぜドンノですか? –

+0

あなたの努力に感謝します。 –

+0

ええ、私は今それを修正しました – KitsuneYMG

0

すでにint []にRGB値があります。つまり、各ピクセルの色です。これを黒のような特定の背景色と比較すると、1ビットのピクセル値が得られます。次に適切な大きさの別のバイト[]配列を設定してください。

1

まで追加として、このことができます

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

希望のスケールを変更することができます!

関連する問題