UIColor比较

给定一个UIColor,我需要确定它是“光”还是“黑”。 如果我可以访问颜色的hex值,我可以检查它是否大于或小于一定的阈值hex数,但似乎没有办法做到这一点。 在那儿? 或者有另一种方法可以检查UIColor的亮度值吗?

你可以安装这个类别来扩展UIColor来了解HSV / HSB,并比较[aUIColor brightness]

编辑:
我在一些github托pipe的项目中find了相同的代码,将其作为主要内容: https : //gist.github.com/1252197


 #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 

[UIColor CGColor]会给你一个CGColorRef,从那里你可以做CGColorGetComponents来获得单个组件。 获得“亮度”值取决于你的亮度的定义。 获得平均的组件(在RGB色彩空间的情况下)可能是一个好的开始。

UIColor(和CGColorRef)通常用RGB值来描述。 如果你想确定光线或黑暗,你可能会想要将这些值转换为像色调/饱和度/亮度。 但是没有像你正在寻找的function。

这里是UIColor扩展(使用类别)的指导(提供代码),并有方法,如得到hexStringFromColor:它应该是你在找什么。 UIColor扩展注:我没有写这个博客或代码。

build议algorithm计算颜色/颜色的亮度差异: http : //maestric.com/doc/color_brightness_difference_calculator (基于w3c论文)