之前做紫边处理的时候介绍到过一些颜色转换的算法,这里详细列出几种颜色之间转换的代码,以备以后使用:

//RGB to CMYk

int* rgb2cmyk(int R,int G,int B)

{

int cmyk [4];

cmyk[3]=(int)(min(min(255-R,255-G),255-B)/2.55);//cmykK

int MyR = (int)(R/2.55);

int Div = 100-cmyk[3];

if (Div == 0)Div = 1;

cmyk[0] = ((100-MyR-cmyk[3])/Div)*100;//cmykC

int MyG = (int)(G/2.55);

cmyk[1] = ((100-MyG-cmyk[3])/Div)*100;

int MyB = (int)(B/2.55);

cmyk[2] = ((100-MyB-cmyk[3])/Div)*100;

return cmyk;

}

//CMYK to RGB

int* cmyk2rgb(int C,int M,int Y,int K)

{

int rgb[3];

int *R=&rgb[0];

int *G=&rgb[1];

int *B=&rgb[2];

float MyC = C/100;

float MyM = M/100;

float MyY = Y/100;

float MyK = K/100;

int *R = (int)((1-(MyC*(1-MyK)+MyK))*255);

int *G = (int)((1-(MyM*(1-MyK)+MyK))*255);

int *B = (int)((1-(MyY*(1-MyK)+MyK))*255);

if (*R<0) *R=0;

if (*G<0) *G=0;

if (*B<0) *B=0;

if (*R>255) *R=255;

if (*G>255) *G=255;

if (*B>255) *B=255;

return rgb;

}

//RGB to YUV

int* rgb2yuv(int R,int G,int B)

{

int yuv[3];

yuv[0] = (int)(0.299*R+0.587*G+0.114*B);

yuv[1] = (int)(-0.147*R-0.289*G+0.437*B);

yuv[2] = (int)(0.615*R-0.515*G-0.1*B);

return yuv;

}

//YUV to RGB

int* yuv2rgb(int y,int u,int v)

{

int rgb[3];

int *R=&rgb[0];

int *G=&rgb[1];

int *B=&rgb[2];

*R = (int)(y+1.14*v);

*G = (int)(y-0.394*u-0.581*v);

*B = (int)(y+2.028*u);

if (*R<0) *R=0;

if (*G<0) *G=0;

if (*B<0) *B=0;

if (*R>255) *R=255;

if (*G>255) *G=255;

if (*B>255) *B=255;

return rgb;

}

//RGB to YIQ

int* rgb2yiq(int R,int G,int B)

{

int yiq[3];

yiq[0] = (int)(0.299*R+0.587*G+0.114*B);

yiq[1] = (int)(0.596*R-0.274*G-0.322*B);

yiq[2] = (int)(0.212*R-0.523*G+0.311*B);

return yiq;

}

//YIQ to RGB

int* yiq2rgb(float y,float i,float q)

{

int rgb[3];

int *R=&rgb[0];

int *G=&rgb[1];

int *B=&rgb[2];

*R = (int)(y+0.956*i+0.621*q);

*G = (int)(y-0.272*i-0.647*q);

*B = (int)(y-1.105*i+1.702*q);

if (*R<0) *R=0;

if (*G<0) *G=0;

if (*B<0) *B=0;

if (*R>255) *R=255;

if (*G>255) *G=255;

if (*B>255) *B=255;

return rgb;

}

//RGB to YCbCr

int* rgb2ycbcr(int R, int G,int B)

{

int ycbcr[3];

ycbcr[0] = (int)(0.299*R+0.587*G+0.114*B);

ycbcr[1] = (int)(-0.1687*R-0.3313*G+0.5*B+128);

if (ycbcr[1] > 255) ycbcr[1] = 255;

ycbcr[2] = (int)(0.5*R-0.4187*G-0.0813*B+128);

if (ycbcr[2] > 255) ycbcr[2] = 255;

return ycbcr;

}

//YCbCr to RGB

int* ycbcr2rgb(int Y,int Cb,int Cr)

{

int rgb[3];

int *R=&rgb[0];

int *G=&rgb[1];

int *B=&rgb[2];

*R = (int)(Y + 1.402 * (Cr -128));

*G = (int)(Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr - 128));

*B = (int)(Y + 1.772 * (Cb -128));

if (*R > 255) *R = 255;

if (*G > 255) *G = 255;

if (*B > 255) *B = 255;

if (*R < 0) *R =0;

if (*G < 0) *G =0;

if (*B < 0) *B =0;

return rgb;

}

