【发布时间】:2014-09-01 06:23:54
【问题描述】:
如果我拍一张白色块的照片,其 RGB 为 (255,255,255),HSV 为 (0,0,100)。
现在我在不同的光照条件下拍摄第二张紫色块的照片,结果 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];
rn、gn 和 bn 是我的紫色的 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];`
【问题讨论】:
-
这还不清楚。也许一些相关的代码会有所帮助。
-
旁注 - 不要将
NSString stringWithFormat与NSLog一起使用。这是多余的。NSLog已经采用字符串格式。 -
好提示 - 不知道。谢谢
标签: ios objective-c colors rgb hsv