数字色彩计逻辑 - 它是如何做到的?

Dr.*_*eon 5 cocoa objective-c

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

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

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


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

icc*_*cir 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
Run Code Online (Sandbox Code Playgroud)

CGS* 例程是私有 SPI - 好的一面是,有一个等效的公共 API,称为CGWindowListCreateImage()

一旦你有了 CGImageRef,你就可以使用以下方法访问原始像素数据:

CGImageGetDataProvider
CGDataProviderCopyData
Run Code Online (Sandbox Code Playgroud)