HSV颜色与RGB颜色对象的互转

来源:互联网 发布:苏州楼市成交数据 编辑:程序博客网 时间:2024/04/28 21:25
做项目的时遇到HSV颜色值需要转化成RGB颜色值的需求,在网上查到了一些方法,但都比较复杂,转化中的损耗有一点点大,所以就想了一个损耗较小的方法,希望对各位有帮助。代码如下:
  1.先在 .h 文件中 定义两个结构体,方便传导数据;
struct HSV {    // 色调    CGFloat hu;    // 饱和度    CGFloat sa;    // 明亮度    CGFloat br;    // 透明度    CGFloat al;};typedef struct HSV HSV;struct RGB {    // 色调    CGFloat R;    // 饱和度    CGFloat G;    // 明亮度    CGFloat B;    // 透明度    CGFloat al;};typedef struct RGB RGB;


  2.实现两种颜色互转的函数;
 
/** 把 RGB 值转化成 HSV色值 @param r R 值 @param g G 值 @param b B 值 @param al 颜色透明度 @return 返回一个 HSV 的结构体 */- (HSV)getHSVColorWithR:(CGFloat)r G:(CGFloat)g B:(CGFloat)b alpha:(CGFloat)al{    UIColor * color = [UIColor colorWithRed:r green:g blue:b alpha:al];    struct HSV hsv;    [color getHue:&hsv.hu saturation:&hsv.sa brightness:&hsv.br alpha:&hsv.al];    return hsv;}/** 把 RGB 值转化成 HSV色值 @param color 颜色对象 @return 返回一个 HSV 的结构体 */- (HSV)getHSVColorWithColor:(UIColor *)color{    struct HSV hsv;    [color getHue:&hsv.hu saturation:&hsv.sa brightness:&hsv.br alpha:&hsv.al];    return hsv;}/** 把 HSV 色值转换成 RGB 色值 @param hu 色调 @param sa 饱和度 @param br 明亮度 @param al 透明度 @return 返回 RGB 色值 */- (RGB)getRGBColorToHSVWithHue:(CGFloat)hu Sa:(CGFloat)sa Br:(CGFloat)br Al:(CGFloat)al{    UIColor * color = [UIColor colorWithHue:hu saturation:sa brightness:br alpha:al];    struct RGB rgb;    [color getRed:&rgb.R green:&rgb.G blue:&rgb.B alpha:&rgb.al];    return rgb;}/** 把 颜色对象 转换成 RGB 色值 @param color 颜色对象 @return 返回 RGB 值 */- (RGB)getRGBColorWithColor:(UIColor *)color{    struct RGB rgb;    [color getRed:&rgb.R green:&rgb.G blue:&rgb.B alpha:&rgb.al];    return rgb;}


0 0