c语言绿色代码的作用,各种颜色相互转换算法的C语言源代码相关推荐

  1. c语言有趣代码_【新课预知】——C语言程序设计

    编者按:如今疫情这么严重,为了保护好自己,为了身边的人,大家可一定要听从国家号召--"宅"起来!并且,小编们为了让大家伙"宅"得更加健康,可是费了不少脑筋呢,学 ...

  2. python语言中代码注释可以使用_以下选项中,Python语言中代码注释使用的符号是: ( )...

    以下选项中,Python语言中代码注释使用的符号是: ( ) 答:# 中国古代舞蹈灿烂辉煌,但在理论研究方面却相对薄弱,这种情况直到明清都无显著改变. 答:错误 Photoshop中下列工具中不可以定 ...

  3. c语言程序代码应缩进几格,汉诺塔c语言程序代码

    汉诺塔c语言程序代码(通过vc++6.0验证)(附讲解) 让我们先看看代码吧 #include int hj(int a,int b, int c,int i) { int t; if(i==1) p ...

  4. r语言 siar 代码_平滑转换自回归(STAR)模型的R语言编程实现详解

    总体讲,ST(Smooth transition)模型,这块的code混乱的比较狗血,文献中的做法也是千奇百怪, 单变量的有 :STAR, LSTAR, ESTAR, 多变量的有:STVAR, LST ...

  5. c语言滤出是个最小值,经典滤波算法及C语言程序

    <经典滤波算法及C语言程序>由会员分享,可在线阅读,更多相关<经典滤波算法及C语言程序(9页珍藏版)>请在人人文库网上搜索. 1.经典的滤波算法经典的滤波算法 可以用用可以用用 ...

  6. c语言中队列的作用,循环队列的实现(C语言)

    /* 循环队列 VS2010 调试 */ #include #include #include #define MAX_SIZE 6 #define TRUE 1 #define FALSE 0 #d ...

  7. c语言程序日期时间戳,时间戳转日期的算法(C语言实现)

    1.算法 时间是有周期规律的,4年一个周期(平年.平年.平年.闰年)共计1461天.Windows上C库函数time(NULL)返回的是从1970年1月1日以来的毫秒数,我们最后算出来的年数一定要加上 ...

  8. 十字链表计算矩阵乘积 c语言,求用十字链表实现矩阵相加算法(C语言)急!!!...

    匿名用户 1级 2010-02-09 回答 我有一个可以用的.怎么给你?百度hi我吧. 算了,我贴上来吧,由电脑编程网整理: #include #include #define smax 45 typ ...

  9. c语言中如何用字母代替加减乘除的符号,c语言加减乘除代码

    c语言加减乘除代码 加减乘除是常见的数学运算,C语言当然支持,不过,C语言中的运算符号与数学中的略有不同,请见下表.加法减法乘法除法求余数(取余) 数学+-×÷无 C语言+-*/% C语言中的加号.减 ...

最新文章

  1. java help
  2. CTF-RSA-tool 安装全过程
  3. 系统优化方法与智能优化算法
  4. 选择Asp for javascript,非.net。
  5. 获取服务器信息info
  6. lofter 爬虫_本日Lofter德哈tag榜单 20201125
  7. 【强化学习】PPO代码注释版本
  8. Java JVM 汇编代码入门 GitChat链接
  9. uniapp 刷新后数据都没有了_环境温度传感器都没有连接,竟然还会有数据?
  10. CF1082G Petya and Graph(最小割,最大权闭合子图)
  11. LeetCode 1367. 二叉树中的列表(双重递归)
  12. i红枣 建议:程序员要多吃点红枣
  13. go语言解析html
  14. MySQL(21)--- GROUP BY 语句
  15. C/C++ 编译器全面采用 LLVM
  16. dateutil模块
  17. socket工作原理深入分析
  18. [古文观止]《相州昼锦堂记》(宋·欧阳修)
  19. python统计指定数字和_Python实现统计给定列表中指定数字出现次数的方法
  20. 一个经常玩电脑的人应该知道的:电脑快捷键

热门文章

  1. 谈薪时记住3个谈判技巧轻松拿高薪
  2. 华为鸿蒙os手机系统下载,华为鸿蒙2.0还原EMUI11系统
  3. 【LeetCode】旋转图像
  4. Openshift4.x -- 基于裸机(Bare Metal) UPI方式的集群安装(参考)
  5. 全能服务器环境 UPUPW ANK 诠释
  6. 很久很久以前纸牌玩法
  7. 【国产虚拟仪器】4 通道3.2GSPS(或者配置成2 通道6.4GSPS)采样率的12 位AD 采集FMC+子卡模块
  8. SolidWorks质量特性详解(惯性张量、转动惯量、惯性主轴)
  9. 【ubuntu】安装curl时,出现configure: error: select TLS backend(s) or disable TLS with --without-ssl.
  10. sinx*cosx的数学期望怎么算