gpt4 book ai didi

philips-hue - 将 Philips Hue XY 值转换为 HEX

转载 作者:行者123 更新时间:2023-12-01 09:30:25 25 4
gpt4 key购买 nike

Philips Hue API 在某些情况下会为 blub 的颜色值返回 xy 值。如何将其转换为 HEX 字符串?我尝试了各种我在网上找到的公式,但没有一个适用于灯泡的所有颜色。

我查看了下面建议的指南,并尝试在 PHP 中实现如下:

list($x, $y) = $light['state']['xy'];
$z = 1.0 - $x - $y;
$Y = $light['state']['bri'] / 255.0; // The given brightness value
$X = ($Y / $y) * $x;
$Z = ($Y / $y) * $z;

$r = $X * 1.612 - $Y * 0.203 - $Z * 0.302;
$g = -$X * 0.509 + $Y * 1.412 + $Z * 0.066;
$b = $X * 0.026 - $Y * 0.072 + $Z * 0.962;

$r = $r <= 0.0031308 ? 12.92 * $r : (1.0 + 0.055) * pow($r, (1.0 / 2.4)) - 0.055;
$g = $g <= 0.0031308 ? 12.92 * $g : (1.0 + 0.055) * pow($g, (1.0 / 2.4)) - 0.055;
$b = $b <= 0.0031308 ? 12.92 * $b : (1.0 + 0.055) * pow($b, (1.0 / 2.4)) - 0.055;

我在 Hue 应用程序的颜色选择器左下角将我的一盏灯设置为红色,并将亮度设置为最大。以下是结果值:

// Read from bulb
x = 0.6472
y = 0.3302
bri = 254

// XYZ calculations
X = 1.952
Y = 0.996
Z = 0.068

// RGB calculations
r = 1.594 // Out-of-range > 1
g = 0.677
b = 0.233

如您所见,生成的 r 值超出范围,因为它高于 1。我的方程式中缺少什么?

最佳答案

As you can see, the r value generated is out of range as it is higher than 1. What am I missing in my equations?

Philips hue API 返回的 xy 值位于 CIE 1931 color space 中.该颜色空间索引人眼可见的所有颜色。由于此颜色空间大于您的设备可以显示的颜色,因此并非所有颜色都可以映射到设备颜色空间内的颜色。

例如,如果您假设设备的颜色功能为 sRGB那么色域外的所有颜色都将导致 R、G 和/或 B 为负值。要解决此问题,您必须将这些颜色映射到色域内的可显示颜色。最简单的选择是将所有值设置为 0,如果它们是负数。

也可以出现大于 1 的值。这个问题最简单的解决方案是将所有颜色值重新缩放相同的因子,使所有值都小于 1。一个简单的方法是

$maxValue = max($r,$g,$b);
$r /= $maxValue;
$g /= $maxValue;
$b /= $maxValue;

关于philips-hue - 将 Philips Hue XY 值转换为 HEX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16052933/

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