gpt4 book ai didi

ios - 在 iOS 中创建/比较 Lab-profiled 颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:27:17 27 4
gpt4 key购买 nike

对于我正在处理的应用程序,我正在尝试创建和比较(之间的距离)CIE Lab异形颜色。

我知道有ways of converting来自典型的 RGBLab需要一些数学知识,但如果可能的话,我想以更优雅的方式做到这一点。

创建 CIE LAB 颜色

到目前为止,我已经尝试了以下...(白/黑点和范围数字来自 here )

    const CGFloat *components = CGColorGetComponents([UIColor colorWithRed:.11 green:.33 blue:.55 alpha:1.0].CGColor);

float whitePoint[3] = {0.95, 1.0, 1.09};
float blackPoint[3] = {0.0,0.0,0.0};
float range[4] = {-127.0,127.0,-127.0,127.0};
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateLab(whitePoint, blackPoint, range);

[self.someArray addObject:[UIColor colorWithCGColor:CGColorCreate(colorSpaceRef, components)]];

我不确定这是否是在这个空间中创建颜色的正确方法,特别是因为 UIColor 使用的 RGB 空间首先比 Lab 更受限制!此外,在从 CGColor 到 UIColor 的转换过程中,我会失去我的色彩空间吗? (图像中最大的颜色空间是 LAB)

还有一点需要考虑的是,iDevice 屏幕能否正确显示 Lab 颜色(因为它们的像素使用 RGB)?

本质上,我正在寻找这种在实验室空间内生成随机颜色的正确方法。

The largest color space is CIE Lab

比较 CIE LAB 颜色

然后一旦我有了这些 Lab 颜色,我怎样才能得到三个值(Lab)来计算一种颜色和另一种颜色之间的距离?一旦我创建了一种颜色并将其封装在 UIColor 中,读取和比较 UIColor 的 CGComponents 是否会保持我正在寻找的准确性?(我之前在 RGB 空间中通过采用欧几里得距离完成了此操作,这里应该是相同的概念,除了距离将考虑到人类感知差异 ,这就是我正在努力做的事情。)

###如果你已经读到这里,我感谢你,并感谢你提供的任何输入或可以分享的类似经验!###

最佳答案

首先,您的图片具有误导性。它将色域外的颜色显示为色域内的颜色,针对不同的色度显示不同的亮度,并且缺少嵌入的颜色配置文件。

其次,iOS 设备到目前为止还没有进行颜色校准。它们用于许多不同的环境,因此校准不会那么有用。因此,您不能指望能够计算出用户可能会感知到哪种颜色。我将它们视为 sRGB 显示器。

第三,无论 RGB 原色如何,所有 CIELAB 颜色都不能转换为有效的 RGB 值。

如果您希望对 CIELAB 空间的有效颜色进行统一采样,我建议生成 L*a*b* 坐标并丢弃无效值。

CGFloat r,g,b;
while(1) {
CGFloat L = random_from_range(0., 100.);
CGFloat a = random_from_range(-128., 128.);
CGFloat b = random_from_range(-128., 128.);
CIELAB_to_sRGB(L,a,b,&r,&g,&b);
if ( 0.0 <= r && r <= 1.0 && 0.0 <= g && g <= 1.0 && 0.0 <= b && b <= 1.0 ) {
break;
}
}

关于ios - 在 iOS 中创建/比较 Lab-profiled 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com