所以,这基本上是我很好奇的:

  • 这个小工具是如何获取鼠标下方的区域(和特定像素)的?
  • 然后它如何分析所选点的 RGB 值?

  • 有任何想法吗?也欢迎指出我正确的方向。

    提示 :我对原生的 Objective-C/Cocoa 方法更感兴趣。

    最佳答案

    基本上,DigitalColor Meter 获取鼠标坐标,在该区域周围获取 CGImageRef 屏幕截图,然后访问原始像素数据以计算 RGB 值。

    您可以使用 nm 命令发现应用程序调用了哪些 API。在这种情况下:
    nm /Applications/Utilities/DigitalColor\ Meter.app/Contents/MacOS/DigitalColor\ Meter
    这揭示了一些有趣的调用:

    U _CGDisplayBounds
    U _CGGetDisplaysWithPoint
    U _CGSCaptureWindowsContentsToRectWithOptions
    U _CGSCurrentInputPointerPosition
    U _CGSGetOnScreenWindowCount
    U _CGSGetOnScreenWindowList
    

    CGS* 例程是私有(private) SPI - 从好的方面来说,有一个名为 CGWindowListCreateImage() 的公共(public) API 等价物

    拥有 CGImageRef 后,您可以使用以下方法访问原始像素数据:
    CGImageGetDataProvider
    CGDataProviderCopyData
    

    10-08 02:16