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.