有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java试图在swift中使用CMYK值

我试图使用4个UISlider来更改CMYK的值,然后在视图中显示颜色,但我尝试了不同的公式,仍然没有得到正确的值,因此我在堆栈溢出中找到了这个answer,但它适用于安卓(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

谢谢,我对斯威夫特很陌生:(


共 (1) 个答案

  1. # 1 楼答案

    Swift有一个“内置的”min()函数,它接受一个变量 参数的数量,因此您的代码可以很容易地转换为Swift

    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颜色分量 作为0.0范围内的CGFloat。。。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?。)