Berechne die Auswahlpinselfarbe in WPF

8

Ich habe festgestellt, dass bei der Auswahl eines Textfelds in WPF auf rot und mit einem Farbwähler zur Überprüfung der Farbe die Farbe auf # FF9999 ausgeblendet wurde.

Ich habe eine bestimmte Farbe, die mein Client für den Auswahlpinsel benötigt. Gibt es eine Möglichkeit zu berechnen, auf welche Farbe ich den SelectionBrush setzen soll, wenn der Text ausgewählt ist, wird die genaue Farbe angezeigt?

Momentan muss ich den Auswahlpinsel als # 6599D1 haben, aber einmal eingestellt, ist die Farbe # C1D6ED.

Wie kann ich die Anfangsfarbe berechnen, so dass die Endfarbe genau das ist, was ich brauche?

    
SetiSeeker 11.08.2011, 15:57
quelle

2 Antworten

3

Im Anschluss an die Antwort von H.B.

Ich habe die Deckkraft mit der folgenden Formel in der Vergangenheit berechnet

%Vor%

welches zu

invertiert %Vor%

% ce_de% hat standardmäßig TextBox auf Weiß und Background auf 0.4 gesetzt.
Als H. B. erklärt, Sie können Ihre Farbe mit diesen Standardeinstellungen nicht erreichen, da der Rotwert als -130 ausgegeben wird. Damit haben Sie 3 Optionen, Ändern SelectionOpacity , ändern Background oder tun Sie es nicht:)

Ändern der SelectionOpacity ist wahrscheinlich nicht etwas, das Sie tun möchten, so dass Option 2, ändern Sie TextBox Background

Wir wollen nicht, dass Rot unter 0 geht, also

%Vor%

was

ergibt %Vor%

Dies ergibt 0,604. Mit diesem SelectionOpacity -Wert können Sie berechnen, dass SelectionOpacity auf SelectionBrush gesetzt werden muss, um #0056B3 zu werden, sobald die Opazität angewendet wurde.

So sieht% ce_de% mit diesen Werten aus

%Vor%

    
Fredrik Hedblad 12.08.2011 00:36
quelle
2

Gute Frage, aber ich denke, das ist unmöglich. Wenn in der ControlTemplate eine Überlagerung vorhanden ist, können Sie keine Funktion definieren, die eine dunklere Farbe berechnet, die dann als die beabsichtigte Farbe endet.

z.B. Wenn du rot eingibst: 255,0,0 bekommst du 255,153,153 , jetzt müsste die Funktion, die auf deine ursprüngliche Farbe angewendet werden müsste, das Rot abdunkeln, dies könnte natürlich nur im roten Kanal als grün und Blau ist schon Null. Das Problem ist jedoch nicht der rote Kanal (der als 255 endet und daher nicht betroffen ist), so dass alle Änderungen nur dazu dienen, die Farbe noch mehr zu entsättigen anstatt sie zu verdunkeln.

Bearbeiten: Um dies etwas mathematischer zu machen, ist die Funktion, die durch die Transparenz der Auswahl angewendet wird,:

  

f (x) = 0,4 x + 153

Wenn Sie dies auf alle Kanäle Ihrer Farbe anwenden, werden Sie sehen, dass dies tatsächlich der Fall ist. Wie bekommen wir die Werte, die wir wollen? Ganz einfach, wir invertieren die Funktion, nämlich:

  

f ^ (- 1) (x) = -2,5 (153,0 - x)

Großartig! Jetzt können wir das auf Ihre Farbe anwenden:

  

R: -130.0
  G: 0
  B: 140

Hmm, nicht so toll, denke ich.

Dieser negative Wert ist genau das, warum dies nicht immer möglich ist, jede Farbe, deren Komponenten unter 153 sind, ist nicht reversibel.

    
H.B. 11.08.2011 16:37
quelle

Tags und Links