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 Grünanteil und maximalem Blauanteil.

Der Entwickler möchte den Farbwert in einer fremden, von ihm nicht veränderbaren, Klasse darstellen. Dort möchte er ein nicht mehr benutztes int Attribut verwenden. Zur Umwandlung der drei Farbanteile in einen int Wert plant er folgende Methode:

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

Zudem möchte er einen solchen int Wert für eine Farbangabe auch wieder eindeutig in die drei RGB Farbanteile zurückwandeln können:

/**
 * 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) {
   ...// Implementierung (irrelevant in Bezug auf die Aufgabenstellung)
  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.