Guten Tag,
mein Programm soll auf meinem Desktop an bestimmten x,y Koordinaten die Pixelfarbe auslesen.
So sieht mein jetziger code aus:
foundColorToVar(getPixelColor(0, 0));
private Color GetColorAt(int x, int y)
{
IntPtr desk = GetDesktopWindow();
IntPtr dc = GetWindowDC(desk);
int a = (int)GetPixel(dc, x, y);
ReleaseDC(desk, dc);
return Color.FromArgb(255, (a >> 0) & 0xff, (a >> 8) & 0xff, (a >> 16) & 0xff);
}
private int getPixelColor(int x, int y)
{
Color color1 = GetColorAt(x, y);
int r = color1.R;
int g = color1.G;
int b = color1.B;
int pixelColor = int.Parse(r.ToString() + g.ToString() + b.ToString());
return pixelColor;
}
Würde gerne wissen ob es eine schnellere Variante als die von mir gefundene gibt.
Ein Durchlauf für 20 Pixel dauert ~300ms. Dauert mir leider etwas zu lange.
Ist es möglich diesen Vorgang noch zu beschleunigen?
Danke und Grüße
Hallo mrleem22,
schau dir mal GetPixel und SetPixel um Längen geschlagen. 800 mal schneller an. Ggf. musst du das ein wenig anpassen, aber das zeigt die Richtung wie es schneller geht.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Die Pixel werden nun schnell genug vom davor erstellten Bitmap abgefragt.
Leider ist mir die CopyFromScreen methode noch nicht performant genug. Gibt es da noch eine andere Lösung ohne leichten "Lag" beim Ausführen dieser Methode im ~50ms Takt außer auf directx zurückzugreifen zu müssen?
GFX.CopyFromScreen(rectPxl.X, rectPxl1.Y, 0, 0, rectPxl.Size,CopyPixelOperation.SourceCopy);
Habe lange gesucht und konnte nur die Lösung DirektX finden.
edit:
Ich erkläre vielleicht erst mal was mein Ziel ist.
Möchte an mehreren Positionen vom Desktop je einige Pixel auf Farbe prüfen lassen und diese in ein Array schreiben.
Die Positionen an welchen sich die Pixel befinden ist bekannt, deshalb erstelle ich nur ein Bitmap des Bereichs in welchen sich die Pixel befinden per rectangle.
Danke und Grüße
mrleem22