1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <syserr.h>
include <imhdr.h>
include <imio.h>
# IMGL3? -- Get a line from an apparently three dimensional image. If there
# is only one input buffer, no image section, we are not referencing out of
# bounds, and no datatype conversion needs to be performed, directly access
# the pixels to reduce the overhead per line.
pointer procedure imgl3l (im, line, band)
pointer im # image header pointer
int line # line number within band
int band # band number
int fd, nchars
long vs[3], ve[3], offset
pointer bp, imggsl(), freadp()
errchk imopsf, imerr
begin
repeat {
if (IM_FAST(im) == YES && IM_PIXTYPE(im) == TY_LONG) {
fd = IM_PFD(im)
if (fd == NULL) {
call imopsf (im)
next
}
if (line < 1 || line > IM_LEN(im,2) ||
band < 1 || band > IM_LEN(im,3))
call imerr (IM_NAME(im), SYS_IMREFOOB)
offset = (((band - 1) * IM_PHYSLEN(im,2) + line - 1) *
IM_PHYSLEN(im,1)) * SZ_LONG + IM_PIXOFF(im)
nchars = IM_PHYSLEN(im,1) * SZ_LONG
ifnoerr (bp = (freadp (fd, offset, nchars) - 1) / SZ_LONG + 1)
return (bp)
}
vs[1] = 1
ve[1] = IM_LEN(im,1)
vs[2] = line
ve[2] = line
vs[3] = band
ve[3] = band
return (imggsl (im, vs, ve, 3))
}
end
|