NSReadPixel() 总是 returns 无

NSReadPixel() always returns nil

我想创建一个颜色选择器。所以我认为使用 NSReadPixel 是接收像素颜色的好方法。所以我基本上做的是:

class CustomWindowController: NSWindowController {

    override func mouseMoved(with event: NSEvent) {

        let mouseLocation = NSEvent.mouseLocation()
        let pickedColor = NSReadPixel(mouseLocation)

    }

}

但是pickedColor总是returnsnil。即使我尝试使用固定点 "readPixel"(出于测试目的),它仍然 returns nil。我错过了什么?

编辑#1

我从答案中遵循了 NSBitmapImageRep / colorAt 方法并注意到生成的 NSColor 似乎与它应该的有点不同(在大多数情况下更亮)(采取看截图)。我是否必须考虑 colorSpaces 左右? (以及如何?)

编辑 #2

成功了 - bitmap.colorSpaceName = NSDeviceRGBColorSpace 成功了。

真的不行。我使用此代码获取像素颜色

NSPoint _point = [NSEvent mouseLocation];

CGFloat x = floor(_point.x);
CGFloat y = [NSScreen mainScreen].frame.size.height - floor(_point.y);
//it needs because AppKit and CoreGraphics use different coordinat systems

CGWindowID windowID = (CGWindowID)[self windowNumber];

CGImageRef pixel = CGWindowListCreateImage(CGRectMake(x, y, 1, 1), kCGWindowListOptionOnScreenBelowWindow, windowID, kCGWindowImageNominalResolution);

NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:pixel];
CGImageRelease(pixel);

NSColor *color = [bitmap colorAtX:0 y:0];