CMYK NSImage获取像素数据

时间:2015-06-09 11:37:57

标签: objective-c macos cocoa nsimage gnustep

我将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

p.s我不能使用核心图形,因为这个可可代码是使用GNUStep编译的。

2 个答案:

答案 0 :(得分: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);
    }
}

如果它能让你想要的话,这应该是一个很好的起点。

答案 1 :(得分:0)

你看过这个网站吗?这接近你想要的吗?

http://oleb.net/blog/2011/05/using-cocoa-to-convert-images-from-rgb-to-cmyk/