Farbwerte, byte und int

exercise No. 255

F:

Eine Entwicklerin möchte Farbwerte nach dem RGB Modell abbilden. Die drei Farbkomponenten rot, grün und blau stellt sie jeweils als byte dar. Sie 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.

Die Entwicklerin möchte den Farbwert in einer fremden, von ihr nicht veränderbaren, Klasse darstellen. Dort möchte sie ein nicht mehr benutztes Attribut vom Typ int verwenden. Zur Darstellung der drei Farbanteile als int Wert plant sie 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 sie 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 zugrundeliegenden Datentypen.

A:

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