美文网首页
颜色色值的过渡

颜色色值的过渡

作者: 只是个少年 | 来源:发表于2019-05-31 15:26 被阅读0次

我们都知道,一个像素点有三原色加上透明度组成,也就是所说的RGBA(红,绿,蓝,透明度),改变其中的任意一个值,给我们呈现的颜色就不一样。
比如,一个点的R1为10,另一个颜色的R2为30,那么R1->R2的线性变化的差值就是20 ,如果滑块的偏移量为100,那么渐变系数为0.2,那么R2 = 10 + 100 * 0.2,
当我们在拉滑块的过程中,R在颜色变化中就是线性的,同理剩余颜色也是渐变的。如上图中的中间View,就是在两个颜色之间过度。
这个关于颜色的扩展,我已经封装到库中,大家可以直接使用。
关键函数为下面,具体实现可参考代码

/**
 得到一个颜色的原始值 RGBA
 
 @param originColor 传入颜色
 @return 颜色值数组
 */
+ (NSArray *)getRGBDictionaryByColor:(UIColor *)originColor {
    CGFloat r = 0,g = 0,b = 0,a = 0;
    if ([self respondsToSelector:@selector(getRed:green:blue:alpha:)]) {
        [originColor getRed:&r green:&g blue:&b alpha:&a];
    }
    else {
        const CGFloat *components = CGColorGetComponents(originColor.CGColor);
        r = components[0];
        g = components[1];
        b = components[2];
        a = components[3];
    }
    return @[@(r),@(g),@(b)];
}
/**
 得到两个值的色差
 
 @param beginColor 起始颜色
 @param endColor 终止颜色
 @return 色差数组
 */
+ (NSArray *)transColorBeginColor:(UIColor *)beginColor andEndColor:(UIColor *)endColor {
    NSArray<NSNumber *> *beginColorArr = [self getRGBDictionaryByColor:beginColor];
    NSArray<NSNumber *> *endColorArr = [self getRGBDictionaryByColor:endColor];
    return @[@([endColorArr[0] doubleValue] - [beginColorArr[0] doubleValue]),@([endColorArr[1] doubleValue] - [beginColorArr[1] doubleValue]),@([endColorArr[2] doubleValue] - [beginColorArr[2] doubleValue])];
}
/**
 传入两个颜色和系数
 
 @param beginColor 开始颜色
 @param coe 系数(0->1)
 @param endColor 终止颜色
 @return 过度颜色
 */
+ (UIColor *)getColorWithColor:(UIColor *)beginColor andCoe:(double)coe  andEndColor:(UIColor *)endColor {
    NSArray *beginColorArr = [self getRGBDictionaryByColor:beginColor];
    NSArray *marginArray = [self transColorBeginColor:beginColor andEndColor:endColor];
    double red = [beginColorArr[0] doubleValue] + coe * [marginArray[0] doubleValue];
    double green = [beginColorArr[1] doubleValue] + coe * [marginArray[1] doubleValue];
    double blue = [beginColorArr[2] doubleValue] + coe * [marginArray[2] doubleValue];
    return [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}

原文:https://blog.csdn.net/du532835032/article/details/86572172

相关文章

  • 颜色色值的过渡

    我们都知道,一个像素点有三原色加上透明度组成,也就是所说的RGBA(红,绿,蓝,透明度),改变其中的任意一个值,给...

  • CSS3知识汇总18:linear-gradient

    w3cplus中说:渐变是两种或多种颜色之间的平滑过渡。在创建渐变的过程中,可以指定多个中间颜色值,这个值称为色标...

  • CSS3新特性之渐变

    两种或多种颜色之间的平滑过渡可指定多个中间颜色值(色标)使用:任何可以设置背景图片的地方 语法 : backgro...

  • CSS颜色

    颜色 颜色值的常用表示方式 十六进制色 RGB 颜色 RGBA 颜色 RGBA 颜色值是 RGB 颜色值的扩展,带...

  • swift UIColor 相关扩展

    十六进制色值转换成 UIColor 获取颜色的 RGBA 值 使用 0 ~ 255 的色值初始化颜色 获取 UIC...

  • 色彩基础

    明度(颜色亮暗) 颜色之间的亮暗程度,颜色过渡时颜色加白逐渐变亮,若颜色特别亮,白色中加颜色。 纯度(颜色的主色和...

  • 2018-02-16

    Photosshop仿色 参考 所谓仿色就是仿造颜色,主要应用在用较少的颜色,来表达较丰富的色彩过渡,就好比要用极...

  • Objective-C颜色处理

    一、设置颜色的透明度 二、获取当前颜色和另一个颜色对象的过渡色 三、把16进制颜色对象转换为UIColor对象 更...

  • Android中146种颜色

    Android中146种颜色对应的xml色值:

  • 超写实彩铅丨如何通过同类色运用刻画超写实静物

    预期结果:通过同类色的混色实验,找到更为自然的“亮,灰,暗”面之间的颜色过渡效果。练习结果:基本掌握通过同类色的相...

网友评论

      本文标题:颜色色值的过渡

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