Der Epina Delphi-Kurs bietet Ihnen eine allgemeine Einführung in das Programmieren mit Delphi/Pascal. Mit vielen ausgearbeiteten Beispielen können Sie direkt in die Delphi-Programmierung einsteigen. Mehr dazu finden Sie hier....

8. Programm: Farbdarstellung im HSI-System

Farben werden am Computer auf Hardwareebene als RGB-Werte (rot, grün und blau) bearbeitet und erzeugt. Allerdings gibt es neben dem RGB-System noch einige andere Farbsysteme, wie z.B. das CMYB-System, oder das HSI-System. Wir wollen im Folgenden ein Programm erstellen, das es erlaubt die Farben im HSI-System einzustellen. HSI steht für "Hue", "Saturation" und "Intensity". Dabei gibt H die Farbe an, S die Sättigung und I die Intensität der Farbe. Die Farben sind in einem Kreis organisiert, so dass H Werte zwischen 0 und 360 annehmen kann. Die Werte für S und I liegen zwischen 0.0 und 1.0.

Die Umrechnung von HSI- auf RGB-Werte ist im Prinzip einfach. Zuerst wird abgefragt, ob die Sättigung 0 ist. Falls die Sättigung 0 ist handelt es sich um einen Grauwert, der alleine durch die Intensität bestimmt wird. Ist die Sättigung größer als 0, wird zuerst der Farbkreis in 6 Teile zerlegt und dann werden für jeden Teil getrennt die RGB-Werte bestimmt.

Aufgabe: Erstellen Sie ein Programm, mit dem Sie die Farben eines Panels über die Parameter H, S, und I einstellen können. Die HSI-Parameter sollen mit Scrollbars oder ähnlichen Elementen eingestellt werden können, die entstehende Farbe soll auf einem Panel ausgegeben werden. Außerdem sollen die Einzelwerte (H, S, I, R, G, B) angezeigt werden (z.B. mit der Komponente TLabel oder besser mit TNumLab aus der SDL Component Suite). Verwenden Sie zur Umrechnung von HSI nach RGB eine Prozedur oder eine Funktion.

Das folgende Struktogramm soll Ihnen die Umrechnung von HSI auf RGB erleichtern. Im Struktogramm fehlt die Überprüfung der Eingabewerte auf ihre Gültigkeit. Bauen Sie diese Überprüfung zusätzlich ein (z.B. in dem Sie die Eingangswerte der Umrechnungsroutine auf den jeweils nächsten erlaubten Wert setzten, falls eine Überschreitung des Wertebereichs auftritt).

Last Update: 2008-09-09