无法检测像素中像素的颜色......颜色变化

时间:2010-01-04 22:23:44

标签: objective-c macos colors pixel

我正在尝试创建一个应用程序,当屏幕上像素的颜色变为另一个(我知道它是什么)它做了什么,对它的作用并不重要。

无论如何,我正在使用它:

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

然后,我希望它改变到这里的颜色:

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

我在比较这里的颜色:

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]]) {

我知道while / if部分可以做得更好,但它应该工作得很好,而不用担心优化应用程序,直到它实际工作大声笑。

现在,例如,如果像素的颜色实际上没有快速变化(就像颜色保持一点那样),它的效果非常好。如果它像一个颜色可以移动并达到283 * 420的像素,但不会长时间停留(如0.1s)(如上例所示),它不起作用。

它停留在那里的时间不应该是一个问题,因为我的应用程序正在快速检查像素,如调试中所示:

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

有什么想法吗? :)

2 个答案:

答案 0 :(得分:2)

正如gs所指出的,这不是微不足道的。您可能想看看Apple CIColorTracking示例,该示例使用自定义Core Image过滤器来检测运动图像中的像素:

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

有关于如何在这里完成的更多信息:

http://parmanoir.com/How_Core_Image_Color_Tracking_works

答案 1 :(得分:0)

移动物体可能永远不会到达那个点。您的显示器的更新频率约为50赫兹,如果单个像素行进速度超过50像素/秒它将不会出现在每个像素上!

对于视频缓冲区也是如此,因为所有图纸在Mac OS X中都是双缓冲的,每秒更新50次。