Если я сфотографирую белый блок, который читает 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 моего фиолетового цвета.
Теперь я хочу получить HSV из этого объекта CIColor.
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
уже принимает строковый формат. - person rmaddy   schedule 10.07.2014