【问题标题】:Detect color under mouse (Mac)检测鼠标下的颜色 (Mac)
【发布时间】:2012-07-31 18:16:02
【问题描述】:

我已经在网上搜索了几个小时,但没有找到任何东西。

我想知道如何获取鼠标指针当前所在像素的颜色。 我编写了一个控制台应用程序,所以我没有要覆盖的窗口或其他东西。

更多细节: 当我构建和运行程序( cmd+r )时,它应该给我一个控制台日志,显示我的鼠标指针当前所在的颜色。这可能吗?

感谢您的回答!

你好,丹尼尔

PS:我来自德国,只是说(语言错误)

【问题讨论】:

    标签: objective-c macos colors detect


    【解决方案1】:

    this question and answer为起点,这是一个功能齐全的命令行程序。您还需要链接到 Cocoa 框架。

    #import <Foundation/Foundation.h>
    #import <Cocoa/Cocoa.h>
    
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
    
            // Grab the current mouse location.
            NSPoint mouseLoc = [NSEvent mouseLocation];
    
            // Grab the display for said mouse location.
            uint32_t count = 0;
            CGDirectDisplayID displayForPoint;
            if (CGGetDisplaysWithPoint(NSPointToCGPoint(mouseLoc), 1, &displayForPoint, &count) != kCGErrorSuccess)
            {
                NSLog(@"Oops.");
                return 0;
            }
    
            // Grab the color on said display at said mouse location.
            CGImageRef image = CGDisplayCreateImageForRect(displayForPoint, CGRectMake(mouseLoc.x, mouseLoc.y, 1, 1));
            NSBitmapImageRep* bitmap = [[NSBitmapImageRep alloc] initWithCGImage:image];
            CGImageRelease(image);
            NSColor* color = [bitmap colorAtX:0 y:0];
            NSLog(@"%@", color);
            [bitmap release];
        }
        return 0;
    }
    

    如果您想继续运行,则需要采取额外措施来创建和驱动运行循环。

    【讨论】:

    • 哦哇非常感谢你!这正是我正在寻找的!再次感谢您 ;-) 但有一件事,在发布池中发布位图,这真的有必要吗?
    • 这是必要的,因为此示例中的位图不是自动释放的。已分配。 @autoreleasepool 只排出自动释放的对象。
    • 不管怎样,坐标系对我来说并不匹配。我必须这样做... mouseLoc = {screenHeight} - mouseLoc.y + 20;
    • 通过将 CGEventCreate(null) 传递给 CGEventGetLocation 来获取鼠标位置将为您提供正确的坐标系供您参考。 NS 和 CG 使用不同的坐标系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2018-08-26
    • 2011-04-26
    • 2022-01-18
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多