给定一种颜色的十六进制,我怎样才能使颜色变得更轻更黑? [英] Given a hex for a color, how can I make that color lighter and darker?
问题描述
假设我有一个十六进制,如:5fc9f8
是否有一个函数接受黑暗程度(-10到10)并返回一个十六进制反映了这一点?
通过黑暗我的意思是添加黑色/从颜色中移除黑色。 / div>
import UIKit
扩展字符串{
下标(范围:范围< Int>) - >字符串{
return range.startIndex< 0 || range.endIndex>伯爵(自我)? 超出范围:substringWithRange(范围(start:advance(startIndex,range.startIndex),end:advance(startIndex,range.endIndex)))
}
var hexaCGFloat:CGFloat {
返回CGFloat(strtoul(self,nil,16))
}
}
扩展UIColor {
var rgbComponents :(红色:CGFloat,绿色:CGFloat,蓝色:CGFloat, alpha:CGFloat){
var r:CGFloat = 0,g:CGFloat = 0,b:CGFloat = 0,a:CGFloat = 0
如果为getRed(& r,green:& g, blue:& b,alpha:& a){
return(r,g,b,a)
}
return(0,0,0,0)
}
var hsbComponents :(色调:CGFloat,饱和度:CGFloat,亮度:CGFloat,alpha:CGFloat){
var h:CGFloat = 0,s:CGFloat = 0,b:CGFloat = 0,a :CGFloat = 0
如果getHue(& h,饱和度:& s,亮度:& b,alpha:& a){
return(h,s,b,a)
return(0,0,0,0)
}
var hslComponents :(色相:CGFloat,s aturation:CGFloat,lightness:CGFloat,alpha:CGFloat){
let rgb = rgbComponents,hsb = hsbComponents
let maximum = max(rgb.red,rgb.green,rgb.blue)
让minimum = min(rgb.red,rgb.green,rgb.blue)
let range = maximum - minimum
let lightness =(maximum + minimum)/ 2.0
let saturation = range = = 0? 0:范围/ {返回亮度< 0.5? lightness * 2:2 - (lightness * 2)}()
return(hsb.hue,saturation,lightness,hsb.alpha)
}
方便初始化(色调:CGFloat,var saturation :CGFloat,var lightness:CGFloat,alpha:CGFloat){
明度* = 2
饱和度* =亮度<= 1?亮度:2 - 亮度
self.init(色调:色调,饱和度:亮度== 0?0:(2 *饱和度)/(亮度+饱和度),亮度:(亮度+饱和度)/ 2,alpha: 1)
}
便捷初始化(htmlColor:String,alpha:Double){
self.init(red:htmlColor [0 ... 1] .hexaCGFloat / 255.0, green:htmlColor [2 ... 3] .hexaCGFloat / 255.0,blue:htmlColor [4 ... 5] .hexaCGFloat / 255.0,alpha:CGFloat(alpha))
}
}
测试
<$ p $ (colorColor = UIColor(htmlColor:5fc9f8,alpha:1)
let colorHSL = color.hslComponents
let lighterColor = UIColor( hue:colorHSL.hue,saturation:colorHSL.saturation,lightness:min(colorHSL.lightness * 1.3,1.0),alpha:1)
let darkerColor = UIColor(hue:colorHSL.hue,saturation:colorHSL.saturation, lightness:max(colorHSL.lightness * 0.5,0.0),alpha:1)
Let's say I have a hex such as: 5fc9f8
Is there a function that accepts "levels of darkness" (-10 to 10) and returns a hex that reflects that?
By darkness I mean add black/remove black from the color.
import UIKit
extension String {
subscript (range: Range<Int>) -> String {
return range.startIndex < 0 || range.endIndex > count(self) ? "Out of Range" : substringWithRange(Range(start:advance(startIndex,range.startIndex),end:advance(startIndex,range.endIndex)))
}
var hexaCGFloat: CGFloat {
return CGFloat(strtoul(self, nil, 16))
}
}
extension UIColor {
var rgbComponents:(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
var r:CGFloat = 0, g:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0
if getRed(&r, green: &g, blue: &b, alpha: &a) {
return (r,g,b,a)
}
return (0,0,0,0)
}
var hsbComponents:(hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat) {
var h:CGFloat = 0, s:CGFloat = 0, b:CGFloat = 0, a:CGFloat = 0
if getHue(&h, saturation: &s, brightness: &b, alpha: &a){
return (h,s,b,a)
}
return (0,0,0,0)
}
var hslComponents:(hue: CGFloat, saturation: CGFloat, lightness: CGFloat, alpha: CGFloat) {
let rgb = rgbComponents, hsb = hsbComponents
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, var saturation:CGFloat , var lightness:CGFloat , alpha: CGFloat) {
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(htmlColor:String, alpha: Double) {
self.init(red: htmlColor[0...1].hexaCGFloat / 255.0, green: htmlColor[2...3].hexaCGFloat / 255.0, blue: htmlColor[4...5].hexaCGFloat / 255.0, alpha: CGFloat(alpha) )
}
}
Testing
let color = UIColor(htmlColor: "5fc9f8", alpha: 1)
let colorHSL = color.hslComponents
let lighterColor = UIColor(hue:colorHSL.hue, saturation: colorHSL.saturation, lightness: min(colorHSL.lightness * 1.3,1.0), alpha: 1)
let darkerColor = UIColor(hue:colorHSL.hue, saturation: colorHSL.saturation, lightness: max(colorHSL.lightness * 0.5,0.0), alpha: 1)
这篇关于给定一种颜色的十六进制,我怎样才能使颜色变得更轻更黑?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!