Farbwerte, byte und int

Ein Entwickler möchte Farbwerte nach dem RGB Modell abbilden. Die drei Farbkomponenten rot, grün und blau stellt er jeweils als byte dar. Er setzt den byte Wert -128 zu null und 127 als Maximalwert des jeweiligen Farbanteils fest. Das RGB Tripel (-128, 0, 127) entspricht also null Rotanteil, mittlerem Gelbanteil und maximalem Blauanteil.

Der Entwickler möchte den Farbwert in einer fremden, von ihm nicht veränderbaren, Klasse darstellen. Dort kann er ein nicht mehr benutztes int Attribut verwenden. Er möchte die drei Farbanteile in einen int Wert umwandeln und plant dazu eine entsprechende Methode:

/**
 * Wandele die drei Farbanteile (r, g, b) einer Farbe in einen int
 * Wert. Gegenoperation zu {@link #int2rgb(int)}.
 *
 * @param r Rotanteil
 * @param g Gelbanteil
 * @param b Blauanteil
 * @return Ein der Farbe eindeutig entsprechender int Wert.
 */
static public int rgb2int(final byte r, final byte g, final byte b) {
  return ...;
}

Zudem möchte er diese int Werte auch wieder eindeutig in die drei Farbanteile zurückwandeln können, um so die ursprünglichen RGB Anteile zu erhalten:

/**
 * Umwandlung eines int Farbwerts in die drei (r,g,b) Anteile. Gegenoperation
 * zu {@link #rgb2int(byte, byte, byte)}.
 *
 * @param farbwert
 * @return Ein Array der Länge drei bestehend aus den RGB Farbanteilen.
 */
static public byte[] int2rgb(final int farbwert) {
  return new byte[]{..., ..., ...};
}

Frage: Ist dies grundsätzlich möglich? Begründen Sie Ihre Aussage.

Tipp

Betrachten Sie die zugrunde liegenden Datentypen.

Lösung

Ein int besteht aus vier Bytes und bietet somit ausreichend Speicherplatz zur Aufnahme von drei byte Werten.