DigitalColor Meter逻辑 - 它是如何做到的?

时间:2012-09-06 01:38:57

标签: objective-c cocoa

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

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

有什么想法吗?指出我正确的方向也是受欢迎的。


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

1 个答案:

答案 0 :(得分:1)

基本上,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 - 从好的方面来看,有一个名为CGWindowListCreateImage()

的公共API等价物

获得CGImageRef后,您可以使用以下方式访问原始像素数据:

CGImageGetDataProvider
CGDataProviderCopyData