vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 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
nächste bekannte Farbe ermitteln 
Autor: Bazi
Datum: 20.02.19 15:54

Hallo,
ich suche nach einer Möglichkeit zu einer Farbe die am nächsten liegende knownColor zu ermitteln.

Dies benötige ich für einen Export mittels Fremdtool, dass die Farben über Namen anspricht.

Habt Ihr hierzu Anregungen für mich?

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: nächste bekannte Farbe ermitteln 
Autor: Manfred X
Datum: 20.02.19 17:26

Hallo!

In diesem Beispiel wird gezeigt, wie man eine
Dictionary der benannten Farbwerte erstellen kann:
https://www.vbarchiv.net/tipps/details.php?id=2016

Welches die "nächste" Farbe zu einer vorgegebenen Farbe ist,
wäre zu klären. In der Regel werden bei der Berechnung von
Farbdistanzen Gewichtungsfaktoren für die ARGB-Anteile verwendet,
um den Eigenschaften des menschlichen Auges zu berücksichtigen.

Beispiel für Helligkeit:
http://fseitz.de/blog/index.php?/archives/112-Helligkeit-von-Farben-des-RGB-Farbraums-berechnen.html

Beitrag wurde zuletzt am 20.02.19 um 17:37:51 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: nächste bekannte Farbe ermitteln 
Autor: Kuno60
Datum: 21.02.19 02:10

Hier eine einfache Variante, die recht gute Ergebnisse liefert.
Mit ReadKnownColors werden zunächst alle bekannten Farben in die ColorList eingetragen.
Mit GetNearestKnownColor werden die RGB-Werte verglichen und die Farbe mit der geringsten Differenz wird zurück gegeben.

  Dim ColorList As New List(Of Color)
 
  'Alle bekannten Farben in die ColorList eintragen.
  Sub ReadKnownColors()
    For Each k As KnownColor In [Enum].GetValues(GetType(KnownColor))
      Dim c As Color = Color.FromKnownColor(k)
      If Not c.IsSystemColor Then
        ColorList.Add(c)
      End If
    Next
  End Sub
 
  'Liefert die am nähesten bekannte Farbe.
  Function GetNearestKnownColor(col As Color) As Color
    If ColorList.Count = 0 Then Return Nothing
    Dim r, g, b As Integer
    r = col.R : g = col.G : b = col.B
 
    Dim Q = From c In ColorList
            Let diff = Math.Abs(c.R - r) + Math.Abs(c.G - g) + Math.Abs(c.B - b)
            Order By diff
            Select c
 
    Return Q.First
  End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: nächste bekannte Farbe ermitteln 
Autor: Bazi
Datum: 21.02.19 10:13

Hallo und danke,
das funktioniert in den ersten Test wunderbar.
ich musste etwas abändern, da ich den Namen der Farbe benötige:
 'Alle bekannten Farben zurückgeben.
    Private Function ReadKnownColors() As List(Of Color)
        Dim ColorList As New List(Of Color)
        For Each k As KnownColor In [Enum].GetValues(GetType(KnownColor))
            Dim c As Color = Color.FromKnownColor(k)
            If Not c.IsSystemColor Then
                ColorList.Add(c)
            End If
        Next
        Return ColorList
    End Function
 
    'Liefert die am nähesten bekannte Farbe.
    Private Function GetNearestKnownColorName(ByVal col As Color) As String
        Dim Colorlist = ReadKnownColors()
        If Colorlist.Count = 0 Then Return Nothing
        Dim r, g, b As Integer
        r = col.R : g = col.G : b = col.B
        Dim nCol As Color = Nothing
        Dim mDiff As Integer = 10000000
        For Each c In Colorlist
            Dim diff = Math.Abs(c.R - r) + Math.Abs(c.G - g) + Math.Abs(c.B - b)
            If diff < mDiff Then mDiff = diff : nCol = c
        Next
        Return nCol.ToKnownColor.ToString
    End Function
Gruß Christian

Danke für die Hilfe

Gruß Christian

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