5

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

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

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


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

4

1 回答 1

2

基本上,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
于 2012-09-07T00:13:10.637 回答