当前位置: 首页 > 面试题库 >

给定颜色的十六进制,如何使该颜色更浅和更暗?

白浩荡
2023-03-14
问题内容

假设我有一个十六进制,例如:5fc9f8

是否存在接受“黑暗程度”(-10到10)并返回反映该水平的十六进制的函数?

黑暗是指添加黑色/从颜色中删除黑色。


问题答案:

import UIKit

extension StringProtocol {
    subscript(range: Range<Int>) -> SubSequence {
        let start = self.index(startIndex, offsetBy: range.lowerBound, limitedBy: endIndex) ?? endIndex
        return self[start..<(self.index(start, offsetBy: range.count, limitedBy: endIndex) ?? endIndex)]
    }
    var hexaCGFloat: CGFloat { .init(strtoul(String(self), nil, 16)) }
}
extension UIColor {
    var rgb: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)? {
        var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0
        guard getRed(&red, green: &green, blue: &blue, alpha: &alpha) else {
            return nil
        }
        return (red, green, blue, alpha)
    }
    var hsb: (hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat)? {
        var hue: CGFloat = 0, saturation: CGFloat = 0, brightness: CGFloat = 0, alpha: CGFloat = 0
        guard getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) else {
            return nil
        }
        return (hue, saturation, brightness, alpha)
    }
    var hsl: (hue: CGFloat, saturation: CGFloat, lightness: CGFloat, alpha: CGFloat)? {
        guard let rgb = rgb, let hsb = hsb else { return nil }
        let maximum = max(rgb.red, rgb.green, rgb.blue)
        let minimum = min(rgb.red, rgb.green, rgb.blue)
        let range = maximum - minimum
        let lightness = (maximum + minimum) / 2.0
        let saturation = range == 0 ? 0 : range / { return lightness < 0.5 ? lightness * 2 : 2 - (lightness * 2) }()
        return (hsb.hue, saturation, lightness, hsb.alpha)
    }
    convenience init(hue: CGFloat, saturation: CGFloat, lightness: CGFloat , alpha: CGFloat) {
        var saturation = saturation
        let lightness = lightness * 2
        saturation *= lightness <= 1 ? lightness : 2 - lightness
        self.init(hue: hue,
                  saturation: lightness == 0 ? 0 : (2 * saturation) / (lightness + saturation),
                  brightness: (lightness+saturation)/2,
                  alpha: 1)
    }
    convenience init(hexa: String, alpha: Double) {
        self.init(red:   hexa[0..<2].hexaCGFloat / 255,
                  green: hexa[2..<4].hexaCGFloat / 255,
                  blue:  hexa[4..<6].hexaCGFloat / 255,
                  alpha: .init(alpha))
    }
}

游乐场测试

let color = UIColor(hexa: "5fc9f8", alpha: 1)

if let colorHSL = color.hsl {
    let hue = colorHSL.hue
    let saturation = colorHSL.saturation
    let lightness = colorHSL.lightness
    let lighterColor = UIColor(hue: hue,
                               saturation: saturation,
                               lightness: min(lightness * 1.3, 1),
                               alpha: 1)
    let darkerColor = UIColor(hue: hue,
                              saturation: saturation,
                              lightness: max(lightness * 0.5, 0),
                              alpha: 1)
    print("lighterColor:", lighterColor, "darkerColor:", darkerColor)
}


 类似资料:
  • 我想改变我的应用程序中的原色,所以我尝试: 但这不起作用,所以我检查了文档,找到了另一种方法,即使用 所以我的问题是:如何用十六进制颜色改变原色

  • 问题内容: 我正在尝试在Swift中使用十六进制颜色值,而不是允许您使用的几个标准颜色值,但是我不知道该怎么做。 示例:如何将其用作颜色? 问题答案: 实际上是用十六进制表示的3种颜色分量- 红色,绿色和蓝色。您可以使用前缀在Swift中编写十六进制表示法,例如 为了简化转换,让我们创建一个采用整数(0-255)值的初始化程序: 用法: 如何获得阿尔法? 根据您的用例,您可以简单地使用本机方法,例

  • 这就是我所做的 这将返回一个字符串“0XFFhexcode”,我想将其转换为long,将其存储,然后将其用作颜色 我有以下错误

  • 本文向大家介绍Flutter十六进制颜色转换成颜色对象,包括了Flutter十六进制颜色转换成颜色对象的使用技巧和注意事项,需要的朋友参考一下 十六进制颜色值格式一般如:#ff0000,以#开头,后面跟着6个十六进制字符。 而flutter中不能直接使用此类形式的颜色值,所以必须要转换为flutter颜色对象。 参考地址: https://stackoverflow.com/questions/5

  • 问题内容: 我在该主题上找到的所有内容都只是将十六进制转换为rgb,然后添加一个Alpha1。我也想从十六进制数字中获得所需的Alpha。 诸如或明显具有不为0或1的Alpha值的颜色。 问题答案: 我已经制作了一个快速的JSfiddle表格,可以将8位十六进制代码转换为CSS rgba值;) 基础很简单-将您提供的字符串分成两位数的一部分,并转换为alpha通道的百分比率和RGB通道的小数位。标

  • 如何在Flutter中添加十六进制值的颜色?例如,我正在尝试以下操作: 提前致谢