Modifizierung Dezember 1998
Es gibt doch immer noch eine bessere, schnellere oder saubere Lösung, als die,
die man bisher einsetzt. Und da dies so ist, hab ich auch keinerlei Probleme mich zu
korrigieren bzw. die bessere Lösung zukünftig einzusetzen.
Und natürlich wird auch der Tipp in der Tipp-Datenbank dann modifiziert.
Hier soll es also eine Ergänzung zum Umrechnen (Aufsplitten) eines Long-Wertes in die RGB
Werte geben.
Ausgegangen wird hier von einer PictureBox, von der der Longwert eines Pixels ermittelt
wird, um diesen anschließend in die RGB Werte umzusetzen.
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Dim farbwert As Long
farbwert = Picture1.Point(X, Y)
Label1(0).Caption = farbwert And &HFF&
Label1(1).Caption = farbwert \ &H100& And &HFF&
Label1(2).Caption = farbwert \ &H10000 And &HFF& End Sub
Originaltip
Sie können von jeder Form oder jedem PictureObjekt an der aktuellen Stelle, die aktive
Farbe ermitteln. Dies geht sehr einfach in der MouseDown Methode, da dies die benötigten
Koordinaten x ; y schon liefert.
Wenn Sie dann noch farbe = Picture1.Point(X, Y) angeben,
besitzt die Variable farbe den Farbwert von Picture1 in Form eines Longwertes, den Sie
auch so übergeben können.
Zum Beispiel Form1.BackColor = farbe
Was aber, wenn Sie diesen ermittelten Farbwert wieder in RGB Angaben benötigen? Es gibt
meines Wissens keine Funkiton, die dies wieder umwandelt.
(Für jeden Hinweis bin ich aber dankbar)
Da ich dies Funktion aber für ein kleines Programm benötigte,
mußte ich mir etwas einfallen lassen und habe mir den Aufbau
des Long Wertes etwas genauer angesehen.
Dabei fiel schnell auf, das die drei Grundbestandteile (RGB) sehr wohl getrennt behandelt
werden und zwar in Form von gestaffelten Werten.
Sie wissen sicher, daß sich die RGB Werte von 0 bis 255 bewegen.
So ist zum Beispiel
255,255,255 = weiß und somit
0,0,0 = schwarz.
Der Long Wert setzt sich wie folgt zusammen.
R = Werte zwischen 0 bis 255
G = Werte zwischen 256 bis 65280
B = Werte zwischen 65536 bis 16711680
So das der höchste Wert einer Farbe nie größer sein
kann als der niedrigste Wert der nächsten Farbe. Und mit diesem Wissen läßt sich nun
auch der entsprechende Farbanteil wieder ermitteln und dann in RGB Syntax angeben.
Hier die Vorgehensweise.
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Dim farbe As Long
Dim wert1, wert2, wert3 As Integer
On Error Resume Next
' falls Wert kleiner 1, wird 0 gesetzt
wert3 = 0
wert2 = 0
wert1 = 0
'Ermitteln der Farbe an den aktuellen X,Y Koordinaten
(hier Picture1) als Long
farbe = Picture1.Point(X, Y)
'Umwandeln in RGB Angaben
If farbe >= 65536 Then wert3 = Int(farbe / 65536)
If farbe >= 256 Then wert2 = Int((farbe - (wert3 * 65536)) / 256)
If farbe > 0 Then wert1 = Int(farbe - (wert3 * 65536) - (wert2 * 256))
'Zuweisung als RGB Wert (hier einfach Anzeige der
einzelnen Werte als Text)
Label1.Caption = wert1
Label2.Caption = wert2
Label3.Caption = wert3
Wem nicht so recht der Sinn einleuchten will, warum es notwendig sein kann, die einzelnen
Werte wieder zu ermitteln (schließlich kann man die Farbe auch als Long Wert übergeben),
der sollte sich mal im Tipp Transparente Grafiken ohne API das im
Download enthaltene Programm ansehen, mit dem sich die Masken erstellen lassen, dort
werden die ermittelten RGB Werte den drei Scrollbalken für die einzelnen
Grundbestandteile (RGB) übergeben. |