我有NSImage
。我想在某些x和y处读取NSColor
的像素。 Xcode似乎在colorAtX:y:
上有一个NSImage
方法,但这会导致崩溃,说NSImage没有这样的方法。我已经看到了一些示例,您可以在其中创建NSBitmapImageRep
并在其上调用相同的方法,但我无法将NSImage成功转换为NSBitmapImageRep
。由于某种原因,NSBitmapImageRep
上的像素不同。
必须有一种简单的方法来做到这一点。这不可能是这么复杂。
答案 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];