走过路过看过的高手

//(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 2
1 4
6 9
2 5
7 10
3 6
8 11
0 0

 ------------------ 

代码为这样的时候不出错

即:

p=(int *)malloc(sizeof(int)*N*M*3);

while(1)

{

                          

...........

}

不出错。


走过路过看懂了的高手,求解析。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值