|
|
1.1 root 1: .TH PICFILE 3X
2: .CT graphics files
3: .SH NAME
4: picopen_r, picopen_w, picread, picwrite, picclose, picputprop, picgetprop, picunpack, picpack, picerror \- picture file I/O
5: .SH SYNOPSIS
6: .nf
7: .B #include <picfile.h>
8: .PP
9: .B PICFILE *picopen_r(name)
10: .B char *name;
11: .PP
12: .B "PICFILE *picopen_w(name, type, x0, y0, w, h, chan, argv, cmap)
13: .B "char *name, *type, *chan, *argv[], *cmap;
14: .PP
15: .B int picread(pf, buf)
16: .B PICFILE *pf;
17: .B char *buf;
18: .PP
19: .B int picwrite(pf, buf)
20: .B PICFILE *pf;
21: .B char *buf;
22: .PP
23: .B void picclose(pf)
24: .B PICFILE *pf;
25: .PP
26: .B PICFILE *picputprop(pf, name, value)
27: .B PICFILE *pf;
28: .B char *name, *value;
29: .PP
30: .B char *picgetprop(pf, name)
31: .B PICFILE *pf;
32: .B char *name;
33: .PP
34: .B "void picunpack(pf, pix, fmt, arg ...)
35: .B PICFILE *pf;
36: .B char *pix, *fmt;
37: .PP
38: .B "void picpack(pf, pix, fmt, arg ...)
39: .B PICFILE *pf;
40: .B char *pix, *fmt;
41: .PP
42: .B "void picerror(string)
43: .B char *string;
44: .fi
45: .SH DESCRIPTION
46: These functions read and write raster images in
47: .IR picfile (5)
48: format.
49: They are loaded by option
50: .B -lpicfile
51: of
52: .IR ld (1).
53: Open picture files are referred to by pointers of type
54: .BR PICFILE* .
55: .PP
56: .I Picopen_r
57: opens the named picfile for reading and returns a pointer
58: to the open file.
59: If
60: .I name
61: is
62: .L
63: "IN"\fR,
64: standard input is used.
65: .PP
66: .I Picopen_w
67: similarly creates the named image file for writing.
68: The name
69: .L
70: "OUT"
71: refers to standard output.
72: .I Type
73: is a
74: .B TYPE
75: attribute, as described in
76: .IR picfile (5);
77: .I x0
78: and
79: .I y0
80: are the upper left coordinates of the
81: .BR WINDOW
82: attribute;
83: .I w
84: and
85: .I h
86: are the image width and heigth in pixels.
87: .I Chan
88: is a string specifying the order of channels for the
89: .B CHAN
90: attribute; the length of this string becomes the value of
91: .BR NCHAN .
92: .I Argv,
93: if nonzero, is
94: conventionally the second argument of the main program;
95: see
96: .IR exec (2).
97: It becomes a
98: .B COMMAND
99: attribute recording the provenance of the file.
100: .PP
101: The special call
102: .B picopen_w(name, PIC_SAMEARGS(pf))
103: creates a file with the same attributes as an already open
104: picfile.
105: .B PIC_SAMEARGS
106: mentions
107: .I argv
108: by name, hence the name must be visible at the point of call.
109: .PP
110: .I Picread
111: and
112: .I picwrite
113: read or write a single row of pixels using the
114: character array
115: .I buf.
116: The length of the row is determined from the file's
117: .B WINDOW
118: and
119: .B NCHAN
120: attributes.
121: One-bit-per-pixel images (of type
122: .B bitmap
123: or
124: .BR ccitt-g4 ,
125: for example)
126: are decoded to one byte per pixel, 0 for black, 255 for white, and
127: are encoded as 1 for pixel values less than 128 and 0 otherwise.
128: Files of type
129: .B ccir601
130: are decoded into conventional
131: .B rgb
132: channels.
133: .PP
134: .I Picclose
135: closes a picfile and frees associated storage.
136: .PP
137: .I Picputprop
138: called after
139: .I picopen_w
140: but before
141: .I picwrite
142: adds header attributes, returning a (probably changed) value of the
143: .B PICFILE
144: pointer.
145: .PP
146: .I Picgetprop
147: returns a pointer to the value of the named attribute, or
148: 0 if the picfile does not have the attribute.
149: In both
150: .I Picputprop
151: and
152: .I picgetprop,
153: with multiple appearances (e.g.
154: .BR COMMAND )
155: are expressed as a sequence of
156: values separated by newlines.
157: .PP
158: The header file defines macros to extract commonly-used
159: attributes:
160: .IP
161: .EX
162: PIC_NCHAN(pf), PIC_WIDTH(pf), PIC_HEIGHT(pf),
163: PIC_SAMEARGS(pf) \fR(see \fP\&picopen_w\fR)\fP
164: .EE
165: .PP
166: .I Picunpack
167: extracts the channels of pixel array
168: .I pix
169: into separate array
170: .I args
171: of types described by the
172: .I fmt
173: character string.
174: Format characters are
175: .BR c ,
176: .BR s ,
177: .BR l ,
178: .BR f ,
179: .BR d ,
180: for arrays of types unsigned char, short, long,
181: float, and double.
182: Format character
183: .B _
184: designates a picfile channel to be skipped.
185: .I Picpack
186: reverses the process.
187: These routines effect a standard machine-independent byte
188: ordering.
189: .PP
190: .IR Picerror
191: prints messages for errors resulting from calls to
192: .I picfile
193: routines.
194: .RI ( Perror (3)
195: cannot describe some error conditions,
196: like malformed header lines.)
197: .SH EXAMPLES
198: Unpack the green and z channels from a file with channels
199: .B rgbz...
200: .br
201: .ns
202: .IP
203: .EX
204: PICFILE *pf = picopen_r("file");
205: extern char pixels[], green[][1000];
206: extern float zdepth[][1000];
207: for(i=0; picread(pf, pixels); i)
208: picunpack(pf, pixels, "_c_f", green[i], zdepth[i]);
209: .EE
210: .PP
211: Reflect a picture about its vertical midline.
212: .br
213: .ns
214: .IP
215: .EX
216: PICFILE *in = picopen_r("picture");
217: PICFILE *out = picopen_w("OUT", PIC_SAMEARGS(in));
218: int w = PIC_WIDTH(in);
219: int n = PIC_NCHAN(in);
220: char *buffer = malloc(w*n), *temp = malloc(n);
221: while (picread(in, buffer)) {
222: char *left = buffer;
223: char *right = buffer + n*(w - 1);
224: for( ; left<right; left+=n, right-=n) {
225: strncpy(temp, left, n);
226: strncpy(left, right, n);
227: strncpy(right, temp, n);
228: }
229: picwrite(out, buffer);
230: }
231: .EE
232: .SH SEE ALSO
233: .IR picfile (5),
234: .IR pico (1),
235: .IR bcp (1)
236: .SH DIAGNOSTICS
237: .I Picread
238: returns 1 on success, 0 on end of file or error.
239: .br
240: .I Picopen_r
241: and
242: .I picopen_w
243: return 0 for unopenable files.
244: .SH BUGS
245: .I Picpack
246: and
247: .I picunpack
248: store and retrieve floating point channels (types
249: .B f
250: and
251: .BR d )
252: using native floating-point, rather than something
253: machine independent like IEEE format.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.