]> git.imager.perl.org - imager.git/blob - imext.c
return the real giflib version, rather than the dummy
[imager.git] / imext.c
1 #include "imexttypes.h"
2 #include "imager.h"
3
4 /*
5  DON'T ADD CASTS TO THESE
6 */
7 im_ext_funcs imager_function_table =
8   {
9     IMAGER_API_VERSION,
10     IMAGER_API_LEVEL,
11
12     mymalloc,
13     myfree,
14     myrealloc,
15
16     mymalloc_file_line,
17     myfree_file_line,
18     myrealloc_file_line,
19
20     i_img_8_new,
21     i_img_16_new,
22     i_img_double_new,
23     i_img_pal_new,
24     i_img_destroy,
25     i_sametype,
26     i_sametype_chans,
27     i_img_info,
28
29     i_ppix,
30     i_gpix,
31     i_ppixf,
32     i_gpixf,
33     i_plin,
34     i_glin,
35     i_plinf,
36     i_glinf,
37     i_gsamp,
38     i_gsampf,
39     i_gpal,
40     i_ppal,
41     i_addcolors,
42     i_getcolors,
43     i_colorcount,
44     i_maxcolors,
45     i_findcolor,
46     i_setcolors,
47
48     i_new_fill_solid,
49     i_new_fill_solidf,
50     i_new_fill_hatch,
51     i_new_fill_hatchf,
52     i_new_fill_image,
53     i_new_fill_fount,
54     i_fill_destroy,
55
56     i_quant_makemap,
57     i_quant_translate,
58     i_quant_transparent,
59
60     i_clear_error,
61     i_push_error,
62     i_push_errorf,
63     i_push_errorvf,
64
65     i_tags_new,
66     i_tags_set,
67     i_tags_setn,
68     i_tags_destroy,
69     i_tags_find,
70     i_tags_findn,
71     i_tags_delete,
72     i_tags_delbyname,
73     i_tags_delbycode,
74     i_tags_get_float,
75     i_tags_set_float,
76     i_tags_set_float2,
77     i_tags_get_int,
78     i_tags_get_string,
79     i_tags_get_color,
80     i_tags_set_color,
81
82     i_box,
83     i_box_filled,
84     i_box_cfill,
85     i_line,
86     i_line_aa,
87     i_arc,
88     i_arc_aa,
89     i_arc_cfill,
90     i_arc_aa_cfill,
91     i_circle_aa,
92     i_flood_fill,
93     i_flood_cfill,
94
95     i_copyto,
96     i_copyto_trans,
97     i_copy,
98     i_rubthru,
99
100     /* IMAGER_API_LEVEL 2 functions */
101     i_set_image_file_limits,
102     i_get_image_file_limits,
103     i_int_check_image_file_limits,
104
105     i_flood_fill_border,
106     i_flood_cfill_border,
107
108     /* IMAGER_API_LEVEL 3 functions */
109     i_img_setmask,
110     i_img_getmask,
111     i_img_getchannels,
112     i_img_get_width,
113     i_img_get_height,
114     i_lhead,
115     i_loog,
116
117     /* IMAGER_API_LEVEL 4 functions */
118     i_img_alloc,
119     i_img_init,
120   };
121
122 /* in general these functions aren't called by Imager internally, but
123    only via the pointers above, since faster macros that call the
124    image vtable pointers are used.
125
126    () are used around the function names to prevent macro replacement
127    on the function names.
128 */
129
130 /*
131 =item i_ppix(im, x, y, color)
132
133 =category Drawing
134
135 Sets the pixel at (x,y) to I<color>.
136
137 Returns 0 if the pixel was drawn, or -1 if not.
138
139 Does no alpha blending, just copies the channels from the supplied
140 color to the image.
141
142 =cut
143 */
144
145 int 
146 (i_ppix)(i_img *im, int x, int y, const i_color *val) {
147   return i_ppix(im, x, y, val);
148 }
149
150 /*
151 =item i_gpix(im, C<x>, C<y>, C<color>)
152
153 =category Drawing
154
155 Retrieves the C<color> of the pixel (x,y).
156
157 Returns 0 if the pixel was retrieved, or -1 if not.
158
159 =cut
160 */
161
162 int
163 (i_gpix)(i_img *im,int x,int y,i_color *val) {
164   return i_gpix(im, x, y, val);
165 }
166
167 /*
168 =item i_ppixf(im, C<x>, C<y>, C<fcolor>)
169
170 =category Drawing
171
172 Sets the pixel at (C<x>,C<y>) to the floating point color C<fcolor>.
173
174 Returns 0 if the pixel was drawn, or -1 if not.
175
176 Does no alpha blending, just copies the channels from the supplied
177 color to the image.
178
179 =cut
180 */
181 int
182 (i_ppixf)(i_img *im, int x, int y, const i_fcolor *val) {
183   return i_ppixf(im, x, y, val);
184 }
185
186 /*
187 =item i_gpixf(im, C<x>, C<y>, C<fcolor>)
188
189 =category Drawing
190
191 Retrieves the color of the pixel (x,y) as a floating point color into
192 C<fcolor>.
193
194 Returns 0 if the pixel was retrieved, or -1 if not.
195
196 =cut
197 */
198
199 int
200 (i_gpixf)(i_img *im,int x,int y,i_fcolor *val) {
201   return i_gpixf(im, x, y, val);
202 }
203
204 /*
205 =item i_plin(im, l, r, y, colors)
206
207 =category Drawing
208
209 Sets (r-l) pixels starting from (l,y) using (r-l) values from
210 I<colors>.
211
212 Returns the number of pixels set.
213
214 =cut
215 */
216
217 int
218 (i_plin)(i_img *im, int l, int r, int y, const i_color *vals) {
219   return i_plin(im, l, r, y, vals);
220 }
221
222 /*
223 =item i_glin(im, l, r, y, colors)
224
225 =category Drawing
226
227 Retrieves (r-l) pixels starting from (l,y) into I<colors>.
228
229 Returns the number of pixels retrieved.
230
231 =cut
232 */
233
234 int
235 (i_glin)(i_img *im, int l, int r, int y, i_color *vals) {
236   return i_glin(im, l, r, y, vals);
237 }
238
239 /*
240 =item i_plinf(im, C<left>, C<right>, C<fcolors>)
241
242 =category Drawing
243
244 Sets (right-left) pixels starting from (left,y) using (right-left)
245 floating point colors from C<fcolors>.
246
247 Returns the number of pixels set.
248
249 =cut
250 */
251
252 int
253 (i_plinf)(i_img *im, int l, int r, int y, const i_fcolor *vals) {
254   return i_plinf(im, l, r, y, vals);
255 }
256
257 /*
258 =item i_glinf(im, l, r, y, colors)
259
260 =category Drawing
261
262 Retrieves (r-l) pixels starting from (l,y) into I<colors> as floating
263 point colors.
264
265 Returns the number of pixels retrieved.
266
267 =cut
268 */
269
270 int
271 (i_glinf)(i_img *im, int l, int r, int y, i_fcolor *vals) {
272   return i_glinf(im, l, r, y, vals);
273 }
274
275 /*
276 =item i_gsamp(im, left, right, y, samples, channels, channel_count)
277
278 =category Drawing
279
280 Reads sample values from C<im> for the horizontal line (left, y) to
281 (right-1,y) for the channels specified by C<channels>, an array of int
282 with C<channel_count> elements.
283
284 If channels is NULL then the first channels_count channels are retrieved for
285 each pixel.
286
287 Returns the number of samples read (which should be (right-left) *
288 channel_count)
289
290 =cut
291 */
292 int
293 (i_gsamp)(i_img *im, int l, int r, int y, i_sample_t *samp, 
294                    const int *chans, int chan_count) {
295   return i_gsamp(im, l, r, y, samp, chans, chan_count);
296 }
297
298 /*
299 =item i_gsampf(im, left, right, y, samples, channels, channel_count)
300
301 =category Drawing
302
303 Reads floating point sample values from C<im> for the horizontal line
304 (left, y) to (right-1,y) for the channels specified by C<channels>, an
305 array of int with channel_count elements.
306
307 If C<channels> is NULL then the first C<channel_count> channels are
308 retrieved for each pixel.
309
310 Returns the number of samples read (which should be (C<right>-C<left>)
311 * C<channel_count>)
312
313 =cut
314 */
315 int
316 (i_gsampf)(i_img *im, int l, int r, int y, i_fsample_t *samp, 
317            const int *chans, int chan_count) {
318   return i_gsampf(im, l, r, y, samp, chans, chan_count);
319 }
320
321 /*
322 =item i_gpal(im, left, right, y, indexes)
323
324 =category Drawing
325
326 Reads palette indexes for the horizontal line (left, y) to (right-1,
327 y) into C<indexes>.
328
329 Returns the number of indexes read.
330
331 Always returns 0 for direct color images.
332
333 =cut
334 */
335 int
336 (i_gpal)(i_img *im, int x, int r, int y, i_palidx *vals) {
337   return i_gpal(im, x, r, y, vals);
338 }
339
340 /*
341 =item i_ppal(im, left, right, y, indexes)
342
343 =category Drawing
344
345 Writes palette indexes for the horizontal line (left, y) to (right-1,
346 y) from C<indexes>.
347
348 Returns the number of indexes written.
349
350 Always returns 0 for direct color images.
351
352 =cut
353 */
354 int
355 (i_ppal)(i_img *im, int x, int r, int y, const i_palidx *vals) {
356   return i_ppal(im, x, r, y, vals);
357 }
358
359 /*
360 =item i_addcolors(im, colors, count)
361
362 =category Paletted images
363
364 Adds colors to the image's palette.
365
366 On success returns the index of the lowest color added.
367
368 On failure returns -1.
369
370 Always fails for direct color images.
371
372 =cut
373 */
374
375 int
376 (i_addcolors)(i_img *im, const i_color *colors, int count) {
377   return i_addcolors(im, colors, count);
378 }
379
380 /*
381 =item i_getcolors(im, index, colors, count)
382
383 =category Paletted images
384
385 Retrieves I<count> colors starting from I<index> in the image's
386 palette.
387
388 On success stores the colors into I<colors> and returns true.
389
390 On failure returns false.
391
392 Always fails for direct color images.
393
394 Fails if there are less than I<index>+I<count> colors in the image's
395 palette.
396
397 =cut
398 */
399
400 int
401 (i_getcolors)(i_img *im, int i, i_color *colors, int count) {
402   return i_getcolors(im, i, colors, count);
403 }
404
405 /*
406 =item i_colorcount(im)
407
408 =category Paletted images
409
410 Returns the number of colors in the image's palette.
411
412 Returns -1 for direct images.
413
414 =cut
415 */
416
417 int
418 (i_colorcount)(i_img *im) {
419   return i_colorcount(im);
420 }
421
422 /*
423 =item i_maxcolors(im)
424
425 =category Paletted images
426
427 Returns the maximum number of colors the palette can hold for the
428 image.
429
430 Returns -1 for direct color images.
431
432 =cut
433 */
434
435 int
436 (i_maxcolors)(i_img *im) {
437   return i_maxcolors(im);
438 }
439
440 /*
441 =item i_findcolor(im, color, &entry)
442
443 =category Paletted images
444
445 Searches the images palette for the given color.
446
447 On success sets *I<entry> to the index of the color, and returns true.
448
449 On failure returns false.
450
451 Always fails on direct color images.
452
453 =cut
454 */
455 int
456 (i_findcolor)(i_img *im, const i_color *color, i_palidx *entry) {
457   return i_findcolor(im, color, entry);
458 }
459
460 /*
461 =item i_setcolors(im, index, colors, count)
462
463 =category Paletted images
464
465 Sets I<count> colors starting from I<index> in the image's palette.
466
467 On success returns true.
468
469 On failure returns false.
470
471 The image must have at least I<index>+I<count> colors in it's palette
472 for this to succeed.
473
474 Always fails on direct color images.
475
476 =cut
477 */
478 int
479 (i_setcolors)(i_img *im, int index, const i_color *colors, int count) {
480   return i_setcolors(im, index, colors, count);
481 }
482