|
Die Konvertierung von farbigen Bildern in Grauton-Bilder erfordert die Ermittlung der Helligkeit der jeweiligen Bildpunkte. Eine weithin verwendete Formel (etwa für Schwarzweiß-Drucker oder -Fernseher usw.) beruht auf einer Gewichtung der einzelnen Farbanteile R(ot), G(rün) und B(lau):
Helligkeit = (R * 77 + G * 150 + B * 28) / 255
Um diese Formel nutzen zu können, müssen Sie allerdings zuvor einen gegebenen oder ermittelten Long-Farbwert in die drei Bestandteile R, G und B
zerlegen (siehe: "Von Bunt nach R, G und B"), um diese Formel anwenden zu können. Umgekehrt ist danach aus dem Helligkeitswert wieder ein Long-Farbwert zu generieren. Da ein Grauwert im RGB-Farbmodell drei gleiche Werte für alle drei Bestandteile bedeutet, können Sie den Long-Farbwert von der RGB-Funktion in Visual Basic zusammensetzen lassen - für alle drei Bestandteile wird der ermittelte Helligkeitswert eingesetzt.
Eine weitere Variationsmöglichkeit bietet sich, wenn Sie den ermittelten Long-Farbwert des Grautons von dem Wert für Weiß (&HFFFFFF) subtrahieren: Sie erhalten den Umkehrwert des Grautons für ein Negativ-Bild. Schließlich können Sie auch noch die Gewichtungsfaktoren modifizieren und dadurch die Gesamt-Helligkeit und die Gradation (Kontrastverhältnisse) eines Grauton-Bildes manipulieren.
Die folgende Funktion GrayScale konvertiert wie beschrieben einen gegebenen Long-Farbwert in einen Grauton. In den optionalen Parametern cR, cG und cB können Sie von den voreingestellten Gewichtungsfaktoren abweichende Werte übergeben. Im optionalen Parameter Reverse können Sie durch Übergabe von True festlegen, ob der Negativ-Wert des Grautons zurückgegeben werden soll.
Public Function GrayScale(ByVal Color As Long, _
Optional ByVal cR As Long = 77, _
Optional ByVal cG As Long = 150, _
Optional ByVal cB As Long = 28, _
Optional ByVal Reverse As Boolean) As Long
Dim R As Long
Dim G As Long
Dim B As Long
Dim nGray As Long
R = Color Mod 256
Color = Color \ 256
G = Color Mod 256
Color = Color \ 256
B = Color Mod 256
nGray = (cR * R + cG * G + cB * B) / 255
If Reverse Then
GrayScale = &HFFFFFF - RGB(nGray, nGray, nGray)
Else
GrayScale = RGB(nGray, nGray, nGray)
End If
End Function
|