//(vc6.0)
/*程序用于图形转换,即把一个像素的三个RGB值相加除以3,结果表示像素的灰度,用文件输入,具体输入看代码后的解析*/
#include <fstream>
#include <iostream>#include <stdlib.h>
using namespace std;
int main(void)
{
int N,M;
int i,k=0;
ifstream in("iinput.txt");
int *p;
in>>N>>M;
p=(int *)malloc(sizeof(int)*N*M*3); //放在这里会出错(vc6.0)
while(1)
{
//p=(int *)malloc(sizeof(int)*N*M*3);//放在循环体while外出错,这里不出错????????????(有个例外见下面的解析2)
if(N==0&&M==0)
{
break;
}
k++;
//读入数据
for(i=0;i<N*M*3;i++)
{
int temp;
in>>temp;
p[i]=temp;
}
//计算灰度
for(i=0;i<N*M;i++)
{
p[i]=(p[i]+p[i+N*M]+p[i+2*N*M])/3;
}
//打印结果
cout<<"case "<<k<<":\n";
for(i=0;i<N*M;i++)
{
cout<<p[i]<<" ";
if((i+1)%M==0)
{
cout<<endl;
}
}
in>>N;
in>>M;
}
//if(p==NULL)
//exit(1);
//p=NULL;
free(p);
//p=NULL;
return 0;
}
1.程序的输入iinput.txt
------表示一个N*M的象素矩阵
2 2
------分别为四个象素的(RGB三原色的R值)
1 4
6 9
------分别为四个象素的(RGB三原色的G值)
2 5
7 10
------分别为四个象素的(RGB三原色的B值)
3 6
8 11
------另一个2*3的象素矩阵,接下来的应该都懂了
2 3
0 1 2
3 4 2
0 1 2
3 4 3
0 1 2
3 4 4
------0 0表示输入结束
0 0
当代码为这样的时候不出错:
while(1)
{
p=(int *)malloc(sizeof(int)*N*M*3);
...........
}
当为这样的时候出错:
p=(int *)malloc(sizeof(int)*N*M*3);
while(1)
{
...........
}
2.当输入iinput.txt内容为下的时候
2 21 4
6 9
2 5
7 10
3 6
8 11
0 0
------------------
代码为这样的时候不出错
即:
p=(int *)malloc(sizeof(int)*N*M*3);
while(1)
{
...........
}
不出错。
走过路过看懂了的高手,求解析。