回 帖 发 新 帖 刷新版面

主题:对于彭国伦书中一道“图片反相”例题的疑惑

彭国伦的《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这两个函数的内部原理上吧!

回复列表 (共1个回复)

沙发


彭国伦可能是错的,因为我添加了一行程序

if(ichar(cbuffer(i))>=127)then
j=j+1
end if

后输出j为20547,说明ichar的返回值范围为0~255。彭的书中判断ichar是否小于零的语句虽然没有对结果造成影响,但确实是没什么用的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册