主题:对于彭国伦书中一道“图片反相”例题的疑惑
彭国伦的《Fortran95程序设计》第九章最后一道例题讲的是编写一个程序,把256*256的.raw图像进行反相。
1,数据首先以字符数组cbuffer(256*256)的方式读入内存(此时内存中的二进制数据应该是跟图片中的二进制数据完全相同吧)
2,用ichar将cbuffer的数据转入整型数组ibuffer(ichar得到的是-128~127之间的数,调整为0~255之间,此时每个量是4byte吧)
do i=1,buffer_size
if(ichar(cbuffer(i))>=0)then
ibuffer(i)=ichar(cbuffer(i))
else
ibuffer(i)=ichar(cbuffer(i))+256
end if
end do
3,反相,并将数据转回字符数组(这一步不理解,为什么使用char之前没有把数组的范围调整为-128~127? 毕竟第二步ichar得到的值
是-128~127,char作为ichar的“逆函数”,处理的也应该是-128~127的数据吧!!??)。
do i=1,buffer_size
cbuffer(i)=char(255-ibuffer(i))
end do
4,将cbuffer()写进图像文件
open(fileid,file=filename,recl=buffer_size/4,access="direct",status="replace",iostat=stat)
write(fileid,rec=1)cbuffer
哪位前辈帮我理清一下数据的整个转化过程?我想重点应该在char和ichar这两个函数的内部原理上吧!