1

我正在使用以下代码捕获 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 会在此过程中的某处校正颜色。有任何想法吗?

谢谢!

4

1 回答 1

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];
于 2012-08-21T06:37:03.950 回答