Frage

Ich versuche, eine Anwendung zu erstellen, dass, wenn die Farbe eines Pixels auf dem Bildschirm Änderungen auf einen anderen (das ich weiß, was es ist) es etwas tut, nicht wirklich auf die Frage aus, was es tut.

Wie auch immer, ich bin mit dieser:

 CGImageRef window283x420 = CGWindowListCreateImage(NSMakeRect(284, 420, 1, 1), kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault);
 NSBitmapImageRep *cannonOne = [[NSBitmapImageRep alloc] initWithCGImage:window283x420];

Dann wird die Farbe, die ich es erwarte hier zu ändern:

NSColor *color = [NSColor colorWithCalibratedRed:0.521569 green:0.380392 blue:0.231373 alpha:1];

Und ist im Vergleich die Farben hier:

while (![color isEqualToColor:[cannonOne colorAtX:0 y:0]]) {
 CGImageRef window283x420 = CGWindowListCreateImage(NSMakeRect(284, 420, 1, 1), kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault);
 NSBitmapImageRep *cannonOne = [[NSBitmapImageRep alloc] initWithCGImage:window283x420];
 if ([color isEqualToColor:[cannonOne colorAtX:0 y:0]]) {

Ich weiß, die während / wenn ein Teil besser gemacht werden könnte, aber es sollte gut funktionieren und keine Sorgen über die App zu optimieren, bis es tatsächlich funktioniert lol.

Nun, wenn zum Beispiel der Farbe des Pixels nicht wirklich schnell ändern (wie die Farbe wie das bleibt für ein bisschen) es funktioniert perfekt. Wenn es wie ein Pixel mit einer Farbe, die sich bewegt und erreicht 283 * 420 aber bleibt nicht lange dort (wie 0,1s) (wie in dem oben beschriebenen Beispiel) es funktioniert nicht.

Die Zeit, die bleibt dort kein Problem sein sollte, wie meine app das Pixel wirklich schnell ist die Überprüfung, wie hier im Debug gesehen:

2010-01-04 22:12:58.230 appname[2372:a0f] Checked
2010-01-04 22:12:58.231 appname[2372:a0f] Checked

Irgendwelche Ideen? :)

War es hilfreich?

Lösung

Wie gs weist darauf hin, das ist nicht trivial. Vielleicht möchten Sie einen Blick auf das Apple CIColorTracking Beispiel nehmen, die eine benutzerdefinierte Core Image Filter verwendet Pixel in einem bewegten Bild zu erkennen:

http://developer.apple.com/mac/library/samplecode/ CIColorTracking /

Es ist ein wenig mehr Informationen darüber, wie es hier getan:

http://parmanoir.com/How_Core_Image_Color_Tracking_works

Andere Tipps

Es ist möglich, dass ein sich bewegendes Objekt nicht einmal diesen Punkt erreicht . Ihr Monitor verfügt über eine Update-Frequenz von etwa 50 Hertz, wenn ein einzelnes Pixel fährt schneller als 50 Pixel / s es wird nicht auf jedem Pixel erscheinen!

Das ist auch für den Videopuffer wahr, weil alle Zeichnungen doppelt in Mac OS X gepuffert werden, aktualisiert 50 mal pro Sekunde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top