Hi,
ich habe eine Frage,
ich lese Pixel vom Desktop aus, aus einem Programm mit folgender Klasse
public bool CheckPixelColor(string hexcode, int x, int y)
{
//moveMouse(x, y);
Task.Delay(500);
//für einen Moitor
// Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
//für 2 Monitore
Bitmap bitmap = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height);
Graphics graphics = Graphics.FromImage(bitmap as Image);
graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);
Color desiredPixelColor = ColorTranslator.FromHtml(hexcode);
Color currentPixelColor = bitmap.GetPixel(x, y);
if (desiredPixelColor == currentPixelColor)
{
listBox1.Items.Add(String.Format("Pixel gefunden at {0},{1} ", x, y));
//wenn gefunden mace dies
return true;
}
else
{
string strHtmlColor = System.Drawing.ColorTranslator.ToHtml(currentPixelColor);
listBox1.Items.Add(String.Format("Pixel NICHT at {0},{1} -> " + strHtmlColor, x, y));
return false;
}
// GetPixel(Cursor.Position);
}
Das funktioniert sehr gut WENN der Hex genau übereinstimmt, leider sind die Pixel nicht immer 100 % gleich sondern haben geringe abweichungen, wie zum Beispiel #FFFFFF wird gesucht und #FFFFFA ist es nun.
Wie könnte man damit umgehen eine kleine abweichung mit einzukalkulieren?!
Wäre es sinnvoller ein Bild zu erstellen und dies suchen zu lassen?
Lg
Der Farbabstand wird im deutschen Delta E genannt und z.B. mittels des euklidischen Abstandes (der RGB-Werte) könntest du die Genauigkeit festlegen.
Du solltest aber dann direkt Color
übergeben (und keinen Hexcode-String).
besteht den die Möglichkeit von dem gesuchten ein ein Bild zu machen und den desktop danach durchsuchen zu lassen?
Du legst doch schon mittels graphics.CopyFromScreen(...)
einen Screenshot an (und hast dann in bitmap
das Bild).
Und mittels bitmap.GetPixel(x, y)
greifst du ja schon auf einen einzelnen Pixel zu -> darum kannst du selbstverständlich auch eine Schleife packen.
Du solltest nicht einfach so etwas (aus dem Internet) kopieren, ohne es zu verstehen.
Was ist denn dein genaues Ziel?
ich verstehe schon was mein code da veranstaltet, aber ich kann keinen zusammenhang zu meinem vorhaben herstellen... bzw wie ich es realsieren könnte. Die farbwerte auslesen und vergleichen ist ja wie beschrieben kein Problem.
Ich habe ein Programm, in dem Texte angezeigt werden, ABER mit leichter transparenz. Das heisst das zB #00000 auch zu #0000FF werden kann, also mit abweichungen. Mein vorhaben war es dies mit einzukalkulieren, ob dies dann passt ist auch fraglich.
Wäre es den machbar und oder sinnvoll von dem gesuchten Text ein Screenshot zu machen und dies auf dem Desktop zu suchen und nicht einzelne Pixel?