2017-07-21 10 views
1

私はJavaを学習しており、ピクセルからRGB情報を取得しようとしています。私は、しかし、私は、元のgetRGB()値をプリントアウトするとき、私はマイナス記号で不完全な2進数を取得する理由を理解したいと思い、そうするために管理:誰かがgetRGB()メソッドのバイナリ出力を理解する助けになることができますか?

-100110011001100110011010 

これは私のコードです:

import java.io.File; 
import java.io.IOException; 
import java.awt.Color; 
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 

public class MyImage { 

    public static void main(String[] args) throws IOException { 

     BufferedImage img = null; 
     File f = null; 

     try { 
      f = new File("D:\\preview.jpg"); 
      img = ImageIO.read(f); 

     } catch (IOException e) { 
      System.out.println(e); 
     } 

     int p = img.getRGB(0, 0); 
     int a = (p >> 24) & 0xff; 
     int r = p >> 16 & 0xff; 
     int g = p >> 8 & 0xff; 
     int b = p & 0xff; 
     System.out.println(a + "  " + r + "  " + g + "  " + b); 
     System.out.println(Integer.toString(a, 2) + " " + Integer.toString(r, 2) + " " + Integer.toString(g, 2) + " " 
       + Integer.toString(b, 2)); 
     System.out.println(Integer.toString(p, 2)); // why this number? 

     } 
} 

出力:

255  102  102  102 
11111111 1100110 1100110 1100110 
-100110011001100110011010 
+0

あなたはそれが読めるより人間になりたい場合は、RGB値 –

+0

こんにちはランスに '' Integer.toHexString(...)を呼び出すことができ、ありがとう、あなたのアドバイスを理解するために私を助けました私の混乱は 'Integer.toHexString()'や 'Integer.toBinaryString()'の代わりに 'Integer.toString()'を使って 'getRGB()'の値を可視化したためです。 –

答えて

1

アルファ、赤、青、緑の8ビット、それぞれがあります。整数の最初のビットが設定されている場合、値は負になります。これは、4つの異なる値が1つの整数変数にパックされているためです。通常、最初のビットは値が負(2の補数)かどうかを決定します。

-100110011001100110011010 // 

デフォルトRGBカラーモデル(TYPE_INT_ARGB)およびデフォルトsRGB色空間内の整数ピクセルを返します。このデフォルトモデルが画像ColorModelと一致しない場合、色変換が行われます。このメソッドを使用すると、返されるデータの各カラーコンポーネントには8ビットの精度しかありません。

BufferedImage.getRGB

関連する問題