2015-06-09 48 views
3

我正在将CMYK jpeg图像加载到NSImage, 如何提取特定像素的c,m,y,k值? 我怎样才能获得所有CMYK像素数据的字节数组... 我使用.bitmapData RGB图像,但它似乎是CMYK图像它都是0xff。CMYK NSImage获取像素数据

我试图转换到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 

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

+0

我认为这是gnustep你遇到的问题。使用苹果常规LLVM编译器,您的代码可以在我的Mac上正常工作。试试'[rep colorAtX:0 y:0]'看看你回来了什么。它应该像'NSDeviceCMYKColorSpace'后面跟着4个颜色值。 http://i.imgur.com/YqExUqc.png –

回答

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); 
    } 
} 

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