美文网首页iOS开发
iOS RGB与HSB数值转换算法

iOS RGB与HSB数值转换算法

作者: 水煮杰尼龟 | 来源:发表于2018-07-19 17:14 被阅读235次
简介

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
HSB又称HSV,表示一种颜色模式:在HSB模式中,H(hues)表示色相,S(saturation)表示饱和度,B(brightness)表示亮度HSB模式对应的媒介是人眼。
HSB模式中S和B呈现的数值越高,饱和度明度越高,页面色彩强烈艳丽,对视觉刺激是迅速的,醒目的效果,但不益于长时间的观看。
色相(H,hue):在0~360°的标准色轮上,色相是按位置度量的。在通常的使用中,色相是由颜色名称标识的,比如红、绿或橙色。黑色和白色无色相。
饱和度(S,saturation):表示色彩的纯度,为0时为灰色。白、黑和其他灰色色彩都没有饱和度的。在最大饱和度时,每一色相具有最纯的色光。取值范围0~100%。
亮度(B,brightness或V,value):是色彩的明亮度。为0时即为黑色。最大亮度是色彩最鲜明的状态。取值范围0~100%。

不瞎bb了 ,先上代码。

func rgbTohsb(r:Float,g:Float,b:Float) ->(Array<Float>)
    {
        var Max : Float,Min : Float,H : Float = 0,S : Float = 0,B : Float = 0
        Max = max(max(r, g), b)
        Min = min(min(r, g), b)
        S = Max==0 ? 0:(1-Min/Max)*100
        B = Max/255*100
        if Max==Min {
            H = 0
            return [ceilf(H),ceilf(S),ceilf(B)]
        }
        if Max==r&&g>=b {
            H = 60*(g-b)/(Max-Min)+0
        }else if Max==r&&g<b
        {
            H = 60*(g-b)/(Max-Min)+360
        }else if Max==g
        {
            H = 60*(b-r)/(Max-Min)+120
        }else if Max==b
        {
            H = 60*(r-g)/(Max-Min)+240
        }
        return [ceilf(H),ceilf(S),ceilf(B)]
    }

func hsbTorgb(h:Float,s:Float,b:Float) ->(Array<Float>)
    {
        var h1 : Int , a : Int
        var f : Float,p : Float,q : Float,t : Float,R : Float = 0,G : Float = 0,B : Float = 0
        a=Int(h/60)
        h1=a%6
        f=h/60-Float(h1)
        p=b/100*(1-s/100)
        q=b/100*(1-f*s/100)
        t=b/100*(1-(1-f)*s/100)
        switch h1 {
        case 0:
            R=b/100
            G=t
            B=p
            break
        case 1:
            R=q
            G=b/100
            B=p
            break
        case 2:
            R=p
            G=b/100
            B=t
            break
        case 3:
            R=p
            G=q
            B=b/100
            break
        case 4:
            R=t
            G=p
            B=b/100
            break
        case 5:
            R=b/100
            G=p
            B=q
            break
        default:
            break
        }
        
        return [ceilf(R*255),ceilf(G*255),ceilf(B*255)]
    }

以上两个方法就是互相转换的数值算法了,当然也还有其他的转换方式。
比如苹果其实已经给我们提供好了方法:
不过苹果的方法都是通过UIColor来处理的,比如给你三个rgb数值,或者hsb数值,你先要得到UIColor再做互相转换。当然都是可以的咯,看个人需求了吧。
一般来说,UI给我们用的颜色基本就是RGB(200,76,100)数值,或者是二进制(#FFFFFF)了。
你可以通过 + (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; 得到UIColor.
然后可以通过 - (BOOL)getHue:(nullable CGFloat *)hue saturation:(nullable CGFloat *)saturation brightness:(nullable CGFloat *)brightness alpha:(nullable CGFloat *)alpha NS_AVAILABLE_IOS(5_0); 拿到相应的hsb各个值。反之 也有对应的方法通过hsb拿到颜色,再得到相应的rgb值。

如果是二进制,一样的先拿到UIColor就行了。
最后放一个二进制转UIColor方法吧

+ (UIColor *)colorFromHexRGB:(NSString *)colorString alpha:(CGFloat)alpha;
{
    if ([colorString containsString:@"#"]) {
        colorString=[colorString stringByReplacingOccurrencesOfString:@"#" withString:@""];
    }
    UIColor *result = nil;
    unsigned int colorCode = 0;
    unsigned char redByte, greenByte, blueByte;
    
    if (nil != colorString)
    {
        NSScanner *scanner = [NSScanner scannerWithString:colorString];
        (void) [scanner scanHexInt:&colorCode]; // ignore error
    }
    redByte = (unsigned char) (colorCode >> 16);
    greenByte = (unsigned char) (colorCode >> 8);
    blueByte = (unsigned char) (colorCode); // masks off high bits
    result = [UIColor
              colorWithRed: (float)redByte / 0xff
              green: (float)greenByte/ 0xff
              blue: (float)blueByte / 0xff
              alpha:alpha];
    return result;
}
    总而言之,不同需求不同方式去操作就行了。

相关文章

  • iOS RGB与HSB数值转换算法

    简介 RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间...

  • matalb 不同颜色空间转换

    %不同颜色空间转换 %{ RGB XYZ Yxy Luv HSV(又称HSB):(hue,saturation,v...

  • 详解RGB-HSB互相转换的算法

    写在前面 在讲这个之前,首先简单介绍一下什么是RGB,什么是HSB。 RGB色彩模式是工业界的一种颜色标准,是通过...

  • Illustrator颜色定义

    颜色模型 定义用来描述数字图形中看到和用到的各种颜色。用数值表示可见色度。包括:RGB、CMYK、HSB 色彩空间...

  • 颜色和色板(Color and Swatches)| Adobe

    一、颜色模式 1. RGB和CMYK 2.HSB 色谱框 HSB is for hue, saturation, ...

  • css3编写浏览器背景渐变背景色

    知识点:rgb全色循环算法,HEX与RGB颜色转换算法、CSS3颜色渐变,CSS3渐变色兼容ie方法,定时器与循环...

  • Illustrator颜色编辑

    一、颜色转换 超出色域的颜色转换为可打印的颜色 由于RGB和HSB颜色模型中的一些颜色在CMYK中没有等同的颜色,...

  • 算法基础之简单线性算法

    本文包括简单的线性算法和一些数值计算,还会在以后的学习中继续更新 rgb 和 16进制互相转换 找出整型数组中乘积...

  • YUV和RGB

    色彩空间 我们经常用到的色彩空间主要有RGB、YUV, CMYK, HSB, HSL等等,其中YUV和RGB是视讯...

  • iOS开发 • 实例——实现UIColor RGB数值轻松转换

    最近项目暂告一段落,我的空闲时间也比较多,喜欢研究一些小技巧,今天跟大家分享的是实现颜色RGB数值轻松转换。...

网友评论

    本文标题:iOS RGB与HSB数值转换算法

    本文链接:https://www.haomeiwen.com/subject/zeohjftx.html