所以,这基本上是我很好奇的:
- 这个小工具如何获取鼠标下方的区域(和特定像素)?
- 然后它如何分析该选定点的 RGB 值?
有任何想法吗?也欢迎我指出正确的方向。
提示:我会对原生的 Objective-C/Cocoa 方法更感兴趣。
所以,这基本上是我很好奇的:
有任何想法吗?也欢迎我指出正确的方向。
提示:我会对原生的 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* 例程是私有 SPI - 好的一面是,有一个公共 API 等效项,称为CGWindowListCreateImage()
一旦有了 CGImageRef,就可以使用以下方法访问原始像素数据:
CGImageGetDataProvider
CGDataProviderCopyData