2015-06-09 50 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); 
    } 
} 

這應該是一個很好的起點,如果它給你想要你想要的。