我应该为 CIImage 还是 CIContext 设置颜色空间?

Vad*_*ick 8 core-image color-space cgcolorspace ciimage

Core Image 让我们为 CIContext 指定颜色空间,如下所示:

let context = CIContext(options: [kCIContextOutputColorSpace: NSNull(),
                        kCIContextWorkingColorSpace: NSNull()])
Run Code Online (Sandbox Code Playgroud)

或者对于 CIImage,如下所示:

let image = CIImage(cvImageBuffer: inputPixelBuffer,
                    options: [kCIImageColorSpace: NSNull()])
Run Code Online (Sandbox Code Playgroud)

这三者有何关系:

  • kCIContextOutputColorSpace
  • kCIContext工作颜色空间
  • kCI图像颜色空间

设置它们各自的优点和缺点是什么?

Jes*_*ock 1

Apple 的文档解释了这些差异:

\n
\n

工作色彩空间

\n

用于图像操作的颜色空间的键。

\n

工作色彩空间决定了执行滤镜内核时使用的色彩空间;Core Image 自动在输入图像和输出上下文的源颜色空间和目标颜色空间之间进行转换。创建 Core Image 上下文时,您可以使用选项字典中的workingColorSpace 键指定工作颜色空间。

\n

输出颜色空间

\n

在将图像渲染到上下文之前用于图像的颜色空间的键。默认情况下,Core Image 使用 GenericRGB 颜色空间,将颜色匹配留给系统。

\n

要请求 Core Image 不执行颜色管理,请将 NSNull 对象指定为该键的值。对于不\xe2\x80\x99t 包含颜色数据的图像(例如高程图、法线矢量图和采样函数表),请使用此选项。

\n
\n

如果图像用颜色空间标记,则它们会在过滤之前转换为线性工作空间。如果使用 标记 CIImage DeviceRGB,则在过滤之前会将其伽玛校正为线性。

\n

将键设置为NSNull指示 CoreImage 保持颜色值不变,这称为unmanaged color space.

\n