5

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

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

4

2 回答 2

11

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

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()函数获取当前坐标系中像素的颜色。

于 2012-03-16T01:18:53.807 回答
1

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

[yourImage lockFocus]; // yourImage is just your NSImage variable
NSColor *pixelColor = NSReadPixel(NSMakePoint(1, 1)); // Or another point
[yourImage unlockFocus];
于 2018-01-23T11:15:43.143 回答