38 subroutine jpcpack(fld,width,height,idrstmpl,cpack,lcpack)
40 integer,
intent(in) :: width,height
41 real,
intent(in) :: fld(width*height)
42 character(len=1),
intent(out) :: cpack(*)
43 integer,
intent(inout) :: idrstmpl(*)
44 integer,
intent(inout) :: lcpack
49 integer :: ifld(width*height),retry
50 integer,
parameter :: zero=0
51 integer :: enc_jpeg2000
52 character(len=1),
allocatable :: ctemp(:)
55 bscale=2.0**real(-idrstmpl(2))
56 dscale=10.0**real(idrstmpl(3))
68 if (fld(j).gt.rmax) rmax=fld(j)
69 if (fld(j).lt.rmin) rmin=fld(j)
71 if (idrstmpl(2).eq.0)
then
72 maxdif=nint(rmax*dscale)-nint(rmin*dscale)
74 maxdif=nint((rmax-rmin)*dscale*bscale)
82 if (rmin.ne.rmax .AND. maxdif.ne.0)
then
87 if (idrstmpl(2).eq.0)
then
92 imin=nint(rmin*dscale)
93 imax=nint(rmax*dscale)
95 temp=alog(real(maxdif+1))/alog(2.0)
100 ifld(j)=nint(fld(j)*dscale)-imin
109 maxdif=nint((rmax-rmin)*bscale)
110 temp=alog(real(maxdif+1))/alog(2.0)
114 ifld(j)=max(0,nint(((fld(j)*dscale)-rmin)*bscale))
124 allocate(ctemp(nbytes*ndpts))
125 call g2_sbytesc(ctemp,ifld,0,nbytes*8,0,ndpts)
126 lcpack=enc_jpeg2000(ctemp,width,height,nbits,idrstmpl(6),
127 & idrstmpl(7),retry,cpack,nsize)
128 if (lcpack.le.0)
then
129 print *,
'jpcpack: ERROR Packing JPC=',lcpack
130 if (lcpack.eq.-3)
then
132 print *,
'jpcpack: Retrying....'
133 lcpack=enc_jpeg2000(ctemp,width,height,nbits,idrstmpl(6),
134 & idrstmpl(7),retry,cpack,nsize)
135 if (lcpack.le.0)
then
136 print *,
'jpcpack: Retry Failed.'
138 print *,
'jpcpack: Retry Successful.'
155 iref=transfer(ref,iref)
159 if (idrstmpl(6).eq.0) idrstmpl(7)=255