我正在尝试创建一个应用程序,当屏幕上的像素颜色变为另一种颜色时(我知道它是什么),它会做一些事情,对于它的作用并不重要。
无论如何,我正在使用这个:
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.1 秒)(如上例所述),它就不起作用。
它停留在那里的时间应该没有问题,因为我的应用程序检查像素的速度非常快,如下面的调试所示:
2010-01-04 22:12:58.230 appname[2372:a0f] Checked
2010-01-04 22:12:58.231 appname[2372:a0f] Checked
有任何想法吗?:)