CGDisplayCreateImageForRect图像与捕获图像的颜色不匹配

时间:2012-08-21 04:00:37

标签: objective-c colors screenshot color-space

我正在使用以下代码捕获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在这个过程的某处纠正了颜色。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试深入了解如下捕获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];