热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[转]各种颜色相互转换算法的C语言源代码

ViewCode1RGBtoCMYk2int*rgb2cmyk(intR,intG,intB)3{4intcmyk[4]
View Code
  1 //RGB to CMYk
  2 int* rgb2cmyk(int R,int G,int B)
  3 {
  4 int cmyk [4];
  5 
  6 cmyk[3]=(int)(min(min(255-R,255-G),255-B)/2.55);//cmykK
  7 int MyR = (int)(R/2.55);
  8 int Div = 100-cmyk[3];
  9 if (Div == 0)Div = 1;
 10 cmyk[0] = ((100-MyR-cmyk[3])/Div)*100;//cmykC
 11 int MyG = (int)(G/2.55);
 12 cmyk[1] = ((100-MyG-cmyk[3])/Div)*100;
 13 int MyB = (int)(B/2.55);
 14 cmyk[2] = ((100-MyB-cmyk[3])/Div)*100;
 15 
 16 return cmyk;
 17 }
 18 
 19 
 20 //CMYK to RGB
 21 int* cmyk2rgb(int C,int M,int Y,int K)
 22 {
 23 int rgb[3];
 24 int *R=&rgb[0];
 25 int *G=&rgb[1];
 26 int *B=&rgb[2];
 27 
 28 float MyC = C/100;
 29 float MyM = M/100;
 30 float MyY = Y/100;
 31 float MyK = K/100;
 32 
 33 int *R = (int)((1-(MyC*(1-MyK)+MyK))*255);
 34 int *G = (int)((1-(MyM*(1-MyK)+MyK))*255);
 35 int *B = (int)((1-(MyY*(1-MyK)+MyK))*255);
 36 
 37 if (*R<0) *R=0;
 38 if (*G<0) *G=0;
 39 if (*B<0) *B=0;
 40 if (*R>255) *R=255;
 41 if (*G>255) *G=255;
 42 if (*B>255) *B=255;
 43 
 44 return rgb;
 45 }
 46 
 47 
 48 //RGB to YUV 
 49 int* rgb2yuv(int R,int G,int B)
 50 {
 51 int yuv[3];
 52 
 53 yuv[0] = (int)(0.299*R+0.587*G+0.114*B);
 54 yuv[1] = (int)(-0.147*R-0.289*G+0.437*B);
 55 yuv[2] = (int)(0.615*R-0.515*G-0.1*B);
 56 
 57 return yuv;
 58 }
 59 
 60 
 61 //YUV to RGB 
 62 int* yuv2rgb(int y,int u,int v)
 63 {
 64 int rgb[3];
 65 int *R=&rgb[0];
 66 int *G=&rgb[1];
 67 int *B=&rgb[2];
 68     
 69 *R = (int)(y+1.14*v);
 70 *G = (int)(y-0.394*u-0.581*v);
 71 *B = (int)(y+2.028*u);
 72 
 73 if (*R<0) *R=0;
 74 if (*G<0) *G=0;
 75 if (*B<0) *B=0;
 76 if (*R>255) *R=255;
 77 if (*G>255) *G=255;
 78 if (*B>255) *B=255;
 79 
 80 return rgb;
 81 }
 82 
 83 
 84 //RGB to YIQ
 85 int* rgb2yiq(int R,int G,int B)
 86 {
 87 int yiq[3];
 88 
 89 yiq[0] = (int)(0.299*R+0.587*G+0.114*B);
 90 yiq[1] = (int)(0.596*R-0.274*G-0.322*B);
 91 yiq[2] = (int)(0.212*R-0.523*G+0.311*B);
 92 
 93 return yiq;
 94 }
 95 
 96 
 97 //YIQ to RGB
 98 int* yiq2rgb(float y,float i,float q)
 99 {
100 int rgb[3];
101 int *R=&rgb[0];
102 int *G=&rgb[1];
103 int *B=&rgb[2];
104 
105 *R = (int)(y+0.956*i+0.621*q);
106 *G = (int)(y-0.272*i-0.647*q);
107 *B = (int)(y-1.105*i+1.702*q);
108 
109 if (*R<0) *R=0;
110 if (*G<0) *G=0;
111 if (*B<0) *B=0;
112 if (*R>255) *R=255;
113 if (*G>255) *G=255;
114 if (*B>255) *B=255;
115 
116 return rgb;
117 }
118 
119 //RGB to YCbCr
120 int* rgb2ycbcr(int R, int G,int B)
121 {
122 int ycbcr[3];
123 
124 ycbcr[0] = (int)(0.299*R+0.587*G+0.114*B);
125 
126 ycbcr[1] = (int)(-0.1687*R-0.3313*G+0.5*B+128); 
127 if (ycbcr[1] > 255) ycbcr[1] = 255;
128 
129 ycbcr[2] = (int)(0.5*R-0.4187*G-0.0813*B+128);
130 if (ycbcr[2] > 255) ycbcr[2] = 255;
131 
132 return ycbcr;
133 }
134 
135 
136 //YCbCr to RGB
137 int* ycbcr2rgb(int Y,int Cb,int Cr)
138 {
139 int rgb[3];
140 int *R=&rgb[0];
141 int *G=&rgb[1];
142 int *B=&rgb[2];
143 
144 *R = (int)(Y + 1.402 * (Cr -128));
145 *G = (int)(Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr - 128));
146 *B = (int)(Y + 1.772 * (Cb -128));
147 
148 if (*R > 255) *R = 255;
149 if (*G > 255) *G = 255;
150 if (*B > 255) *B = 255;
151 
152 if (*R <0) *R =0;
153 if (*G <0) *G =0;
154 if (*B <0) *B =0;
155 
156 return rgb;
157 }

 


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
宝贝缘缘儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有