假设我得到了红色的FF0000颜色。找到更深的颜色很容易,我只需要输入可能的CC而不是FF,但假设我得到了颜色AE83FC,这是一个复杂的颜色,我怎么才能自动找到它的更亮或更暗的版本?
我想最简单的方法就是把我的RGB转换成HSB色调,饱和度,亮度
我如何在Objective-C中做到这一点呢?
假设我得到的RGB是: 1.0,0.0,0.0。那是红色的。
CGFloat r = 1.0;
CGFloat g = 0.0;
CGfloat b = 0.0;我如何将其转换为HSB,然后转换颜色,并使其返回到RGB,以便我可以使用CGContextRGBSetFillColor?
有没有HSB函数?
请帮帮忙。:)
发布于 2010-04-07 16:56:46
首先,请注意,三个数字不能描述一种颜色,三个数字和一个色彩空间可以。RGB不是色彩空间,它是所谓的色彩模型。RGB模型有很多色彩空间。因此((1,0,0),sRGB)与((1,0,0),Adobe RGB)是不同的颜色。你知道字符串编码是如何工作的吗,一串字节本身就不是字符串?这很像。这也是相似的,当你想要查看组件值的时候,你是在自找麻烦,因为这是一个搞砸色彩空间处理的机会。
对不起,我不能控制自己。无论如何,我将回答这个问题,就好像你的原始颜色是((1,0,0),通用RGB)。
NSColor *color = [NSColor colorWithCalibratedRed:1 green:0 blue:0 alpha:1];
NSLog(@"hue! %g saturation! %g brightness! %g, [color hueComponent], [color saturationComponent], [color brightnessComponent]);另一方面,
NSColor *color = [NSColor colorWithCalibratedHue:h saturation:s brightness:b alpha:1];
NSLog(@"red! %g green! %g blue! %g, [color redComponent], [color greenComponent], [color blueComponent]);这些fooComponent方法并不适用于所有颜色,仅适用于两个特定颜色空间中的颜色,请参阅文档。你已经知道,如果你用上面的方法自己创建了颜色,你就很好。如果你有一种出处未知的颜色,你可以(尝试)将它转换成一个色彩空间,在这个色彩空间中,你可以在-[NSColor colorUsingColorspaceName:]中使用那些组件方法。
发布于 2010-04-07 17:08:40
没有必要为此一直使用HSB。如果你想找到更深的颜色版本,只需将每个R,G和B分量相乘,得到0到1之间的数字,你就会得到相同的颜色,但更暗。
示例:AE83FC的半强度:
{0xAE, 0x83, 0xFC} * 0.5 =
{174, 131, 252} * 0.5 =
{87, 65, 126} =
{0x57, 0x41, 0x7E} => 57417E同样,你可以通过乘以任何大于1的值来获得更亮的版本。每个分量的值不能大于255,因此当发生这种情况时,您需要将其限制为255。这意味着颜色不会完全是相同颜色的更亮版本,但可能足够接近您的目的。
https://stackoverflow.com/questions/2591013
复制相似问题