我正在研究 CIColorWheelGenerator 的 MacAppStore 友好实现。这是一个简单的 CIFilter,可以生成您可以在 Apple 的颜色选择器中看到的色轮。遗憾的是,这是私有(private)事物的一部分,Apple 不允许我们在发布到 MacAppStore 的应用程序中使用它。
我已经部分成功,我得到了一个有效的实现,但它仍然停留在 genericRGB 颜色空间中。 Apple 的工作原理是使用 sRGB 色彩空间。我找到了解决方法:
CGColorSpaceRef cSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
NSDictionary *dict = @{kCIContextWorkingColorSpace : CFBridgingRelease(cSpace),};
CIContext *ctx = [CIContext contextWithCGContext:[[NSGraphicsContext currentContext] graphicsPort] options:dict];
[ctx drawImage:_wheelImage inRect:rect fromRect:_wheelRect];
(_wheelImage 是使用我的色轮生成器过滤器生成的 CIImage)。
我已经在 QuartzComposer 中检查过,CIColorWheelGenerator 接缝可以使用 sRGB 颜色空间(基于我的颜色感知以及我自己的实现没有给出相同结果的事实)。 知道问题来了:我是否误解了什么,我在QC中使用的CIColorWheelGenerator不仅仅是一个CIFilter,而且还带有更复杂的代码,或者是否可以在CIFilter中指定工作色彩空间(默认为genericRGB)?
这是一张图片,您可以看到苹果的色轮(右侧)与我的不同(逻辑上,左侧):
我的应用程序(左)与 Apple 的颜色选择器(右)你可以看到一些相似之处:
最佳答案
Quartz Composer 有一个隐藏设置。按住 option 键,同时从菜单中选择首选项。在(编辑器) Pane 中,将有一个“un CorrectedCoreImage”设置。检查它,关闭 QC,然后重新打开它。现在,所有滤镜都将在未校正的色彩空间中运行。重复该过程以返回正常的色彩空间转换。
除此之外,我不知道有什么方法可以在 Quartz Composer 中更改颜色空间。
关于objective-c - 更改 CIFilter 的工作色彩空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14564815/