Farbe nach Weiß dimmen ?

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Agita.

    Farbe nach Weiß dimmen ?

    Hi
    Ich hab gerade überlegt, ob es möglich ist, mit einer Trackbar Farben zu dimmen?
    Sprich, ich gebe meinetwegen die Farbe Grün vor, und mithilfe einer Trackbar kann ich dann von weiß bis zur Zielfarbe Sliden.
    Ich habe mir dazu folgendes Überlegt :
    Die Brightness der "Ziel"-Farbe kann ich ja auslesen. Also müsste ich jetzt es ja nur noch hin bekommen, das ich die Brightness von 1 (weiß) bis zur Zielbrightness dimmen kann. Bloß wie? Ich benötige die Farben dann also Background-Color.

    Hat da jemand eine Idee?
    Liebe Grüße
    sothere
    Schau dir mal die System.Windows.Forms.ControlPaint-Klasse an, die bietet super Methoden, unter anderem auch die Methoden Light und Dark, mit welchen sich die Helligkeit einer Farbe beeinflussen lässt.
    r = 0
    g = 128 (green)
    b = 0

    slider = von -1.0 (-100%=black) bis +1.0 (+100%=white)

    wenn slider > 0 dann
    ... neuR = r + ( ( 255-r ) * slider )
    ... neuG = g + ( ( 255-g ) * slider )
    ... neuB = b + ( ( 255-b ) * slider )
    wenn slider < 0 dann
    ... neuR = r + ( ( r ) * slider )
    ... neuG = g + ( ( g ) * slider )
    ... neuB = b + ( ( b ) * slider )

    ...

    beispiel bei "slider = +0.75"
    neuR = 0 + ( ( 255-0 ) * +0.75 ) = 191
    neuG = 128 + ( ( 255-128 ) * +0.75 ) = 223
    neuB = 0 + ( ( 255-0 ) * +0.75 ) = 191

    beispiel bei "slider = -0.12"
    neuR = 0 + ( ( 0 ) * -0.12 ) = 0
    neuG = 128 + ( ( 128 ) * -0.12 ) = 112.64
    neuB = 0 + ( ( 0 ) * -0.12 ) = 0

    edit: negativ werte gefixt

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Agita“ ()

    Also ich habe es jetzt etwas anders gelöst :)

    r , b und g sind meine Ziekanäle
    slider ist ein Wert zwischen 0 und 1, der das Verhältnis angibt (hab ich das richtig verstanden?)


    Quellcode

    1. slider = TrackBar1.Value / TrackBar1.Maximum
    2. neuR = r + ((255 - r) * slider)
    3. neuR = (255 - neuR) + r
    4. neuG = g + ((255 - g) * slider)
    5. neuG = (255 - neuG) + g
    6. neuB = b + ((255 - b) * slider)
    7. neuB = (255 - neuB) + b
    8. Panel1.BackColor = Color.FromArgb(CInt(neuR), CInt(neuG), CInt(neuB))
    Liebe Grüße
    sothere
    *g* das ist der selbe lösungsansatz wie meine idee :P nur dass es nicht von -1 bis +1 geht sondern von 0 bis 1 :P

    @sothere:

    Quellcode

    1. dim light as double = 1 / TrackBar1.Maximum * TrackBar1.Value
    2. dim neuR as byte = cbyte( nowR + ((255 - nowR) * light) )
    3. dim neuG as byte = cbyte( nowG + ((255 - nowG) * light) )
    4. dim neuB as byte = cbyte( nowB + ((255 - nowB) * light) )
    5. Panel1.BackColor = Color.FromArgb(neuR, neuG, neuB)
    Also ich finde, die Lösung von Agita war absolut ausreichend, und die kann man auch supi in Funktionen packen.

    Ich musste den 0 - 1 Wertebereich verwenden, da die Trackbar auch noch andere Objekte versorgt. Ich hatte deinen Code allerdings so verstanden, das er nur von schwarz zur Zielfarbe dimmt. Wahrscheinlich kam mir da das umdenken vom -1/1 System auf das 0/1 System in die Quere.
    Vielen Dank auf jeden Fall für eure Hilfe, ihr seid super <3
    Liebe Grüße
    sothere

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „sothere“ ()

    ich meinte natürlich versorgt :)
    Ich bin halt "gezwungen", diesen Bereich zu verwenden, weil die Werte auch noch an anderen Stellen benutzt werden. Außerdem wollte ich ja von weiß nach "Zielfarbe" und nicht umgekehrt :)
    Liebe Grüße
    sothere

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sothere“ ()

    sothere schrieb:

    und nicht umgekehrt :)
    Das ist doch völlig egal. Das ganze ist eine simple Proportionalität, ggf. mit eienm Offset.
    Sieh Dir mal den Dreisatz an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    sothere schrieb:


    Ich bin halt "gezwungen", diesen Bereich zu verwenden, weil die Werte auch noch an anderen Stellen benutzt werden. Außerdem wollte ich ja von weiß nach "Zielfarbe" und nicht umgekehrt :)


    wenn du dennoch auch nach schwarz dimmen möchtest und deinen bereich "0 bis +1" behalten willst kannst du den wertebereich auch "umskalieren"...
    sliderAlt = wert zwischen 0 und +1
    sliderTemporär = sliderAlt * 2 - 1

    somit kannst du meine "formel" (wenn man das so nennen darf) weiterhin mittels der "sliderTemporär" variable verwenden und musst nich mit 0.5er werten herumhantieren