31 subroutine pngpack(fld,width,height,idrstmpl,cpack,lcpack)
33 integer,
intent(in) :: width,height
34 real,
intent(in) :: fld(width*height)
35 character(len=1),
intent(out) :: cpack(*)
36 integer,
intent(inout) :: idrstmpl(*)
37 integer,
intent(out) :: lcpack
42 integer :: ifld(width*height), nbits
43 integer,
parameter :: zero=0
45 character(len=1),
allocatable :: ctemp(:)
48 bscale=2.0**real(-idrstmpl(2))
49 dscale=10.0**real(idrstmpl(3))
61 if (fld(j).gt.rmax) rmax=fld(j)
62 if (fld(j).lt.rmin) rmin=fld(j)
64 maxdif=nint((rmax-rmin)*dscale*bscale)
71 if (rmin.ne.rmax .AND. maxdif.ne.0)
then
76 if (idrstmpl(2).eq.0)
then
81 imin=nint(rmin*dscale)
82 imax=nint(rmax*dscale)
84 temp=alog(real(maxdif+1))/alog(2.0)
89 ifld(j)=nint(fld(j)*dscale)-imin
98 maxdif=nint((rmax-rmin)*bscale)
99 temp=alog(real(maxdif+1))/alog(2.0)
103 ifld(j)=max(0,nint(((fld(j)*dscale)-rmin)*bscale))
112 elseif (nbits.le.16)
then
114 elseif (nbits.le.24)
then
119 nbytes=(nbits/8)*ndpts
120 allocate(ctemp(nbytes))
125 lcpack=enc_png(ctemp,width,height,nbits,cpack)
126 if (lcpack.le.0)
then
127 print *,
'pngpack: ERROR Encoding PNG = ',lcpack
142 iref=transfer(ref,iref)