UIColor 中提取 RGBA

UIColor 中提取 RGBA遇到一些获取颜色 RGB 的需求 在这里记录下 UIColor color UIColorredCo 普通颜色可以通过这个方法获取的 RGBA 的值 颜色空间是固定的 对应 RGBAconstCGF cmp CGColorGetCo fColor CGColor r cmp 0 g cmp 1 b cmp 2 a cmp 3 有些颜色是获取不到 RGBA 的 比如 UIColorwhite U

遇到一些获取颜色RGB的需求,在这里记录下

UIColor *color = [UIColor redColor]; // 普通颜色可以通过 这个方法获取的RGBA的值 // 颜色空间是固定的,对应RGBA const CGFloat *cmp = CGColorGetComponents(fColor.CGColor); r = cmp[0]; g = cmp[1]; b = cmp[2]; a = cmp[3];

有些颜色是获取不到RGBA的, 比如 [UIColor whiteColor] [UIColor blackColor] [UIColor colorWithWhite: alpha:] 这些方法创建的
通过 colorWithRed: green: blue: alpha: 创建的肯定能够获取到RGBA, 所以
可以通过这个方法获取颜色通道数量




unsigned long int fNum = CGColorGetNumberOfComponents(fColor.CGColor); if (fNum == 4) { // 在调用上面的方法获取RGBA }

用这个方法可以获取到

- (void)dc_getRGBComponents:(CGFloat [3])cmp forColor:(UIColor *)color { CGColorSpaceRef spaceRef = CGColorSpaceCreateDeviceRGB(); unsigned char resultPixel[4]; CGContextRef ctx = CGBitmapContextCreate(&resultPixel, 1, 1, 8, 4, spaceRef, kCGImageAlphaNoneSkipLast); CGContextSetFillColorWithColor(ctx, [color CGColor]); CGContextFillRect(ctx, CGRectMake(0, 0, 1, 1)); CGContextRelease(ctx); CGColorSpaceRelease(spaceRef); for (int i = 0; i < 3; i++) { cmp[i] = resultPixel[i] / 255.0; } }

使用说明

CGFloat cmp[3]; [self dc_getRGBComponents:cmp forColor:[UIColor whiteColor]]; r = cmp[0]; g = cmp[1]; b = cmp[2];

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223941.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:04
下一篇 2026年3月17日 下午1:05


相关推荐

  • Cursor深度集成DeepSeek:从配置到实战的全流程指南

    Cursor深度集成DeepSeek:从配置到实战的全流程指南

    2026年3月16日
    2
  • 使用Flash Cookie技术在客户端永久保存HTTP Cookie「建议收藏」

    使用Flash Cookie技术在客户端永久保存HTTP Cookie「建议收藏」前言:在我负责的一个项目中,为了实现一个特殊的需求,要求在客户端的Cookie中长久保存一份数据,但是我们知道在客户端Cookie里保存数据是不稳定的,因为用户可能随时会清除掉浏览器的Cookie,

    2022年7月1日
    40
  • Kali Linux 2020.4 安装教程 超级详细 适合新手入门

    Kali Linux 2020.4 安装教程 超级详细 适合新手入门KaliLinux安装教程一、虚拟机配置二、KaliLinux配置三、更新软件包更新时间:2021年1月22日使用版本:5.9.0镜像官方下载地址:https://www.kali.org/downloads一、虚拟机配置使用虚拟机软件:VMwareWorkstationPro16首先点击创建新的虚拟机,先择典型(推荐)完成选择后点击下一步这里我们选择稍后安装操作系统完成选择后点击下一步此处客户机操作系统选择Linux,版本选择Debian10.x

    2022年5月22日
    83
  • apache tomcat 闪退[通俗易懂]

    apache tomcat 闪退[通俗易懂]网上介绍了很多解决办法,下面是我自己的解决办法:1. 我的apache-tomcat是解压缩版(解压了后配置一下就可以用)。 路径:D:\apache-tomcat-8.0.5\ 2. 找到conf文件夹,打开server.xml文件,下拉右手边的滚动条至最下面。 3. 查看上面有没有配置。 4. 我原来有个项目在这个位置配置过,删除后,再运行就没有再出现闪退的

    2022年5月7日
    94
  • qtcpsocket write_c文件读写

    qtcpsocket write_c文件读写QTcpSocket的读写函数一般是异步的,即write函数执行后,其实不一定会把数据写入socket,可能要等到事件循环(main函数的returna.exec())才会写入。如果需要立即写入,要执行QTcpSocket的flush函数。QTcpSocket的读函数也类似,我们定义一个槽函数voidslot_readyRead响应信号readyRead,槽函数中,能够读取的数据,也只有这

    2025年10月15日
    6
  • P5641 【CSGRound2】开拓者的卓识

    P5641 【CSGRound2】开拓者的卓识P5641 CSGRound2 开拓者的卓识 link 解题思路我们考虑每个 aia iai 对 sumk 1 r sum k 1 r sumk 1 r 的贡献 aia iai 有贡献当且仅当 i lk 1 rk 1 lk 2 rk 2 l0 r0 i in l k 1 r k 1 subseteq l k 2 r k 2 subseteq cdots subseteq l 0 r 0 i lk 1 rk 1 lk 2 rk 2 l

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号