3 Imager::interface.pod - decribes the virtual image interface
10 The Imager virtual interface aims to allow image types to be created
11 for special purposes, both to allow consistent access to images with
12 different sample sizes, and organizations, but also to allow creation
13 of synthesized or virtual images.
15 This is a C level interface rather than Perl.
17 =head2 Existing Images
19 As of this writing we have the following concrete image types:
25 8-bit/sample direct images
29 16-bit/sample direct images
33 8-bit/sample 8-bit/index paletted images
37 Currently there is only one virtual image type:
43 masked images, where a mask image can control write access to an
48 Other possible concrete images include:
54 "bitmaps", 1 bit/sample images (perhaps limited to a single channel)
58 16-bit/index paletted images
62 Some other possible virtual images:
68 image alpha combining, where the combining function can be specified
69 (see the layer modes in graphical editors like the GIMP or photoshop.
75 Each image type needs to define a number of functions which implement
78 The image structure includes information describes the image, which
79 can be used to determine the structure of the image:
85 the number of samples kept for each pixel in the image. For paletted
86 images the samples are kept for each entry in the palette.
90 the dimensions of the image in pixels.
94 the number of bytes of data kept for the image. Zero for virtual
95 images. Does not include the space required for the palette for
100 controls which samples will be written to for direct images.
104 the number of bits kept for each sample. There are enum values
105 i_8_bits, i_16_bits and i_double_bits (64).
109 the type of image, either i_direct_type or i_palette_type. Direct
110 images keep the samples for every pixel image, while i_palette_type
111 images keep an index into a color table for each pixel.
115 whether the image keeps any pixel data. If this is non-zero then
116 idata points to image data, otherwise it points to implementation
117 defined data, though ext_data is more likely to be used for that.
121 image data. If the image is 8-bit direct, non-virtual, then this
122 consists of each sample of the image stored one after another,
123 otherwise it is implementation defined.
127 will be used to store meta-data for an image, eg. tags from a TIFF
128 file, or animation information from a GIF file. Currently unused.
132 for internal use of image types. This is not released by the standard
133 i_img_exorcise() function. If you create a new image type and want to
134 store a pointer to allocated memory here you should point i_f_destroy
135 at a function that will release the data.
139 If a caller has no knowledge of the internal format of an image, the
140 caller must call the appropriate image function pointer. Imager
141 provides macros that wrap these functions, so it isn't necessary to
144 Many functions have a similar function with an 'f' suffix, these take
145 or return samples specified with floating point values rather than
146 8-bit integers (unsigned char). Floating point samples are returned
147 in the range 0 to 1 inclusive.
151 =item i_f_ppix(im, x, y, color)
153 =item i_f_ppixf(im, x, y, fcolor)
155 stores the specified color at pixel (x,y) in the image. If the pixel
156 can be stored return 0, otherwise -1. An image type may choose to
157 return 0 under some circumstances, eg. writing to a masked area of an
158 image. The color or fcolor always contains the actual samples to be
159 written, rather than a palette index.
161 =item i_f_plin(im, l, r, y, colors)
163 =item i_f_plinf(im, l, r, y, fcolors)
165 stores (r-l) pixels at positions (l,y) ... (r-1, y) from the array
166 specified by colors (or fcolors). Returns the number of pixels
167 written to. If l is negative it will return 0. If r > im->xsize then
168 only (im->xsize - l) will be written.
170 =item i_f_gpix(im, x, y, color)
172 =item i_f_gpixf(im, x, y, fcolor)
174 retrieves a single pixel from position (x,y). This returns the
175 samples rather than the index for paletted images.
177 =item i_f_glin(im, l, r, y, colors)
179 =item i_f_glinf(im, l, r, y, fcolors)
181 retrieves (r-l) pixels from positions (l, y) through (r-1, y) into the
182 array specified by colors. Returns the number of pixels retrieved.
183 If l < 0 no pixels are retrieved. If r > im->xsize then pixels (l, y)
184 ... (im->xsize-1, y) are retrieved. Retrieves the samples rather than
185 the color indexes for paletted images.
187 =item i_f_gsamp(im, l, r, y, samples, chans, chan_count)
189 =item i_f_gsampf(im, l, r, y, fsamples, chans, chan_count)
191 Retrieves samples from channels specified by chans (for length
192 chan_count) from pixels at positions (l,y) ... (r-1, y). If chans is
193 NULL then samples from channels 0 ... chan_count-1 will be retrieved.
194 Returns the number of sample retrieved (_not_ the number of channels).
195 If a channel in chans is not present in the image or l < 0, returns 0.
196 If r > im->xsize, then the samples from (l,y) ... (im->xsize-1, y) are
201 The following are for images where type == i_palette_type only.
205 =item i_f_gpal(im, l, r, y, vals)
207 Retrieves color indexes from the image for pixels (l, y) ... (r-1, y)
208 into vals. Returns the number of indexes retrieved.
210 =item i_f_ppal(im, l, r, y, vals)
212 Stores color indexes into the image for pixels (l, y) ... (r-1, y)
213 from vals. Returns the number of indexes retrieved. If indices are
214 outside the range of the images palette, then you may have problems
215 reading those pixels with i_gpix() or i_glin().
217 =item i_f_addcolors(im, colors, count)
219 Adds the count colors to the image's palette. Returns the index of
220 the first color added, or -1 if there is not enough space for count
223 =item i_f_getcolors(im, index, colors, count)
225 Retrieves count colors from the image's palette starting from entry
226 index in the palette. Returns non-zero on success.
228 =item i_f_colorcount(im)
230 Returns the number of colors in the image's palette. Returns -1 if
231 this is not a paletted image.
233 =item i_f_maxcolors(im)
235 Returns the maximum number of colors that can fit in the image's
236 palette. Returns -1 if this is not a paletted image.
238 =item i_f_findcolor(im, color, entry)
240 Searches the image's palette for the specified color, setting *entry
241 to the index and returning non-zero. Returns zero if the color is not
244 =item i_f_setcolors_t(im, index, colors, count)
246 Sets count colors starting from index in the image from the array
247 colors. The colors to be set must already have entries in the image's
248 palette. Returns non-zero on success.
252 Finally, the i_f_destroy function pointer can be set which is called
253 when the image is destroyed. This can be used to release memory
254 pointed to by ext_data or release any other resources.
256 When writing to a paletted image with i_ppix() or i_plin() and the
257 color you are writing doesn't exist in the image, then it's possible
258 that the image will be internally converted to a direct image with the
259 same number of channels.
263 Several functions have been written to simplify creating new image types.
265 These tools are available by including imagei.h.
267 =head2 Floating point wrappers
269 These functions implement the floating point sample versions of each
270 interface function in terms of the integer sample version.
289 =head2 Forwarding functions
291 These functions are used in virtual images where the call should
292 simply be forwarded to the underlying image. The underlying image is
293 assumed to be the first pointer in a structure pointed at by ext_data.
295 If this is not the case then these functions will just crash :)
299 =item i_addcolors_forward
301 =item i_getcolors_forward
303 =item i_colorcount_forward
305 =item i_maxcolors_forward
307 =item i_findcolor_forward
309 =item i_setcolors_forward
315 Imagei.h defines several macros for converting samples between
318 Each macro is of the form SampleI<size>ToI<size> where I<size> is one
319 of 8, 16, or F (for floating-point samples).
323 =item SampleFTo16(sample)
325 =item Sample16ToF(sample)
327 =item SampleFTo8(sample)
329 =item Sample8ToF(sample)
331 =item Sample16To8(num)
333 =item Sample8To16(num)