我找到了这个问题的答案,解释了如何将 NSString 十六进制转换为 UIColor (我已经这样做了),其他人解释了如何将 RGB 转换为 HSB,其他人解释了如何确定 RGB 的亮度和暗度,但是我想知道是否有一种更直接的方法来解决这个问题,而不涉及到 hex->UIColor->rgb->hsb->b。 例如,十六进制->hsb?或者hex->rgb->亮度计算?
每次 View 加载时,我的背景都会改变颜色(来自 XML 的十六进制值),并且我需要将顶部的文本相应地更改为白色或黑色,以便保持清晰。
非常感谢您的帮助,我已经研究这个问题好几天了。
最佳答案
参见 Formula to determine brightness of RGB color 。
十六进制颜色通常是 RRGGBB 或 RRGGBBAA (alpha)。
how to convert hexadecimal to RGB
要获取三个整数而不是 UIColor,您可以将答案修改为:
void rgb_from_hex(char *hexstring, int *red, int *green, int *blue) {
// convert everything after the # into a number
long x = strtol(hexstring+1, NULL, 16);
// extract the bytes
*blue = x & 0xFF;
*green = (x >> 8) & 0xFF;
*red = (x >> 16) & 0xFF;
}
// The above function is used like this:
int main (int argc, const char * argv[])
{
int r,g,b;
rgb_from_hex("#123456", &r, &g, &b);
printf("r=%d, g=%d, b=%d\n", r, g, b);
}
(该函数可能只能正确处理 RGB,而不是 RGBA。)
关于iphone - 如何检查 NSString 中的十六进制颜色在 Objective C 中是浅色还是深色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7615953/