首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIColor比较

UIColor比较
EN

Stack Overflow用户
提问于 2010-09-02 05:15:31
回答 5查看 2.8K关注 0票数 3

给定一个UIColor,我需要确定它是“亮”还是“暗”。如果我可以访问颜色的十六进制值,我可以只检查它是否大于或小于某个阈值十六进制数,但似乎没有办法做到这一点。在那里吗?或者,有没有其他方法可以检查UIColor的亮度值?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-02 06:41:48

您可以安装用于扩展UIColorthis Category,以了解HSV/HSB并比较[aUIColor brightness]

编辑:

我在一些github-hosted project中找到了相同的代码,并将其概括为:https://gist.github.com/1252197

代码语言:javascript
复制
#import "UIColor-HSVAdditions.h"

@implementation UIColor (UIColor_HSVAdditions)
+(struct hsv_color)HSVfromRGB:(struct rgb_color)rgb
{
    struct hsv_color hsv;

    CGFloat rgb_min, rgb_max;
    rgb_min = MIN3(rgb.r, rgb.g, rgb.b);
    rgb_max = MAX3(rgb.r, rgb.g, rgb.b);

    hsv.val = rgb_max;
    if (hsv.val == 0) {
        hsv.hue = hsv.sat = 0;
        return hsv;
    }

    rgb.r /= hsv.val;
    rgb.g /= hsv.val;
    rgb.b /= hsv.val;
    rgb_min = MIN3(rgb.r, rgb.g, rgb.b);
    rgb_max = MAX3(rgb.r, rgb.g, rgb.b);

    hsv.sat = rgb_max - rgb_min;
    if (hsv.sat == 0) {
        hsv.hue = 0;
        return hsv;
    }

    if (rgb_max == rgb.r) {
        hsv.hue = 0.0 + 60.0*(rgb.g - rgb.b);
        if (hsv.hue < 0.0) {
            hsv.hue += 360.0;
        }
    } else if (rgb_max == rgb.g) {
        hsv.hue = 120.0 + 60.0*(rgb.b - rgb.r);
    } else /* rgb_max == rgb.b */ {
        hsv.hue = 240.0 + 60.0*(rgb.r - rgb.g);
    }

    return hsv;
}
-(CGFloat)hue
{
    struct hsv_color hsv;
    struct rgb_color rgb;
    rgb.r = [self red];
    rgb.g = [self green];
    rgb.b = [self blue];
    hsv = [UIColor HSVfromRGB: rgb];
    return (hsv.hue / 360.0);
}
-(CGFloat)saturation
{
    struct hsv_color hsv;
    struct rgb_color rgb;
    rgb.r = [self red];
    rgb.g = [self green];
    rgb.b = [self blue];
    hsv = [UIColor HSVfromRGB: rgb];
    return hsv.sat;
}
-(CGFloat)brightness
{
    struct hsv_color hsv;
    struct rgb_color rgb;
    rgb.r = [self red];
    rgb.g = [self green];
    rgb.b = [self blue];
    hsv = [UIColor HSVfromRGB: rgb];
    return hsv.val;
}
-(CGFloat)value
{
    return [self brightness];
}
@end
票数 3
EN

Stack Overflow用户

发布于 2010-09-02 05:19:16

[UIColor CGColor]将为您提供一个CGColorRef,您可以在此基础上执行CGColorGetComponents以获取各个组件。获取“亮度”值取决于您对亮度的定义。获得分量的平均值(在RGB颜色空间的情况下)可能是一个好的开始。

票数 2
EN

Stack Overflow用户

发布于 2010-09-02 05:18:53

UIColor (和CGColorRef)通常以RGB值描述。如果要确定明暗,可能需要将这些值转换为色调/饱和度/亮度之类的值。但是没有像你想要的那样的内置函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3622217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档