Helligkeitswert

maweg

Mitglied
Hallo zusammen

Ich habe ein kleines Problem betreffend Helligkeitswert und zwar geht es darum:

Ich habe eine Picture box, in der mittels Timer jede 4 Sekunde ein neues Rechteck ( Line(x1,y1)-(x2,y2),Color,BF ) gezeichnet wird. Alles funktioniert Wunderbar. Nun bekomme ich aber extern einen Farbwert, welchen ich als Farbe des Rechtecks definieren möchte. Es wäre ja überhaupt kein Problem wenn ich diese Wert im RGB Format erhalten würde! Doch leider kommt er in %.

D.h. Ich bekomme einen Helligkeitswert von 0 falls die Farbe schwarz ist und einen von 100 falls die Farbe weiss ist. Alles dazwischen besteht also aus Graustufen.

Nun zur eigentlichen Frage. Gibt es eine Methode / resp, kennt jemand eine Methode mit der ich die Hintergrundfarbe direkt mit diesem Helligkeitswert definieren kann, oder sollte ich wohl besser eine Prozedur schreiben die den Wert jeweils in den RGB Wert umwandelt?

Dankeschön ;)
 
hallo maweg,

der maximale Farbwert (Weis) = 16777215 und minimal (Schwarz) = 0.

Formel:
(Maxwert * Helligkeitswert) / 100 = gesuchter Farbwert

Somit hast du die Möglichkeit die Farben von 16777215 in 100 Teile einzuteilen.

ANI
 
danke für die schnelle antwort. Es funktioniert doch leider nur bedingt, denn zwischen 16777215 und 0 liegen ja auch die Farben und ich möchte das ganze nur in Graustufen haben :( hoffentlich gibt es für dieses Problem auch eine "einfache Lösung"

Noch was zusätzliches, was im Grunde genommen ziemlich leicht sein sollte bei mir aber nicht richtig funktionieren will :(

Ich will über eine Zeitspanne (zb. 20sekunden) jede Sekunde eine Anweisung ausführen... wie löse ich dieses Problem, so dass ich das Resultat jeweils direkt mitverfolgen kann?

Dankeschön
 
hallo maweg,

um deine letzte Frage vorweg zu beantworten, musst du zwei Timer-Controls verwenden.

1.Timer.Interval=20000
2.Timer.Interval=1000
Timer2.enabled = false

Wenn Timer1 20 Sekunden gewartet hat, schaltet er Timer1.enabled = true.

Private Sub Timer1_Timer()
If Timer1.enabled=true then
Timer1.enabled = false
else
Timer1.enabled = true
endif
'hier die ausführbare Funktionen einbinden
'.......
End Sub

Private Sub Timer2_Timer()
'Ausführende Function pro Sekunde
End Sub

Zu deiner ersten Frage:

Bei Graustufen ändern sich die RGB-Werte proportional.

z.B.
Wert = RGB(255,255,255) (Weis)
Wert = RGB(200,200,200) (Weis)
Wert = RGB(150,150,150) (Weis)
Wert = RGB(100,100,100) (Weis)
......
Wert = RGB(0,0,0) (Schwarz)

So geht es aber auch!

Private Function GetFarbWert(Helligkeit as integer) as long
Dim tmpFarbe as Integer
tmpFarbe= (255 * Helligkeitswert) / 100
GetFarbWert=RGB(tmpFarbe,tmpFarbe,tmpFarbe)
End Function

So erreicht man die Graustufen am einfachsten.

ANI
 
habe mich vertippt: Korrektur

Private Sub Timer1_Timer()
If Timer2.enabled=true then
Timer2.enabled = false
else
Timer1.enabled = true
endif
End Sub

Sorry

ANI
 
irgenwie überarbeitet:

Private Sub Timer1_Timer()
If Timer2.enabled=true then
Timer2.enabled = false
else
Timer2.enabled = true
endif
End Sub

ANI

Ich mach jetzt ersteinmal PAUSE.
 
danke dir....

das mit den timern hatte isch schon so gelöst wie du es beschreibst! Es funktioniert auch... Sorry das ich dir hier unnötige mühe gemacht hab :( das problem war nur, dass ich das Intervall zu tief hatte, so das der Sensor von dem ich den Wert abfrage zu langsam war. Die Darstellung wurde so einfach verzögert.

Das mit dem Helligkeitswert funktioniert auch prächtig.

Danke vielmals, du hast mir sehr geholfen.
 
Zurück