| |
VB.NET - Ein- und UmsteigerKomplementärfarbe ermitteln | | | Autor: Kalli | Datum: 07.06.18 20:28 |
| Man erzeugt einen Button oder ein Label, dessen Hintergrundfarbe durch den Benutzer bestimmt wird (z.B. das Ergebnis einer Farbauswahl). Des Weiteren enthält der Button/das Label einen erklärenden Text, der lesbar bleiben soll: z.B. "Textfarbe". Stelle ich die Hintergrundfarbe jetzt auf Schwarz, verschwindet der Text, wenn seine Farbe auch schwarz ist usw.. Das Problem ist, die jeweilige Komplementärfarbe zum Hintergrund zu finden:
Label1.text="Textfarbe"
Dim c As Color = Label1.BackColor, c1 As Color
c1 = Color.FromArgb(c.ToArgb Xor Color.White.ToArgb) 'Die Komplementärfarbe
' per XOR
Label1.ForeColor = c1 'so bleibt der Text immer lesbar, egal, welche
' Hintergrundfarbe gewählt wird. Ich poste das hier mal, weil es so schön einfach ist.
Dont debug, because there will allways be one more bug | |
Re: Komplementärfarbe ermitteln | | | Autor: Manfred X | Datum: 07.06.18 21:07 |
| Beim Verhältnis von Vordergrund- zur Hintergrundfarbe
kommt es auf maximalen Kontrast und Helligkeitsunterschiede
an. Die Komplementärfarbe ist oft nicht die optimale Lösung.
label1.BackColor = Color.FromArgb(128, 128, 128) | |
Re: Komplementärfarbe ermitteln | | | Autor: Kalli | Datum: 08.06.18 09:36 |
| Du hast vollkommen recht. Die Komplementärfarbe von Grau ist Grau und im gesamten Graubereich liegen die Komplementärfarben sehr dicht bei den Ausgangsfarben. Das, was das menschliche Auge als Grau sieht wird vor allem durch die ersten beiden RGB-Komponenten Rot und Grün bestimmt (Rot + Grün) zu gleichen Anteilen gibt ein neutrales Grau. Der Blau-Anteil ist für das Auge nicht so wichtig. Daher macht sich folgende ergänzende Abfrage im Code recht gut zur Erzeugung eines sichtbaren Farbgegensatzes auch im Graubereich:
Alter Code:
Label1.text="Textfarbe"
Dim c As Color = Label1.BackColor, c1 As Color
c1 = Color.FromArgb(c.ToArgb Xor Color.White.ToArgb) 'Die Komplementärfarbe
' per XOR und die Abfrage:
dim a as integer=50
If Abs(Int(c.R) - Int(c1.R)) < a And Abs(Int(c.G) - Int(c1.G)) < a Then _
'unterscheiden sich Rot- und Grünanteil zu wenig voneinander
c1 = Color.Red
End If
Label1.ForeColor = c1 Aber vielleicht hat Jemand eine viel bessere Idee, ich wäre dafür sehr aufgeschlossen.
Dont debug, because there will allways be one more bug | |
Re: Komplementärfarbe ermitteln | | | Autor: Bazi | Datum: 13.06.18 13:49 |
| ich arbeite mit folgender Funktion, die ich mal per Suche fand:Friend Function KontrastColor(ByVal BackColor As Color) As Color
Dim diffR = 255 - BackColor.R
Dim diffG = 255 - BackColor.G
Dim diffB = 255 - BackColor.B
Dim diffSumm = diffR + diffG + diffB
If diffSumm > 400 Then Return Color.AntiqueWhite Else Return _
Color.Black
End Function Damit habe ich entweder weiß oder Schwarz als Schrift, bislang hatte ich da noch keine Probleme.
Gruß Christian | |
Re: Komplementärfarbe ermitteln | | | Autor: Kalli | Datum: 13.06.18 15:04 |
| Danke!
Ich habe im weiteren Verlauf des Programms schon alle Farben, die ich anbiete durch. Es klappt auch mit meiner Abfrage recht gut.
Ich habe immer wieder mal nach der Möglichkeit gesucht, Komplementärfarben zu erzeugen. Leider habe ich in VB Net nicht so etwas wie "Graphmode (XOR)" gefunden, mit dem man auch in Grafikprogrammen prima Linien erzeugen und wieder löschen kann, ohne vorher den Hintergrund zwischenzuspeichern. Vielleicht meldet sich jemand hier, der einen Weg kennt, wie man in VB grafisch eine Farbe in einem Modus AND, OR, XOR mit dem Untergrund verknüpft.
Damit würden sich eine Menge Möglichkeiten auf ganz einfache Weise erschließen.
Gruß
Kalle
Dont debug, because there will allways be one more bug | |
Re: Komplementärfarbe ermitteln | | | Autor: Kalli | Datum: 14.06.18 22:52 |
| Nein, ich suche nach einer Möglichkeit in VB die Art und Weise festzulegen, wie sich Linien, Figuren und Bitmaps mit dem Hintergrund verbinden. In VB habe ich immer nur eine Option gefunden: Der Hintergrund wird durch die Vordergrundgrafik ersetzt. In anderen Programmiersprachen gibt es die Möglichkeit den Modus festzulegen, wie sich die Vordergrundgrafik mit dem Hintergrund verbindet. Eine der interessantesten ist eben:
zu setzende Farbe = GetPixel(x,y)-vom Hintergrund XOR color(Grafikelement)
Legt man nämlich jetzt dasselbe Grafikelement noch einmal im XOR-Modus über das alte, wird das alte dadurch sauber wieder gelöscht, ohne dass man den Hintergrund vorher abspeichern musste, um ihn wieder zu ersetzen. Das ist sehr hilfreich, wenn man Grafikelemente über einen Hintergrund bewegen will.
Kalle
Dont debug, because there will allways be one more bug | |
Re: Komplementärfarbe ermitteln | | | Autor: Manfred X | Datum: 15.06.18 08:32 |
| In Windows.Forms-Projekten können mit der Paint-Methode
nach einem Invalidate der Picturebox Graphikelemente
über einen Hintergrund bewegt werden.
Ein Kombinieren ist für die Anzeige nicht erforderlich. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|