【问题标题】:CGDisplayCreateImageForRect image does not match colors with captured imageCGDisplayCreateImageForRect 图像与捕获的图像颜色不匹配
【发布时间】:2012-08-21 04:00:37
【问题描述】:

我正在使用以下代码捕获 1px x 1px 的屏幕截图。然后我对图像进行采样并获得一个 NSColor。

CGImageRef image = CGDisplayCreateImageForRect(displayID, CGRectMake(0, 0, 1, 1));

NSBitmapImageRep *rawImage = [[NSBitmapImageRep alloc] initWithCGImage:image];
NSColor *convertedColor = [rawImage colorAtX:0 y:0];

除了捕获像素的颜色与源图像上的颜色不匹配外,一切正常。例如:我在 Photoshop 上制作了一个红色方块。我将正方形的颜色设置为 RGB 红色:255、绿色:0 和蓝色:0。当我在屏幕上的那个正方形内捕获一个像素时,我得到 RGB 红色:255,绿色:0,蓝色:17。有没有办法使捕获的图像与原始颜色匹配?

编辑: 另外,当我在photoshop中截取红色方块时,读取截图上的RGB颜色,颜色也是红色:255,绿色:0,蓝色:17。这似乎是操作系统上的色彩空间行为。这会是预期的行为吗?这段代码基本上是一个颜色选择器,就像 Photoshop 上的颜色选择器一样。但是,我假设 Photoshop 会在此过程中的某处校正颜色。有什么想法吗?

谢谢!

【问题讨论】:

    标签: objective-c colors screenshot color-space


    【解决方案1】:

    尝试更深入地捕获这样的 1px 屏幕截图:

    CGImageRef image = CGDisplayCreateImageForRect(displayID, CGRectMake(5, 5, 1, 1)); //another pixel then first pixel
    NSBitmapImageRep *rawImage = [[NSBitmapImageRep alloc] initWithCGImage:image];
    NSColor *convertedColor = [rawImage colorAtX:0 y:0];
    

    【讨论】:

    • 如果我理解正确,更改是读取一个更位于红色正方形中心的像素,对吗?我已经这样做了,实际上用鼠标光标控制像素的 x,y 位置,结果仍然相同。谢谢王子
    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多