我正在开发一个 MacAppStore 友好的 CIColorWheelGenerator 实现。它是一个简单的 CIFilter,它生成您可以在 Apple 的颜色选择器中看到的色轮。遗憾的是,这是 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 的色轮(右侧)与我的不同(逻辑上,左侧):
我的应用程序(左)与 Apple 的颜色选择器(右)你可以看到一些相似之处: