cocoa:读取NSImage的像素颜色

mtm*_*ock 5 cocoa nsimage nsbitmapimagerep nscolor

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

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

Rob*_*ger 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];
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请注意,您可能希望使用imageRep.pixelsWide和imageRep.pixelsHigh,因为它们与分辨率无关.使用此示例中的大小时,它不一定与您尝试读取的像素相对应. (3认同)