算法转换c语言程序,各种颜色相互转换算法的C语言源代码

//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;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值