Edgar Ehritt: int alpha = (argb >> 24) & 0xff;

Beitrag lesen

Hallo,

// Lies die Farbwerte eines BufferedImage-Objekts und zerlege die Rueckgabe im Bereich des Alpha-Werts.
  int argb = image.getRGB(j, k);
  int alpha = (argb >> 24) & 0xff;

um es mal mit HTML zu -sagen-: <abbr title="A-lpha, R-ed, G-reen, B-lue">argb</abbr>

Methode getRGB() gibt den Farbwert eines Bildpunktes der Koordinaten j*k aus. Aus stylesheet-Angaben ist sicher die hexadezimale Schreibweise für Farbwert (z. B. weiß: #ffffff) bekannt, wobei die ersten acht 8 für Rot, die zweiten acht 8 für Grün und die letzten 8 bit für Blau stehen. Das sind zusammen 24 Bit (24=8+8+8). Der Operator ">>" verschiebt diese Bit nun um 24 (Bit)Stellen nach rechts, sodaß aus 111111111111111111111111 letztendlich 000000000000000000000000 werden.

Jedoch ist die Farbtiefe hier nicht 24 Bit sondern 32 Bit (8+8+8+8=32), denn es gibt ja nach den Alpha. Durch die Verschiebung (argb >> 24) werden also alle Bits der Farben Rot, Grün und Blau -weggeschmissen- und nur die Bits des Alpha bleiben übrig. Diese werden dann mit dem Operator "&" gegen 0xff geprüft (was meines Erachtens aber eigentlich wegfallen könnte, weil Variable alpha mit "int" angegeben ist, aber da bin ich mir nicht sicher, ob Java das mitmacht). D. h. alle noch im Ausdruck (argb >> 24) verbleibend gesetzten Bits werden in der Variable alpha gespeichert.

// farbige Pixel schwarz setzen.
  if (alpha != 0) {

Sind tatsächlich Bits nach der Verschiebung übrig geblieben, ist der integer Wert größer 0, was gleichbedeutend damit ist, das es kein transparenter / opazitärer Bildpunkt ist.

image.setRGB(j, k, black);
  }

Er wird also geschwärzt.

Gruß aus Berlin!
eddi

--
Der Verweis auf die Grundlagen Deines Handelns, ist das Joch zur Freiheit.
Aber so gilt: Allen Leuten Recht getan, ist keine Kunst, weil's jeder kann.