Dies ist eine etwas andere Perspektive auf der anderen Seite ist Antworten bereits angegeben, da Sie nur angegeben haben, dass Sie die "Farbe" bestimmen möchten, aber nicht explizit angegeben haben, dass Sie die RGB-Werte möchten.
Diese Unterscheidung ist notwendig, da es für eine Farbe Abweichungen geben kann, die für das menschliche Auge nicht wahrnehmbar sind. Nehmen wir zum Beispiel an, dass Sie daran interessiert sind, die Farbe "blau" zu erkennen. Die Werte (5, 5, 240) und (10, 10, 255) unterscheiden sich nur sehr geringfügig von (0, 0, 255). Tatsächlich ist der Unterschied so subtil, dass Sie die Farbfelder nebeneinander vergleichen müssten, um sie auseinander zu halten, und selbst dann hängt es von der Qualität Ihres Monitors ab. Sie sind auf meinem Desktop-Monitor subtil anders, aber auf meinem Laptop nicht zu unterscheiden. Um die lange Geschichte kurz zu machen, sind RGB-Werte eine schlechte Art, Farbe zu bestimmen.
Es gibt zahlreiche Methoden zur Berechnung des Unterschieds zwischen Farben, am häufigsten ist die Delta-E-Methode. Dies kann jedoch über tödlich sein, wenn Sie nur eine schnelle und schmutzige Methode wollen. Konvertieren Sie den RGB-Raum in HSV und verwenden Sie den Farbtonunterschied, um die Farbe zu bestimmen. Ändern Amen Beispiel, erhalten Sie die folgenden Schritte aus:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
class CursorHue
{
[DllImport("gdi32")]
public static extern uint GetPixel(IntPtr hDC, int XPos, int YPos);
public static float GetHue(Point p)
{
long color = GetPixel(dc, p.X, p.Y);
Color cc = Color.FromArgb((int)color);
return cc.GetHue();
}
}
Reines Blau hat einen Farbtonwert von 240. Die vorherigen Beispiele (5, 5, 240) und (10, 10, 255) sowohl einen Farbton von 240 haben. Dies ist eine gute Nachricht, da es bedeutet, dass der Farbton ein Maß ist, das gegenüber RGB-Abweichungen ziemlich tolerant ist, und der Unterschied ist auch schnell zu berechnen (dh, nehmen Sie einfach den absoluten Unterschied in den Farbtonwerten). An diesem Punkt sollten wir auch einen anderen Parameter einführen, der eine akzeptable Toleranz gegenüber Farbunterschieden regelt. Eine Toleranz von 15 Grad Farbton macht das System ziemlich robust.
Hier ist Beispielcode, der zwei Farben vergleicht, um zu bestimmen, ob sie in akzeptabler Weise ähnlich
public static bool AreSimilar(Color c1, Color c2, float tolerance = 15f)
{
return Math.Abs(c1.GetHue() - c2.GetHue() <= tolerance;
}
Für eine tiefe gehende Erklärung, warum dies funktioniert, finden Sie in diese Wikipedia article auf HSV-Farbräumen.
Mögliches Duplikat von http://stackoverflow.com/questions/1483928/how-to-read-the-color-of-a-screen-pixel – Marco