2016-03-27 15 views
0

Schauen Sie den Code unten:Java - binäre AND (&) Operation für image.getRGB (x, y);

image.getRGB(x,y) & 0x000000FF 

Wenn das Ergebnis image.getRGB (x, y) -16777216 ist, das UND-Operationsergebnis 0 (schwarze Farbe)

Wenn das Ergebnisbild. getRGB (x, y) ist -1, das UND-Operationsergebnis 255 (weiße Farbe)

Meine Frage ist, wenn Sie in Java - Understanding about image.getRGB(x,y) output in Binary term meiner verwandten Artikel sehen Sie das Ergebnis der image.getRGB sehen (x , y) im binären Begriff gehören Alpha, Rot, Grün, an d Blau (32 Bit), aber 0x000000FF ist nur 8 Bit; zum Beispiel:

image.getRGB : 1111 1111 0000 0000 0000 0000 0000 0000 
0x000000FF : 1111 1111 
image.getRGB & 0x000000FF : 0000 0000 

Zweites Beispiel:

image.getRGB : 1111 1111 1111 1111 1111 1111 1111 1111 
0x000000FF : 1111 1111 
image.getRGB & 0x000000FF : 1111 1111 

Wie sie zwischen 8 Bit von 0x00000FF mit 32-Bit-image.getRGB vergleichen, so dass sie Ergebnis 0 oder 255, wie mein Fall oben zu bekommen?

+0

Sind Sie sicher, dass Sie keinen Fehler gemacht haben. Dieser Code gibt aus: 'System.out.println (0xFF << 24 & 0xFF); → 0' 'System.out.println (Color.black.getRGB()); → -16777216' 'System.out.println (Color.black.getRGB() & 0xFF); → 0' – Maljam

+0

@maljam: sorry, ich wurde meine Frage bearbeitet. Sie können das oben noch einmal überprüfen. Danke – Michael

+0

'-16777216' ==' 0xFF00000' –

Antwort

4

denken einfach von ihnen als Zahlen, und zwar unabhängig von der Anzahl der Bits, sollten Sie die Zahlen mit den Bits, die die gleiche Leistung von 2 zusammen und führen Sie dann die binäre Operation ausrichten:

im.getRGB :  1111 1111 0000 0000 0000 0000 0000 0000 
0x000000FF :  0000 0000 0000 0000 0000 0000 1111 1111 
        ^^^^ ^^^^      ^^^^ ^^^^ 
im.getRGB & 0xFF: 0000 0000 0000 0000 0000 0000 0000 0000 = 0 

Die gleiche Sache mit dem anderen Beispiel:

im.getRGB :  1111 1111 1111 1111 1111 1111 1111 1111 
0x000000FF :  0000 0000 0000 0000 0000 0000 1111 1111 
        ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ 
im.getRGB & 0xFF: 0000 0000 0000 0000 0000 0000 1111 1111 = 255 
+0

große Antwort! Vielen Dank! – Michael