C语言,可在Object-C中调用

#define UNDEFINED 0

typedef struct {float r, g, b;} RGBType;

typedef struct {float h, s, v;} HSVType;

// Theoretically, hue 0 (pure red) is identical to hue 6 in these transforms. Pure

// red always maps to 6 in this implementation. Therefore UNDEFINED can be

// defined as 0 in situations where only unsigned numbers are desired.

RGBType RGBTypeMake(float r, float g, float b);

HSVType HSVTypeMake(float h, float s, float v);

HSVType RGB_to_HSV( RGBType RGB );

RGBType HSV_to_RGB( HSVType HSV );

#include

#include "HSV.h"

inline RGBType RGBTypeMake(float r, float g, float b)

{

RGBType rgb = {r, g, b};

return rgb;

}

inline HSVType HSVTypeMake(float h, float s, float v)

{

HSVType hsv = {h, s, v};

return hsv;

}

HSVType RGB_to_HSV( RGBType RGB )

{

// RGB are each on [0, 1]. S and V are returned on [0, 1] and H is

// returned on [0, 1]. Exception: H is returned UNDEFINED if S==0.

float R = RGB.r, G = RGB.g, B = RGB.b, v, x, f;

int i;

x = fminf(R, G);

x = fminf(x, B);

v = fmaxf(R, G);

v = fmaxf(v, B);

if(v == x)

return HSVTypeMake(UNDEFINED, 0, v);

f = (R == x) ? G - B : ((G == x) ? B - R : R - G);

i = (R == x) ? 3 : ((G == x) ? 5 : 1);

return HSVTypeMake(((i - f /(v - x))/6), (v - x)/v, v);

}

RGBType HSV_to_RGB( HSVType HSV )

{

// H is given on [0, 1] or UNDEFINED. S and V are given on [0, 1].

// RGB are each returned on [0, 1].

float h = HSV.h * 6, s = HSV.s, v = HSV.v, m, n, f;

int i;

if (h == 0) h=.01;

if(h == UNDEFINED)

return RGBTypeMake(v, v, v);

i = floorf(h);

f = h - i;

if(!(i & 1)) f = 1 - f; // if i is even

m = v * (1 - s);

n = v * (1 - s * f);

switch (i)

{

case 6:

case 0: return RGBTypeMake(v, n, m);

case 1: return RGBTypeMake(n, v, m);

case 2: return RGBTypeMake(m, v, n);

case 3: return RGBTypeMake(m, n, v);

case 4: return RGBTypeMake(n, m, v);

case 5: return RGBTypeMake(v, m, n);

}

return RGBTypeMake(0, 0, 0);

}

android hsv,HSV与RGB之间相互转换相关推荐

  1. HSV颜色空间和RGB颜色空间相互转换C语言实现

    HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model).这个模型中颜色的参数 ...

  2. HSV与RGB之间相互转换

    2019独角兽企业重金招聘Python工程师标准>>> 代码来自http://www.cocoabuilder.com/archive/cocoa/198570-here-is-co ...

  3. 【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码

    系列文章目录 第二章 主色提取之颜色空间转化 目录 系列文章目录 文章目录 前言 一.HSV 和 RGB 颜色空间 二.颜色转化 1. RGB to HSV 2. HSV to RGB 三. 完整代码 ...

  4. 【QT数字图像处理】(四)hsv颜色空间转rgb颜色空间

    一.颜色模型 1.1 rgb颜色模型 1.2 hsv颜色模型 hsv颜色模型具有以下优点: 1.符合人眼对颜色的感觉: 2.hsv颜色模型中hsv三个坐标是相互独立的:当采用rgb颜色模型时,改变某一 ...

  5. 使用C++实现YUV格式图像与RGB格式图像之间相互转换

    使用C++实现YUV格式图像与RGB格式图像之间相互转换 一.RGB与YUV转换公式 1.RGB转YUV 1)RGB转换亮度与色差信号公试: 2)归一化为YUV的转化公试为: 2.YUV转RGB 二. ...

  6. HSV颜色空间转RGB(C语言代码),ESP32使用RMT驱动WS2812B,七彩流光灯光效果

    HSV(Hue, Saturation, Value) 模型中,颜色的参数分别是:色调(H),饱和度(S),明度(V).它更类似于人类感觉颜色的方式,颜色?深浅?明暗?通过这种方式可以很直观的改变渲染 ...

  7. RGB图像转换成HSV图像,HSV图像转换为RGB图像

    HSV 即使用 色相(Hue).饱和度(Saturation).明度(Value) 来表示色彩的一种方式 色相:将颜色用0°到360°表示,就是我们日常讲的颜色名称,如红色.蓝色等. 色相与颜色对应关 ...

  8. c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...

  9. SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新

    SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新 1,DEMO数据 物料号:1300009995 工厂:2160 销售订单号/item号:0010097627 ...

最新文章

  1. DockerCompose-初始Compose
  2. 动态规划训练10 [Coloring Brackets CodeForces - 149D]
  3. linux下线程控制
  4. leetcode刷题:不同路径II
  5. Leetcode每日一题:514.freedom-trail(自由之路)
  6. 让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行
  7. 广播BroadcastReceiver(2)
  8. 头目说“我不参与研发和测试的工作”,包含哪几个意思
  9. 怎么对ChannelHandler做测试?
  10. Git版本控制管理(七)--提交和查看提交历史
  11. 安卓ExpandableListView的详细使用教程(附代码解析过程)
  12. 联想ThinkBook解锁FN键
  13. pgloader:Heap exhausted ,game over
  14. java随机生成三位数
  15. Reactjs鼠标滚轮监听
  16. html5多图合成gif,gif动态图片制作 多张图片合成gif动态图片
  17. VSCode改主题背景
  18. 流言粉碎机:JAVA使用 try catch会影响性能
  19. 密码打马赛克已经不安全了!这款开源的去“马赛克“工具一秒还原
  20. ElasticSearch6.5.4三中文以及拼音的搜索

热门文章

  1. 企业财务制度二--(四)成本类科目 4101 生产成本(转载)
  2. Mac nginx运行php文件 File not found.
  3. CCProxy代理上网设置方法
  4. db migrate mysql_DB Migrate那点事
  5. 单引号、双引号、不加引号和反引号
  6. js监听div滚动条
  7. 计算机应用技术需要哪些通用能力,计算机应用技术能力培养
  8. Mac电脑使用终端连接服务器及传输文件
  9. 电脑中使用git命令时出现英文警告提示怎么办
  10. InvalidateRect只是增加重绘区域,在下次WM_PAINT的时候才生效