CMYK NSImage 获取像素数据

3
我正在将CMYK JPEG图像加载到NSImage中,如何提取特定像素的C、M、Y、K值?如何获取包含所有CMYK像素数据的字节数组...对于RGB图像,我使用.bitmapData,但对于CMYK图像,似乎全部为0xff。
我尝试将NSImage转换为RGB颜色空间,但我不喜欢结果...我实际上想要的是C、M、Y、K值而不是相应的RGB值。
    NSImage *image = [[NSImage alloc] initWithContentsOfFile:inputImageString];

        NSBitmapImageRep* rep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
    bool isCMYK = [rep.colorSpaceName isEqualToString: NSDeviceCMYKColorSpace];
    const unsigned char *bytes = rep.bitmapData;
// all values at bytes are not weird and does not represent CMYK values

附言:由于此Cocoa代码是使用GNUStep编译的,因此我无法使用核心图形技术。


我认为你遇到了gnustep的问题。使用苹果常规的LLVM编译器,在我的Mac上,你的代码可以正常工作。尝试一下[rep colorAtX:0 y:0],看看你得到了什么。它应该是类似于NSDeviceCMYKColorSpace后跟着4个颜色值。http://i.imgur.com/YqExUqc.png - Tim Bodeit
1个回答

1
我没有测试过这段代码,但它是否返回正确的值?
NSImage *image = [[NSImage alloc] initWithContentsOfFile:inputImageString];

NSBitmapImageRep* rep = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]];
bool isCMYK = [rep.colorSpaceName isEqualToString: NSDeviceCMYKColorSpace];
if(isCMYK){
    NSColor* aColor = [raw_img colorAtX:0 y:0];
    NSString* theColorSpace = [aColor colorSpaceName];

    if ([theColorSpace isEqualToString: NSDeviceCMYKColorSpace]){
        NSLog(@"C:%f,M%f,Y:%f,K%f",
            aColor.cyanComponent,
            aColor.magentaComponent,
            aColor.yellowComponent,
            aColor.blackComponent);
    }
}

如果这能满足你的需求,那么这应该是一个很好的起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接