vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Komplementä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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Komplementärfarbe ermitteln 
Autor: Manfred X
Datum: 13.06.18 22:56

Suchst Du eventuell nach einer Transformationsmatrix?

https://docs.microsoft.com/de-de/dotnet/framework/winforms/advanced/how-to-use-a-color-matrix-to-transform-a-single-color
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Komplementärfarbe ermitteln 
Autor: Kalli
Datum: 23.06.18 21:02

War im Urlaub
Danke für die Information. Ich werde das Checken.
LG
Kalle

Dont debug, because there will allways be one more bug

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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