gpt4 book ai didi

ios - 如何在 Objective C 中使用 HSV 缩放颜色

转载 作者:行者123 更新时间:2023-11-29 10:40:43 29 4
gpt4 key购买 nike

如果我拍一张白色 block 的照片,其 RGB 值为 (255,255,255),HSV 值为 (0,0,100)。

现在,我在不同光照条件下拍了第二张紫色 block 的照片,结果 RGB 为 (79, 40, 145),HSV 为 (262,72,56)。现在,由于它们的 HSV 值不同(不同的光照条件),很明显它们的 RGB 值无法与测试进行准确比较。

因此我需要使用 HSV。因此,为了“放大”我的 HSV,我需要将紫色值乘以 100/56 使其达到 100。因此,生成的颜色为 HSV (262, 72, 100)。现在。这很棒而且花花公子 - 但是在 Objective-C 中有没有办法将 HSV 读回 RGB 或将 HSV 转换为 RGB?我似乎找不到任何关于此事的好资源。

我不确定用什么来读取我的颜色,但这是我要完成的示例代码:

CIColor *myColor = [CIColor colorWithRed:rn green:gn blue:bn alpha:1];

其中 rngnbn 是我的紫色的 RGB。

现在我要做的是从 CIColor 对象中获取 HSV。

hn = myColor.hue;
sn = myColor.saturation;
vn = myColor.value;

接下来我想把那个 HSV 放大到像这样的白色

CIColor *myNewColor = [CIColor colorWithHue:hn, saturation:sn, value:vn*(vw/vn)];

并将其改回 RGB。

抱歉,如果这令人困惑 - 也许有更好的方法来解决这个问题。

编辑 2:

 rw = [self.whiteRGBValues.red floatValue];
gw = [self.whiteRGBValues.green floatValue];
bw = [self.whiteRGBValues.blue floatValue];
hw = [self.whiteRGBValues.hue floatValue];
sw = [self.whiteRGBValues.sat floatValue];
vw = [self.whiteRGBValues.val floatValue];


NSLog([NSString stringWithFormat:@"%f,%f,%f,%f,%f,%f",rw,gw,bw,rn,gn,bn]);
float scalar = vw/vn;

UIColor *myColor = [UIColor colorWithRed:rn green:gn blue:bn alpha:1];
CGFloat myHue, mySat, myBright, myAlpha;

[myColor getHue:&myHue saturation:&mySat brightness:&myBright alpha:&myAlpha];

UIColor *scaledColor = [UIColor colorWithHue:myHue
saturation:mySat
brightness:myBright*scalar
alpha:myAlpha];

CGFloat myScaledR, myScaledG, myScaledB, myScaledAlpha;
CGFloat myScaledHue, myScaledSat, myScaledBright;

[scaledColor getRed:&myScaledR green:&myScaledG blue:&myScaledB alpha:&myScaledAlpha];

self.rgbScaledValues.red = [[NSNumber numberWithFloat:myScaledR] stringValue];
self.rgbScaledValues.green = [[NSNumber numberWithFloat:myScaledG] stringValue];
self.rgbScaledValues.blue = [[NSNumber numberWithFloat:myScaledB] stringValue];

[scaledColor getHue:&myScaledHue saturation:&myScaledSat brightness:&myScaledBright alpha:&myScaledAlpha];
self.rgbScaledValues.hue = [[NSNumber numberWithFloat:myScaledHue] stringValue];
self.rgbScaledValues.sat = [[NSNumber numberWithFloat:myScaledSat] stringValue];
self.rgbScaledValues.val = [[NSNumber numberWithFloat:myScaledBright] stringValue];

我在

的行上收到断点引发的错误
`UIColor *myColor = [UIColor colorWithRed:rn green:gn blue:bn alpha:1];`

最佳答案

您可以使用内置方法获取 HSB 和 RGB 分量。首先,将您的 CIColor 转换为 UIColor

UIColor *color = [UIColor colorWithCIColor: myColor];

CGFloat hue;
CGFloat saturation;
CGFloat brightness;
CGFloat alpha;
[color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
// those 4 floats now hold the HSB values of this color

CGFloat red;
CGFloat green;
CGFloat blue;
CGFloat alpha2;
[color getRed:&red green:&green blue:&blue alpha:&alpha2];
// those 4 floats now hold the RGB values of this color

从那里,您现在可以使用这些值做任何您想做的事情,包括操纵它们来创建新颜色。

关于ios - 如何在 Objective C 中使用 HSV 缩放颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24683966/

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