android hsv,HSV与RGB之间相互转换
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之间相互转换相关推荐
- HSV颜色空间和RGB颜色空间相互转换C语言实现
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model).这个模型中颜色的参数 ...
- HSV与RGB之间相互转换
2019独角兽企业重金招聘Python工程师标准>>> 代码来自http://www.cocoabuilder.com/archive/cocoa/198570-here-is-co ...
- 【主色提取】HSV 颜色空间与 RGB 颜色空间互相转化的公式和代码
系列文章目录 第二章 主色提取之颜色空间转化 目录 系列文章目录 文章目录 前言 一.HSV 和 RGB 颜色空间 二.颜色转化 1. RGB to HSV 2. HSV to RGB 三. 完整代码 ...
- 【QT数字图像处理】(四)hsv颜色空间转rgb颜色空间
一.颜色模型 1.1 rgb颜色模型 1.2 hsv颜色模型 hsv颜色模型具有以下优点: 1.符合人眼对颜色的感觉: 2.hsv颜色模型中hsv三个坐标是相互独立的:当采用rgb颜色模型时,改变某一 ...
- 使用C++实现YUV格式图像与RGB格式图像之间相互转换
使用C++实现YUV格式图像与RGB格式图像之间相互转换 一.RGB与YUV转换公式 1.RGB转YUV 1)RGB转换亮度与色差信号公试: 2)归一化为YUV的转化公试为: 2.YUV转RGB 二. ...
- HSV颜色空间转RGB(C语言代码),ESP32使用RMT驱动WS2812B,七彩流光灯光效果
HSV(Hue, Saturation, Value) 模型中,颜色的参数分别是:色调(H),饱和度(S),明度(V).它更类似于人类感觉颜色的方式,颜色?深浅?明暗?通过这种方式可以很直观的改变渲染 ...
- RGB图像转换成HSV图像,HSV图像转换为RGB图像
HSV 即使用 色相(Hue).饱和度(Saturation).明度(Value) 来表示色彩的一种方式 色相:将颜色用0°到360°表示,就是我们日常讲的颜色名称,如红色.蓝色等. 色相与颜色对应关 ...
- c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...
- SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新
SAP MM 销售订单库存与普通库存之间相互转换过账后对于EBEWH以及MBEWH表的更新 1,DEMO数据 物料号:1300009995 工厂:2160 销售订单号/item号:0010097627 ...
最新文章
- DockerCompose-初始Compose
- 动态规划训练10 [Coloring Brackets CodeForces - 149D]
- linux下线程控制
- leetcode刷题:不同路径II
- Leetcode每日一题:514.freedom-trail(自由之路)
- 让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行
- 广播BroadcastReceiver(2)
- 头目说“我不参与研发和测试的工作”,包含哪几个意思
- 怎么对ChannelHandler做测试?
- Git版本控制管理(七)--提交和查看提交历史
- 安卓ExpandableListView的详细使用教程(附代码解析过程)
- 联想ThinkBook解锁FN键
- pgloader:Heap exhausted ,game over
- java随机生成三位数
- Reactjs鼠标滚轮监听
- html5多图合成gif,gif动态图片制作 多张图片合成gif动态图片
- VSCode改主题背景
- 流言粉碎机:JAVA使用 try catch会影响性能
- 密码打马赛克已经不安全了!这款开源的去“马赛克“工具一秒还原
- ElasticSearch6.5.4三中文以及拼音的搜索