gpt4 book ai didi

iphone - iPhone 上从 RGB 更改为 HSB?

转载 作者:行者123 更新时间:2023-12-03 20:26:05 26 4
gpt4 key购买 nike

我在谷歌上搜索了很长时间,但找不到一种方法来做到这一点。有人有主意吗? Mac 上有一种 NSColor 方法可以实现这一点,但我看不到 iPhone 上的任何方法。我的应用程序的想法是,用户输入十六进制代码(我已设法将其转换为 RGB),然后将其更改为 HSB。

想法?

最佳答案

这只需要一点数学知识。以下代码只是我为转换创建的自定义类的重要部分。 “HSBColor”类只存储色调、饱和度和亮度,如果我需要在系统中实际使用它,我会提供获取它的组件或 UIColor 的函数。

注意:除非您定义具有色调、亮度和饱和度属性的 HSBColor 类,否则此代码将无法正常工作。

+(void)max:(int*)max andMin:(int*)min ofArray:(float[])array
{
*min=0;
*max=0;
for(int i=1; i<3; i++)
{
if(array[i] > array[*max])
*max=i;
if(array[i] < array[*min])
*min=i;
}
}

+(HSBColor*)colorWithRed:(float)red Green:(float)green Blue:(float)blue
{
HSBColor* toReturn = [[[HSBColor alloc] init] autorelease];

float colorArray[3];
colorArray[0] = red;
colorArray[1] = green;
colorArray[2] = blue;
//NSLog(@"RGB: %f %f %f",colorArray[0],colorArray[1],colorArray[2]);
int max;
int min;
[self max:&max andMin:&min ofArray:colorArray];

if(max==min)
{
toReturn.hue=0;
toReturn.saturation=0;
toReturn.brightness=colorArray[0];
}
else
{
toReturn.brightness=colorArray[max];

toReturn.saturation=(colorArray[max]-colorArray[min])/(colorArray[max]);

if(max==0) // Red
toReturn.hue = (colorArray[1]-colorArray[2])/(colorArray[max]-colorArray[min])*60/360;
else if(max==1) // Green
toReturn.hue = (2.0 + (colorArray[2]-colorArray[0])/(colorArray[max]-colorArray[min]))*60/360;
else // Blue
toReturn.hue = (4.0 + (colorArray[0]-colorArray[1])/(colorArray[max]-colorArray[min]))*60/360;
}
return toReturn;
}

+(HSBColor*)colorWithSystemColor:(UIColor*)color
{

const CGFloat* components = CGColorGetComponents(color.CGColor);

return [self colorWithRed:components[0] Green:components[1] Blue:components[2]];
}

关于iphone - iPhone 上从 RGB 更改为 HSB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5589804/

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