【问题标题】:CMYK NSImage get pixel dataCMYK NSImage 获取像素数据
【发布时间】:2015-06-09 11:37:57
【问题描述】:

我正在将 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 编译的。

【问题讨论】:

  • 我认为这是您遇到的 gnustep 的问题。使用苹果常规 LLVM 编译器,您的代码在我的 mac 上运行良好。试试[rep colorAtX:0 y:0] 看看你会得到什么。它应该类似于 NSDeviceCMYKColorSpace 后跟 4 个颜色值。 i.imgur.com/YqExUqc.png

标签: objective-c macos cocoa nsimage gnustep


【解决方案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);
    }
}

如果它可以满足您的需求,这应该是一个很好的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多