gpt4 book ai didi

ios - 如何转换颜色?

转载 作者:行者123 更新时间:2023-11-28 07:52:28 28 4
gpt4 key购买 nike

我想做一些特殊的颜色比较。在我的研究过程中,我发现不应该使用 RGB 光谱进行比较,因为一些不同的幽灵,如 HSL & HSV。旨在“更符合人类视觉感知颜色制作属性的方式”(引用维基百科)

所以我需要一种方法来将不同的 colorSystems 相互转换。

One of the most important conversion for my purposes would be to convert HEX to HSL (using Swift)


因为我是一个该死的初学者,这段代码是我目前所拥有的全部:

// conversion HEX to HSL
HexToHSL("#F23CFF") // HSL should be "HSL: 296° 100% 62%"
func HexToHSL(_ hex: String) {
let rgb = HexToRgb(hex)
let r = rgb[0],
g = rgb[1],
b = rgb[2],
a = rgb[3]

}

func RgbToHSL(r: Int, g: Int, b: Int) -> [Int] {
let r = r/255, g = g/255, b = b/255;

let max = [r, g, b].max()!, min = [r, g, b].min()!;
let (h, s, l) = Double(max + min)*0.5; // "Expression type 'Double' is ambiguous without more context"

if (max == min) {
h = s = 0;
} else {
let d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
h /= 6;
}
return [ h, s, l ];
}
func HexToRgb(_ hex: String) -> [Int] {
let hex = hex.substring(fromIndex: 1)
var rgbValue:UInt32 = 0
Scanner(string: hex).scanHexInt32(&rgbValue)
let red = Int((rgbValue & 0xFF0000) >> 16),
green = Int((rgbValue & 0x00FF00) >> 8),
blue = Int(rgbValue & 0x0000FF),
alpha = Int(255.0)
return [red, green, blue, alpha]
}

非常感谢任何有关如何修复从 HEX 到 HSL 的颜色转换的帮助,在此先感谢!

注意:还有一个javascript sample进行某种颜色转换。也许它有帮助 :)

编辑:我已经将 rgb 的代码固定为 hsl,如下所示:

func RgbToHSL(_ rgb: [Int]) -> [Double] {
let r = Double(rgb[0])/255, g = Double(rgb[1])/255, b = Double(rgb[2])/255;
let max = [r, g, b].max()!, min = [r, g, b].min()!;
var h = Double(max + min)*0.5,
s = Double(max + min)*0.5,
l = Double(max + min)*0.5;

if (max == min) {
h = 0
s = 0
l = 0
} else {
let d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);

switch (max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
default: break;
}
h /= 6;
}
return [ h, s, l ];
}

...但是 rgb = [242, 60, 255] 的结果将是 [0.8222222222222223, 1.0, 0.61764705882352944] -- 看起来不太好因为它应该是 296° 100% 62%! :o

最佳答案

为了比较颜色,从而执行颜色差异,您需要使用感知均匀的色彩空间。

HSL HSV 实际上是非常差的色彩空间,它们不应该用于正确的色度计算,因为它们的亮度轴不是 Luminance 与 CIE L*a*b* 等色彩空间相反 CIE L*u*v* .

在色彩科学中有多种计算色差的方法,通常是最简单的,假设您使用统一的色彩空间的方法是欧氏距离。

这就是 DeltaE CIE 1976 使用 CIE L*a*b* 色彩空间。 CIE 注意到一些具有低 DeltaE 值的颜色实际上看起来非常不同,这是 CIE L*a*b* 颜色空间在感知上不够均匀的副作用。从那里的研究产生了许多新的色差公式和新的感知均匀的色彩空间。

这是一个从最旧到最新的显着色差公式和感知均匀色彩空间的非详尽列表,请注意实现的复杂性几乎遵循列表顺序:

我建议看一下像 ICTCPJzAzBz 这样的东西,它们提供了良好的性能并且实现起来并不复杂,或者至少使用 CIE L *a*b* 具有欧式距离,但避免使用 HSLHSV

我们在 Colour 中提到的所有内容都有引用实现.

关于ios - 如何转换颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49335399/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com