objective-c - 更改 CIFilter 的工作色彩空间

标签 objective-c cocoa cifilter cgcolorspace

我正在研究 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)?

这是一张图片,您可以看到苹果的色轮(右侧)与我的不同(逻辑上,左侧):

tiny differences

我的应用程序(左)与 Apple 的颜色选择器(右)你可以看到一些相似之处:

tiny differences 2

最佳答案

Quartz Composer 有一个隐藏设置。按住 option 键,同时从菜单中选择首选项。在(编辑器) Pane 中,将有一个“un CorrectedCoreImage”设置。检查它,关闭 QC,然后重新打开它。现在,所有滤镜都将在未校正的色彩空间中运行。重复该过程以返回正常的色彩空间转换。

除此之外,我不知道有什么方法可以在 Quartz Composer 中更改颜色空间。

关于objective-c - 更改 CIFilter 的工作色彩空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14564815/

相关文章:

ios - 当呈现 actionSheet (AlertController) 时,如何修复 PopoverViewController 的边界?

objective-c - IOS 进程内部 - 如何获取信息?

objective-c - --deep 标志有什么作用?

macos - NSOpenPanel 无法在 El Capitan 中添加accessoryView(10.11)

ios - 如何使用 CIQRCodeGenerator 生成中间带有 Logo 的二维码

swift - 为什么这个 Swift UIImage 函数会溢出我的内存?

objective-c - 方法困惑的线程安全

cocoa - 使用 NSProxy 和forwardInitation :

ios - 在 iOS 13 上暂停时强制重绘 AVPlayerLayer

ios - 在 UILongPressGestureRecognizer 上无法检测到右(按下)按钮?