热门标签 | 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库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
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社区 版权所有