尝试在 swift 中使用 CMYK 值
Trying to use CMYK values in swift
我正在尝试使用 4 个 UISliders 来更改 CMYK 的值,然后在视图中显示颜色,但我尝试了不同的公式,但仍然没有得到正确的值,所以我发现了这个 answer in stack overflow but is for android (Java), 但我没有得到代码,这是我写的:
let cyan = Float( 1 - (cyanSlider.value / 255))
let magenta = Float(1 - (magentaSlider.value / 255))
let yellow = Float(1 - (yellowSlider.value / 255))
cyanValue.text = String(stringInterpolationSegment: cyan)
magentaValue.text = String(stringInterpolationSegment: magenta)
yellowValue.text = String(stringInterpolationSegment: yellow)
答案是:
int r,g,b,c,m,y,k;
int computedC,computedM,computedY;
int minCMY;
if(r==0 && g==0 && b==0) return {0,0,0,1}
computedC = 1 - (r/255);
computedM = 1 - (g/255);
computedY = 1 - (b/255);
minCMY = Math.min(computedC,Math.min(computedM,computedY));
computedC = (computedC - minCMY) / (1 - minCMY) ;
computedM = (computedM - minCMY) / (1 - minCMY) ;
computedY = (computedY - minCMY) / (1 - minCMY) ;
return {computedC,computedM,computedY,minCMY};
我不明白这部分代码:
minCMY = Math.min(computedC,Math.min(computedM,computedY));
我如何在 swift 上写这个?或者 objective -c 我会尝试理解 objective-c 代码,但最好是 swift。
谢谢,我是 swift 的新手:(
Swift 有一个 "built-in" min()
函数,它接受一个变量
参数数量,因此您的代码可以很容易地转换为 Swift as
func RGBtoCMYK(r : CGFloat, g : CGFloat, b : CGFloat) -> (c : CGFloat, m : CGFloat, y : CGFloat, k : CGFloat) {
if r==0 && g==0 && b==0 {
return (0, 0, 0, 1)
}
var c = 1 - r
var m = 1 - g
var y = 1 - b
let minCMY = min(c, m, y)
c = (c - minCMY) / (1 - minCMY)
m = (m - minCMY) / (1 - minCMY)
y = (y - minCMY) / (1 - minCMY)
return (c, m, y, minCMY)
}
请注意,我已经修改了函数以获取 RGB 颜色分量
作为 CGFloat
在 0.0 ... 1.0 范围内,这是通常的表示
在 UIKit 中 类 例如 UIColor
。
但你真正需要的是从CMYK反向转换
到 RGB:
// From http://www.rapidtables.com/convert/color/cmyk-to-rgb.htm
func CMYKtoRGB(c : CGFloat, m : CGFloat, y : CGFloat, k : CGFloat) -> (r : CGFloat, g : CGFloat, b : CGFloat) {
let r = (1 - c) * (1 - k)
let g = (1 - m) * (1 - k)
let b = (1 - y) * (1 - k)
return (r, g, b)
}
您可以使用它来设置视图的背景颜色
CMYK 滑块值:
let c = CGFloat(cyanSlider.value)
let m = CGFloat(magentaSlider.value)
let y = CGFloat(yellowSlider.value)
let k = CGFloat(blackSlider.value)
let (r, g, b) = CMYKtoRGB(c, m, y, k)
rgbView.backgroundColor = UIColor(red: r, green: g, blue: b, alpha: 1.0)
(注意上面的转换方法很简单,为了更好的
结果人们将使用基于 ICC 的颜色转换,例如参见
UIColor CMYK and Lab Values?.)
我正在尝试使用 4 个 UISliders 来更改 CMYK 的值,然后在视图中显示颜色,但我尝试了不同的公式,但仍然没有得到正确的值,所以我发现了这个 answer in stack overflow but is for android (Java), 但我没有得到代码,这是我写的:
let cyan = Float( 1 - (cyanSlider.value / 255))
let magenta = Float(1 - (magentaSlider.value / 255))
let yellow = Float(1 - (yellowSlider.value / 255))
cyanValue.text = String(stringInterpolationSegment: cyan)
magentaValue.text = String(stringInterpolationSegment: magenta)
yellowValue.text = String(stringInterpolationSegment: yellow)
答案是:
int r,g,b,c,m,y,k;
int computedC,computedM,computedY;
int minCMY;
if(r==0 && g==0 && b==0) return {0,0,0,1}
computedC = 1 - (r/255);
computedM = 1 - (g/255);
computedY = 1 - (b/255);
minCMY = Math.min(computedC,Math.min(computedM,computedY));
computedC = (computedC - minCMY) / (1 - minCMY) ;
computedM = (computedM - minCMY) / (1 - minCMY) ;
computedY = (computedY - minCMY) / (1 - minCMY) ;
return {computedC,computedM,computedY,minCMY};
我不明白这部分代码:
minCMY = Math.min(computedC,Math.min(computedM,computedY));
我如何在 swift 上写这个?或者 objective -c 我会尝试理解 objective-c 代码,但最好是 swift。
谢谢,我是 swift 的新手:(
Swift 有一个 "built-in" min()
函数,它接受一个变量
参数数量,因此您的代码可以很容易地转换为 Swift as
func RGBtoCMYK(r : CGFloat, g : CGFloat, b : CGFloat) -> (c : CGFloat, m : CGFloat, y : CGFloat, k : CGFloat) {
if r==0 && g==0 && b==0 {
return (0, 0, 0, 1)
}
var c = 1 - r
var m = 1 - g
var y = 1 - b
let minCMY = min(c, m, y)
c = (c - minCMY) / (1 - minCMY)
m = (m - minCMY) / (1 - minCMY)
y = (y - minCMY) / (1 - minCMY)
return (c, m, y, minCMY)
}
请注意,我已经修改了函数以获取 RGB 颜色分量
作为 CGFloat
在 0.0 ... 1.0 范围内,这是通常的表示
在 UIKit 中 类 例如 UIColor
。
但你真正需要的是从CMYK反向转换 到 RGB:
// From http://www.rapidtables.com/convert/color/cmyk-to-rgb.htm
func CMYKtoRGB(c : CGFloat, m : CGFloat, y : CGFloat, k : CGFloat) -> (r : CGFloat, g : CGFloat, b : CGFloat) {
let r = (1 - c) * (1 - k)
let g = (1 - m) * (1 - k)
let b = (1 - y) * (1 - k)
return (r, g, b)
}
您可以使用它来设置视图的背景颜色 CMYK 滑块值:
let c = CGFloat(cyanSlider.value)
let m = CGFloat(magentaSlider.value)
let y = CGFloat(yellowSlider.value)
let k = CGFloat(blackSlider.value)
let (r, g, b) = CMYKtoRGB(c, m, y, k)
rgbView.backgroundColor = UIColor(red: r, green: g, blue: b, alpha: 1.0)
(注意上面的转换方法很简单,为了更好的 结果人们将使用基于 ICC 的颜色转换,例如参见 UIColor CMYK and Lab Values?.)