iphone - 如何检查 NSString 中的十六进制颜色在 Objective C 中是浅色还是深色?

标签 iphone objective-c

我找到了这个问题的答案,解释了如何将 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/

相关文章:

ios - 自定义大小 UIModalPresentationFormSheet 在键盘显示时返回默认大小

ios - 如何使用 OCMock 测试是否在完成处理程序 block 内调用了对象的方法?

带有 URL 检测的 iPhone 的 UILabel

iphone - 如何向 UITableViewCell 添加斜面

javascript - 帮助替换 Javascript 链接

iphone - 尝试读取 Xcode Instruments .trace 文件。 .trace 文件的文件格式是什么?

ios - React Native iOS 启动开发服务器但从未连接然后崩溃

ios - 为 Google Analytics iOS 实现用户 ID

iphone - 如何停止使用 CSS 进行背景分层?

iphone - UIWebView webViewDidStartLoad 有时不触发