用C语言计算各色油墨的灰度、色偏、色效率
用彩色密度计由C、M、Y三色滤色片对一原色油墨的知实地以块进行测量,将会得到大、中、小三个数值道,分别用Dh、Dm、Dl表示,计算公式如下:色偏Eh=(Dm-Dl) /( Dh-Dl) X100%,灰度Gr=Dl/Dh X100%,色效率CE=1-(Dm+Dl)/(2 X Dh)X 100%
我们先把数据按上图顺序保存在文本文档,然后读入到一个数组中,再对数组每行大到小排序,这样便于后面的计算。
源代码如下:
#include <stdlib.h>
#include<stdio.h>
float bijiao(float a[9][3]);//排序函数
float jisuan(float a[9][3]);//计算函数
int main()
{
int i, j;
float date;
float date_storage[9][3];
FILE *fp;
if ((fp = fopen("zuoye.txt", "r")) == NULL)
{
printf("error");
}
printf("排序前\n");
for (i = 0; i < 9; i++)
{
for (j = 0; j < 3; j++)
{
fscanf(fp, "%f", &date);
date_storage[i][j] = date;
printf("%f\t", date_storage[i][j]);
}
printf("\n");
}
printf("\n");
printf("排序后\n");
bijiao(date_storage);//从大到小排序
for (i = 0; i < 9; i++)
{
for (j = 0; j < 3; j++)
{
printf("%f\t", date_storage[i][j]);
}
printf("\n");
}
printf("\n");
jisuan(date_storage);
}
float bijiao(float a[9][3])
{
int i, j,x;
float t;
for (i = 0; i < 9; i++)
{//a[i][0],a[i][1].a[i][2]
for (j = 0; j < 2;j++)
{
for (x = j+1; x < 3; x++)
{
if (a[i][j] < a[i][x])
{
t = a[i][j];
a[i][j] = a[i][x];
a[i][x] = t;
}
}
}
}
return 0;
}
float jisuan(float a[9][3])//计算函数
{
int i;
float S, H, X;
for (i = 0; i < 9; i++)
{
S=(a[i][1] - a[i][2]) / (a[i][0] - a[i][2]);
H = a[i][2] / a[i][0];
X = 1 - (a[i][1] + a[i][2]) / (2 * a[i][0]);
printf("色偏=%4.2f%%,灰度=%4.2f%%,色效率=%4.2f%%",100*S,100*H,100*X);
printf("\n");
}
return 0;
}
运行结果如下: