Я пытаюсь получить значение цвета из пикселя на экране с помощью приложения для какао. Идея заключается в том, что приложение должно иметь возможность получать значение цвета в любом месте экрана, даже вне сферы применения самого приложения.Путаница о получении цвета точки на экране с Objective C
Я сделал кучу исследований, и это, по сути, что я делаю
- (void) keepRunning:(NSTimer *)timer{
NSPoint mouseLoc = [NSEvent mouseLocation];
uint32_t count = 0;
CGDirectDisplayID displayForPoint;
if (CGGetDisplaysWithPoint(NSPointToCGPoint(mouseLoc), 1, &displayForPoint, &count) != kCGErrorSuccess)
{
NSLog(@"Break");
return;
}
CGImageRef image = CGDisplayCreateImageForRect(displayForPoint, CGRectMake(mouseLoc.x-10, mouseLoc.y-10, 1, 1));
NSBitmapImageRep* bitmap = [[NSBitmapImageRep alloc] initWithCGImage:image];
CGImageRelease(image);
NSColor* color = [bitmap colorAtX:0 y:0];
NSLog(@"%@", color);
}
keepRunning пожаров каждые 100 мс. Кажется, это правильный способ сделать это. Проблема в том, что я не получаю правильные значения цвета. Все выведенные значения являются серыми и в основном неправильными. Любые идеи о том, что я делаю неправильно? Это как-то связано с прозрачностью?
Вы правы, что местоположение мыши нужно перевернуть. Однако вы должны сделать это для вызова 'CGGetDisplaysWithPoint()' тоже. Чтобы правильно получить высоту экрана, используйте 'NSHeight ([NSScreen.screens.firstObject frame])'. В интересах OP, 'NSPointToCGPoint()' только преобразует точку между двумя типами. Он не настраивается для разных систем координат. –
Удивительный! Он отлично работает. Я вообще не думал о координирующей системе. – Gibtardo