在objective-c cocoa app中将颜色设置为屏幕上的一个像素

时间:2010-12-09 06:15:48

标签: objective-c cocoa macos colors pixel

我正在尝试在objective-c中创建一个颜色选择器可可应用程序,这样我就可以获得屏幕上任何像素的颜色。有没有办法在objective-c中获得某个屏幕像素的颜色?

2 个答案:

答案 0 :(得分:14)

您可以使用CGDisplayCreateImageForRect来获取包含您感兴趣的点的CGImageRef。一旦有了CGImage,您可以通过将图像渲染到自定义缓冲区或使用NSBitmapImageRep的initWithCGImage来获取颜色值。然后colorAtX:y:。 NSBitmapImageRep方法的“写入堆栈溢出代码窗口”代码如下所示:

NSColor *MyColorAtScreenCoordinate(CGDirectDisplayID displayID, NSInteger x, NSInteger y) {
    CGImageRef image = CGDisplayCreateImageForRect(displayID, CGRectMake(x, y, 1, 1));
    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:image];
    CGImageRelease(image);
    NSColor *color = [bitmap colorAtX:0 y:0];
    [bitmap release];
}

这可能会返回设备颜色空间中的颜色。改为在校准的RBG颜色空间中返回颜色可能很有用。

答案 1 :(得分:0)

试试NSReadPixel。您需要获取当前鼠标位置并将其转换为适当的坐标参考框架。获得颜色后,您可能需要根据需要将其转换为不同的颜色空间。