【问题标题】:Quartz/Cocoa gradient fill with interpolation in a linear color space?石英/可可渐变填充线性颜色空间中的插值?
【发布时间】:2020-11-18 04:55:23
【问题描述】:

下面是两个渐变。

在渐变 A 中,颜色在线性颜色空间中从红色插值到绿色。即“伽玛校正”。

梯度 B 是在 macOS 上使用 NSGradient 在 Objective-C 中绘制的。 macOS 似乎在屏幕颜色空间(sRGB 或类似)中插入渐变的颜色。这种渐变的问题在于中点的颜色很暗而且“浑浊”。

在 macOS 上,使用 Quartz 或 Cocoa 在两种颜色之间绘制渐变,是否可以指定计算渐变的颜色空间,以在图像上实现更均匀的亮度,例如“渐变 A”?

(该应用程序是一个跨平台的绘图框架,希望颜色在 Windows、macOS 和 IOS 中呈现一致)。

【问题讨论】:

  • 参见[NSGradient 的文档]),找到“colorspace”。你试过init(colors:atLocations:colorSpace:)吗?
  • 啊,指定 colorSpace:genericRGBColorSpace 确实会改变渐变。结果介于图中的两个渐变之间,但绝对是一种改进。想正式回答问题?

标签: macos cocoa graphics


【解决方案1】:

要渲染在线性颜色空间中插入颜色的渐变,请使用“cgColorSpaceGenericRGBLinear”颜色空间。

CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGBLinear);
NSColorSpace* nsColorSpace = [[NSColorSpace alloc] initWithCGColorSpace:colorSpace];

gradient = [[NSGradient alloc] initWithColors:colors atLocations: locations2.data() colorSpace: nsColorSpace];

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 2015-12-21
    • 2014-01-31
    • 1970-01-01
    • 2012-07-31
    • 2014-10-26
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多