热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用户界面颜色getHue:饱和:亮度:α:没有回报-UIColorgetHue:saturation:brightness:alpha:returnsNO

Iamusingthefollowingfunctiontochangethesaturation,brightnessandalphaofaUIColor:我正在

I am using the following function to "change" the saturation, brightness and alpha of a UIColor:

我正在使用以下函数来“改变”UIColor的饱和度、亮度和alpha:

//UIColor *color = [self color:[UIColor redColor] saturation:0.5 brightness:0.5 alpha:0.5];

- (UIColor *)color:(UIColor *)color saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha {
    CGFloat h, s, b, a;
    [color getHue:&h saturation:&s brightness:&b alpha:&a];
    return [UIColor colorWithHue:h saturation:(s * saturation) brightness:(b * brightness) alpha:(a * alpha)];
}

Prior to iOS 11 (GM) this was working perfectly fine. However, now [UIColor getHue:saturation:brightness:alpha:] returns NO and the hsba values aren't getting changed.

在ios11 (GM)之前,运行得非常好。然而,现在[UIColor getHue::bright:alpha:]返回NO, hsba值不会改变。

Comment in UIColor.h says:

在用户界面颜色发表评论。h说:

If the receiver is of a compatible color space, any non-NULL parameters are populated and 'YES' is returned. Otherwise, the parameters are left unchanged and 'NO' is returned.

如果接收器是兼容的颜色空间,则会填充任何非空参数,并返回“YES”。否则,参数将保持不变并返回'NO'。

What does "compatible color space" mean here? Do I have to convert color spaces? How do I accomplish that? All the colors in my .xcassets are in sRGB.

“兼容颜色空间”在这里是什么意思?我需要转换颜色空间吗?我怎么做到的?我的.xcassets中的所有颜色都在sRGB中。


EDIT: Kind of a fix is to use the following way to get the HSBA values:

编辑:一种修复方法是使用以下方法获取HSBA值:

CGFloat rTemp, gTemp, bTemp, aTemp;
[color getRed:&rTemp green:&gTemp blue:&bTemp alpha:&aTemp];
CGFloat h, s, b, a;
[[UIColor colorWithRed:rTemp green:gTemp blue:bTemp alpha:aTemp] getHue:&h saturation:&s brightness:&b alpha:&a];

1 个解决方案

#1


5  

It appears that the UIColor getHue:saturation:brightness: method doesn't work if the color's color space is sRGB but it does work if the color's color space is Extended sRGB.

如果颜色的颜色空间是sRGB,那么UIColor getHue::bright: method不起作用,但是如果颜色的颜色空间扩展了sRGB,它就起作用。

So the solution is to update the selected Color Space for each of your colors in your color set asset.

因此,解决方案是更新您的颜色集资产中的每个颜色的选定颜色空间。

This can be demonstrated in a Swift Playground as follows. This creates a color using the sRGB color space.

这可以在一个快速的操场上进行演示,如下所示。这将使用sRGB颜色空间创建一个颜色。

if let cs = CGColorSpace(name: CGColorSpace.sRGB) {
    if let cc = CGColor(colorSpace: cs, components: [0.5, 0.7, 0.3, 1.0]) {
        let color = UIColor(cgColor: cc)
        print(color)
        var h: CGFloat = 0
        var s: CGFloat = 0
        var b: CGFloat = 0
        if color.getHue(&h, saturation: &s, brightness: &b, alpha: nil) {
            print(h, s, b)
        } else {
            print("Failed with color space \(cs)")
        }
    }
}

This gives the output:

这使输出:

kCGColorSpaceModelRGB 0.5 0.7 0.3 1
Failed with color space (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1)

kCGColorSpaceModelRGB 0.5 0.7 0.3 1颜色空间失败(kCGColorSpaceICCBased;kCGColorSpaceModelRGB;sRGB iec61966 - 2.1)

Updating the above code to use the CGColorSpace.extendedSRGB color space gives the following results:

更新上面的代码以使用CGColorSpace。extendedSRGB颜色空间给出如下结果:

UIExtendedSRGBColorSpace 0.5 0.7 0.3 1
0.25 0.571428571428571 0.7

0。7 0。1 0。25


推荐阅读
  • 有一个一维数组,数据是图像颜色信息,每三个字节代表一个像素的RGB值,知道图像大小,想用MFC简单的显示成图像。求大神指教,详细一点最好,在网上搜索到添加位图信息头的方法,可是我显示不出来。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • SmartRefreshLayout自定义头部刷新和底部加载
    1.添加依赖implementation‘com.scwang.smartrefresh:SmartRefreshLayout:1.0.3’implementation‘com.s ... [详细]
  • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
  • POJ 1046 Color Me Less
    ColorMeLessTimeLimit: 1000MS MemoryLimit: 10000KTotalSubmissions: 31449 Accept ... [详细]
  • PS网页设计教程VIII——在Photoshop中设计不同寻常布局
    作为编码者,美工基础是偏弱的。我们可以参考一些成熟的网页PS教程,提高自身的设计能力。套用一句话,“熟读唐诗三百首,不会作诗也会吟”。本系列的教程来源于网上的PS教程,都是国外的,全英文的。本人尝 ... [详细]
  • 上一篇《手把手教你用深度学习做物体检测(三):模型训练》中介绍了如何使用yolov3训练我们自己的物体检测模型,本篇文章将重点介绍如何使用我们训练好的模型来检测图片或视频中的物体 ... [详细]
author-avatar
机智的树獭
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有