cocoa:读取NSImage的像素颜色

时间:2012-03-15 18:36:04

标签: cocoa nsimage nscolor nsbitmapimagerep

我有NSImage。我想在某些x和y处读取NSColor的像素。 Xcode似乎在colorAtX:y:上有一个NSImage方法,但这会导致崩溃,说NSImage没有这样的方法。我已经看到了一些示例,您可以在其中创建NSBitmapImageRep并在其上调用相同的方法,但我无法将NSImage成功转换为NSBitmapImageRep。由于某种原因,NSBitmapImageRep上的像素不同。

必须有一种简单的方法来做到这一点。这不可能是这么复杂。

2 个答案:

答案 0 :(得分:9)

如果没有看到你的代码,就很难知道出了什么问题。

您可以使用NSBitmapImageRep方法将图片绘制到initWithData:,然后传入图片的TIFFRepresentation

然后,您可以使用方法colorAtX:y:获取像素值,这是NSBitmapImageRep的方法,而不是NSImage

NSBitmapImageRep* imageRep = [[NSBitmapImageRep alloc] initWithData:[yourImage TIFFRepresentation]];
NSSize imageSize = [yourImage size];
CGFloat y = imageSize.height - 100.0;
NSColor* color = [imageRep colorAtX:100.0 y:y];
[imageRep release];

请注意,您必须对y值进行调整,因为colorAtX:y方法使用从图像左上角开始的坐标系,而NSImage坐标系启动在左下方。

或者,如果像素在屏幕上可见,那么您可以使用NSReadPixel()函数来获取当前坐标系中像素的颜色。

答案 1 :(得分:1)

colorAtX的函数NSBitmapImageRep似乎没有使用设备颜色空间,这可能会导致颜色值与您实际看到的颜色值略有不同。使用此代码在当前设备颜色空间中获取正确的颜色:

[yourImage lockFocus]; // yourImage is just your NSImage variable
NSColor *pixelColor = NSReadPixel(NSMakePoint(1, 1)); // Or another point
[yourImage unlockFocus];