line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
#include "imexttypes.h" |
2
|
|
|
|
|
|
|
#include "imager.h" |
3
|
|
|
|
|
|
|
#include "imio.h" |
4
|
|
|
|
|
|
|
#include "imexif.h" |
5
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
static im_context_t get_context(void); |
7
|
|
|
|
|
|
|
static i_img *mathom_i_img_8_new(i_img_dim, i_img_dim, int); |
8
|
|
|
|
|
|
|
static i_img *mathom_i_img_16_new(i_img_dim, i_img_dim, int); |
9
|
|
|
|
|
|
|
static i_img *mathom_i_img_double_new(i_img_dim, i_img_dim, int); |
10
|
|
|
|
|
|
|
static i_img *mathom_i_img_pal_new(i_img_dim, i_img_dim, int, int); |
11
|
|
|
|
|
|
|
static void mathom_i_clear_error(void); |
12
|
|
|
|
|
|
|
static void mathom_i_push_error(int, const char *); |
13
|
|
|
|
|
|
|
static void mathom_i_push_errorvf(int, const char *, va_list); |
14
|
|
|
|
|
|
|
static int mathom_i_set_image_file_limits(i_img_dim, i_img_dim, size_t); |
15
|
|
|
|
|
|
|
static int mathom_i_get_image_file_limits(i_img_dim*, i_img_dim*, size_t*); |
16
|
|
|
|
|
|
|
static int |
17
|
|
|
|
|
|
|
mathom_i_int_check_image_file_limits(i_img_dim, i_img_dim, int, size_t); |
18
|
|
|
|
|
|
|
static i_img *mathom_i_img_alloc(void); |
19
|
|
|
|
|
|
|
static void mathom_i_img_init(i_img *); |
20
|
|
|
|
|
|
|
static i_io_glue_t *mathom_io_new_fd(int); |
21
|
|
|
|
|
|
|
static i_io_glue_t *mathom_io_new_bufchain(void); |
22
|
|
|
|
|
|
|
static i_io_glue_t * |
23
|
|
|
|
|
|
|
mathom_io_new_buffer(const char *data, size_t, i_io_closebufp_t, void *); |
24
|
|
|
|
|
|
|
static i_io_glue_t * |
25
|
|
|
|
|
|
|
mathom_io_new_cb(void *, i_io_readl_t, i_io_writel_t, i_io_seekl_t, |
26
|
|
|
|
|
|
|
i_io_closel_t, i_io_destroyl_t); |
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
/* |
29
|
|
|
|
|
|
|
DON'T ADD CASTS TO THESE |
30
|
|
|
|
|
|
|
*/ |
31
|
|
|
|
|
|
|
im_ext_funcs imager_function_table = |
32
|
|
|
|
|
|
|
{ |
33
|
|
|
|
|
|
|
IMAGER_API_VERSION, |
34
|
|
|
|
|
|
|
IMAGER_API_LEVEL, |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
mymalloc, |
37
|
|
|
|
|
|
|
myfree, |
38
|
|
|
|
|
|
|
myrealloc, |
39
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
mymalloc_file_line, |
41
|
|
|
|
|
|
|
myfree_file_line, |
42
|
|
|
|
|
|
|
myrealloc_file_line, |
43
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
mathom_i_img_8_new, |
45
|
|
|
|
|
|
|
mathom_i_img_16_new, |
46
|
|
|
|
|
|
|
mathom_i_img_double_new, |
47
|
|
|
|
|
|
|
mathom_i_img_pal_new, |
48
|
|
|
|
|
|
|
i_img_destroy, |
49
|
|
|
|
|
|
|
i_sametype, |
50
|
|
|
|
|
|
|
i_sametype_chans, |
51
|
|
|
|
|
|
|
i_img_info, |
52
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
i_ppix, |
54
|
|
|
|
|
|
|
i_gpix, |
55
|
|
|
|
|
|
|
i_ppixf, |
56
|
|
|
|
|
|
|
i_gpixf, |
57
|
|
|
|
|
|
|
i_plin, |
58
|
|
|
|
|
|
|
i_glin, |
59
|
|
|
|
|
|
|
i_plinf, |
60
|
|
|
|
|
|
|
i_glinf, |
61
|
|
|
|
|
|
|
i_gsamp, |
62
|
|
|
|
|
|
|
i_gsampf, |
63
|
|
|
|
|
|
|
i_gpal, |
64
|
|
|
|
|
|
|
i_ppal, |
65
|
|
|
|
|
|
|
i_addcolors, |
66
|
|
|
|
|
|
|
i_getcolors, |
67
|
|
|
|
|
|
|
i_colorcount, |
68
|
|
|
|
|
|
|
i_maxcolors, |
69
|
|
|
|
|
|
|
i_findcolor, |
70
|
|
|
|
|
|
|
i_setcolors, |
71
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
i_new_fill_solid, |
73
|
|
|
|
|
|
|
i_new_fill_solidf, |
74
|
|
|
|
|
|
|
i_new_fill_hatch, |
75
|
|
|
|
|
|
|
i_new_fill_hatchf, |
76
|
|
|
|
|
|
|
i_new_fill_image, |
77
|
|
|
|
|
|
|
i_new_fill_fount, |
78
|
|
|
|
|
|
|
i_fill_destroy, |
79
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
i_quant_makemap, |
81
|
|
|
|
|
|
|
i_quant_translate, |
82
|
|
|
|
|
|
|
i_quant_transparent, |
83
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
mathom_i_clear_error, |
85
|
|
|
|
|
|
|
mathom_i_push_error, |
86
|
|
|
|
|
|
|
i_push_errorf, |
87
|
|
|
|
|
|
|
mathom_i_push_errorvf, |
88
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
i_tags_new, |
90
|
|
|
|
|
|
|
i_tags_set, |
91
|
|
|
|
|
|
|
i_tags_setn, |
92
|
|
|
|
|
|
|
i_tags_destroy, |
93
|
|
|
|
|
|
|
i_tags_find, |
94
|
|
|
|
|
|
|
i_tags_findn, |
95
|
|
|
|
|
|
|
i_tags_delete, |
96
|
|
|
|
|
|
|
i_tags_delbyname, |
97
|
|
|
|
|
|
|
i_tags_delbycode, |
98
|
|
|
|
|
|
|
i_tags_get_float, |
99
|
|
|
|
|
|
|
i_tags_set_float, |
100
|
|
|
|
|
|
|
i_tags_set_float2, |
101
|
|
|
|
|
|
|
i_tags_get_int, |
102
|
|
|
|
|
|
|
i_tags_get_string, |
103
|
|
|
|
|
|
|
i_tags_get_color, |
104
|
|
|
|
|
|
|
i_tags_set_color, |
105
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
i_box, |
107
|
|
|
|
|
|
|
i_box_filled, |
108
|
|
|
|
|
|
|
i_box_cfill, |
109
|
|
|
|
|
|
|
i_line, |
110
|
|
|
|
|
|
|
i_line_aa, |
111
|
|
|
|
|
|
|
i_arc, |
112
|
|
|
|
|
|
|
i_arc_aa, |
113
|
|
|
|
|
|
|
i_arc_cfill, |
114
|
|
|
|
|
|
|
i_arc_aa_cfill, |
115
|
|
|
|
|
|
|
i_circle_aa, |
116
|
|
|
|
|
|
|
i_flood_fill, |
117
|
|
|
|
|
|
|
i_flood_cfill, |
118
|
|
|
|
|
|
|
|
119
|
|
|
|
|
|
|
i_copyto, |
120
|
|
|
|
|
|
|
i_copyto_trans, |
121
|
|
|
|
|
|
|
i_copy, |
122
|
|
|
|
|
|
|
i_rubthru, |
123
|
|
|
|
|
|
|
|
124
|
|
|
|
|
|
|
/* IMAGER_API_LEVEL 2 functions */ |
125
|
|
|
|
|
|
|
mathom_i_set_image_file_limits, |
126
|
|
|
|
|
|
|
mathom_i_get_image_file_limits, |
127
|
|
|
|
|
|
|
mathom_i_int_check_image_file_limits, |
128
|
|
|
|
|
|
|
|
129
|
|
|
|
|
|
|
i_flood_fill_border, |
130
|
|
|
|
|
|
|
i_flood_cfill_border, |
131
|
|
|
|
|
|
|
|
132
|
|
|
|
|
|
|
/* IMAGER_API_LEVEL 3 functions */ |
133
|
|
|
|
|
|
|
i_img_setmask, |
134
|
|
|
|
|
|
|
i_img_getmask, |
135
|
|
|
|
|
|
|
i_img_getchannels, |
136
|
|
|
|
|
|
|
i_img_get_width, |
137
|
|
|
|
|
|
|
i_img_get_height, |
138
|
|
|
|
|
|
|
i_lhead, |
139
|
|
|
|
|
|
|
i_loog, |
140
|
|
|
|
|
|
|
|
141
|
|
|
|
|
|
|
/* IMAGER_API_LEVEL 4 functions */ |
142
|
|
|
|
|
|
|
mathom_i_img_alloc, |
143
|
|
|
|
|
|
|
mathom_i_img_init, |
144
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
/* IMAGER_API_LEVEL 5 functions */ |
146
|
|
|
|
|
|
|
i_img_is_monochrome, |
147
|
|
|
|
|
|
|
i_gsamp_bg, |
148
|
|
|
|
|
|
|
i_gsampf_bg, |
149
|
|
|
|
|
|
|
i_get_file_background, |
150
|
|
|
|
|
|
|
i_get_file_backgroundf, |
151
|
|
|
|
|
|
|
i_utf8_advance, |
152
|
|
|
|
|
|
|
i_render_new, |
153
|
|
|
|
|
|
|
i_render_delete, |
154
|
|
|
|
|
|
|
i_render_color, |
155
|
|
|
|
|
|
|
i_render_fill, |
156
|
|
|
|
|
|
|
i_render_line, |
157
|
|
|
|
|
|
|
i_render_linef, |
158
|
|
|
|
|
|
|
|
159
|
|
|
|
|
|
|
/* level 6 */ |
160
|
|
|
|
|
|
|
i_io_getc_imp, |
161
|
|
|
|
|
|
|
i_io_peekc_imp, |
162
|
|
|
|
|
|
|
i_io_peekn, |
163
|
|
|
|
|
|
|
i_io_putc_imp, |
164
|
|
|
|
|
|
|
i_io_read, |
165
|
|
|
|
|
|
|
i_io_write, |
166
|
|
|
|
|
|
|
i_io_seek, |
167
|
|
|
|
|
|
|
i_io_flush, |
168
|
|
|
|
|
|
|
i_io_close, |
169
|
|
|
|
|
|
|
i_io_set_buffered, |
170
|
|
|
|
|
|
|
i_io_gets, |
171
|
|
|
|
|
|
|
mathom_io_new_fd, |
172
|
|
|
|
|
|
|
mathom_io_new_bufchain, |
173
|
|
|
|
|
|
|
mathom_io_new_buffer, |
174
|
|
|
|
|
|
|
mathom_io_new_cb, |
175
|
|
|
|
|
|
|
io_slurp, |
176
|
|
|
|
|
|
|
io_glue_destroy, |
177
|
|
|
|
|
|
|
|
178
|
|
|
|
|
|
|
/* level 8 */ |
179
|
|
|
|
|
|
|
im_img_8_new, |
180
|
|
|
|
|
|
|
im_img_16_new, |
181
|
|
|
|
|
|
|
im_img_double_new, |
182
|
|
|
|
|
|
|
im_img_pal_new, |
183
|
|
|
|
|
|
|
im_clear_error, |
184
|
|
|
|
|
|
|
im_push_error, |
185
|
|
|
|
|
|
|
im_push_errorvf, |
186
|
|
|
|
|
|
|
im_push_errorf, |
187
|
|
|
|
|
|
|
im_set_image_file_limits, |
188
|
|
|
|
|
|
|
im_get_image_file_limits, |
189
|
|
|
|
|
|
|
im_int_check_image_file_limits, |
190
|
|
|
|
|
|
|
im_img_alloc, |
191
|
|
|
|
|
|
|
im_img_init, |
192
|
|
|
|
|
|
|
im_io_new_fd, |
193
|
|
|
|
|
|
|
im_io_new_bufchain, |
194
|
|
|
|
|
|
|
im_io_new_buffer, |
195
|
|
|
|
|
|
|
im_io_new_cb, |
196
|
|
|
|
|
|
|
get_context, |
197
|
|
|
|
|
|
|
im_lhead, |
198
|
|
|
|
|
|
|
im_loog, |
199
|
|
|
|
|
|
|
im_context_refinc, |
200
|
|
|
|
|
|
|
im_context_refdec, |
201
|
|
|
|
|
|
|
im_errors, |
202
|
|
|
|
|
|
|
i_mutex_new, |
203
|
|
|
|
|
|
|
i_mutex_destroy, |
204
|
|
|
|
|
|
|
i_mutex_lock, |
205
|
|
|
|
|
|
|
i_mutex_unlock, |
206
|
|
|
|
|
|
|
im_context_slot_new, |
207
|
|
|
|
|
|
|
im_context_slot_set, |
208
|
|
|
|
|
|
|
im_context_slot_get, |
209
|
|
|
|
|
|
|
|
210
|
|
|
|
|
|
|
/* level 9 */ |
211
|
|
|
|
|
|
|
i_poly_poly_aa, |
212
|
|
|
|
|
|
|
i_poly_poly_aa_cfill, |
213
|
|
|
|
|
|
|
i_poly_aa_m, |
214
|
|
|
|
|
|
|
i_poly_aa_cfill_m, |
215
|
|
|
|
|
|
|
|
216
|
|
|
|
|
|
|
i_img_alpha_channel, |
217
|
|
|
|
|
|
|
i_img_color_model, |
218
|
|
|
|
|
|
|
i_img_color_channels, |
219
|
|
|
|
|
|
|
|
220
|
|
|
|
|
|
|
/* level 10 */ |
221
|
|
|
|
|
|
|
im_decode_exif |
222
|
|
|
|
|
|
|
|
223
|
|
|
|
|
|
|
/* level 11 */ |
224
|
|
|
|
|
|
|
}; |
225
|
|
|
|
|
|
|
|
226
|
|
|
|
|
|
|
/* in general these functions aren't called by Imager internally, but |
227
|
|
|
|
|
|
|
only via the pointers above, since faster macros that call the |
228
|
|
|
|
|
|
|
image vtable pointers are used. |
229
|
|
|
|
|
|
|
|
230
|
|
|
|
|
|
|
() are used around the function names to prevent macro replacement |
231
|
|
|
|
|
|
|
on the function names. |
232
|
|
|
|
|
|
|
*/ |
233
|
|
|
|
|
|
|
|
234
|
|
|
|
|
|
|
/* |
235
|
|
|
|
|
|
|
=item i_ppix(im, x, y, color) |
236
|
|
|
|
|
|
|
|
237
|
|
|
|
|
|
|
=category Drawing |
238
|
|
|
|
|
|
|
|
239
|
|
|
|
|
|
|
Sets the pixel at (x,y) to I. |
240
|
|
|
|
|
|
|
|
241
|
|
|
|
|
|
|
Returns 0 if the pixel was drawn, or -1 if not. |
242
|
|
|
|
|
|
|
|
243
|
|
|
|
|
|
|
Does no alpha blending, just copies the channels from the supplied |
244
|
|
|
|
|
|
|
color to the image. |
245
|
|
|
|
|
|
|
|
246
|
|
|
|
|
|
|
=cut |
247
|
|
|
|
|
|
|
*/ |
248
|
|
|
|
|
|
|
|
249
|
|
|
|
|
|
|
int |
250
|
0
|
|
|
|
|
|
(i_ppix)(i_img *im, i_img_dim x, i_img_dim y, const i_color *val) { |
251
|
0
|
|
|
|
|
|
return i_ppix(im, x, y, val); |
252
|
|
|
|
|
|
|
} |
253
|
|
|
|
|
|
|
|
254
|
|
|
|
|
|
|
/* |
255
|
|
|
|
|
|
|
=item i_gpix(im, C, C, C) |
256
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
=category Drawing |
258
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
Retrieves the C of the pixel (x,y). |
260
|
|
|
|
|
|
|
|
261
|
|
|
|
|
|
|
Returns 0 if the pixel was retrieved, or -1 if not. |
262
|
|
|
|
|
|
|
|
263
|
|
|
|
|
|
|
=cut |
264
|
|
|
|
|
|
|
*/ |
265
|
|
|
|
|
|
|
|
266
|
|
|
|
|
|
|
int |
267
|
0
|
|
|
|
|
|
(i_gpix)(i_img *im,i_img_dim x,i_img_dim y,i_color *val) { |
268
|
0
|
|
|
|
|
|
return i_gpix(im, x, y, val); |
269
|
|
|
|
|
|
|
} |
270
|
|
|
|
|
|
|
|
271
|
|
|
|
|
|
|
/* |
272
|
|
|
|
|
|
|
=item i_ppixf(im, C, C, C) |
273
|
|
|
|
|
|
|
|
274
|
|
|
|
|
|
|
=category Drawing |
275
|
|
|
|
|
|
|
|
276
|
|
|
|
|
|
|
Sets the pixel at (C,C) to the floating point color C. |
277
|
|
|
|
|
|
|
|
278
|
|
|
|
|
|
|
Returns 0 if the pixel was drawn, or -1 if not. |
279
|
|
|
|
|
|
|
|
280
|
|
|
|
|
|
|
Does no alpha blending, just copies the channels from the supplied |
281
|
|
|
|
|
|
|
color to the image. |
282
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
=cut |
284
|
|
|
|
|
|
|
*/ |
285
|
|
|
|
|
|
|
int |
286
|
0
|
|
|
|
|
|
(i_ppixf)(i_img *im, i_img_dim x, i_img_dim y, const i_fcolor *val) { |
287
|
0
|
|
|
|
|
|
return i_ppixf(im, x, y, val); |
288
|
|
|
|
|
|
|
} |
289
|
|
|
|
|
|
|
|
290
|
|
|
|
|
|
|
/* |
291
|
|
|
|
|
|
|
=item i_gpixf(im, C, C, C) |
292
|
|
|
|
|
|
|
|
293
|
|
|
|
|
|
|
=category Drawing |
294
|
|
|
|
|
|
|
|
295
|
|
|
|
|
|
|
Retrieves the color of the pixel (x,y) as a floating point color into |
296
|
|
|
|
|
|
|
C. |
297
|
|
|
|
|
|
|
|
298
|
|
|
|
|
|
|
Returns 0 if the pixel was retrieved, or -1 if not. |
299
|
|
|
|
|
|
|
|
300
|
|
|
|
|
|
|
=cut |
301
|
|
|
|
|
|
|
*/ |
302
|
|
|
|
|
|
|
|
303
|
|
|
|
|
|
|
int |
304
|
0
|
|
|
|
|
|
(i_gpixf)(i_img *im,i_img_dim x,i_img_dim y,i_fcolor *val) { |
305
|
0
|
|
|
|
|
|
return i_gpixf(im, x, y, val); |
306
|
|
|
|
|
|
|
} |
307
|
|
|
|
|
|
|
|
308
|
|
|
|
|
|
|
/* |
309
|
|
|
|
|
|
|
=item i_plin(im, l, r, y, colors) |
310
|
|
|
|
|
|
|
|
311
|
|
|
|
|
|
|
=category Drawing |
312
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
Sets (r-l) pixels starting from (l,y) using (r-l) values from |
314
|
|
|
|
|
|
|
I. |
315
|
|
|
|
|
|
|
|
316
|
|
|
|
|
|
|
Returns the number of pixels set. |
317
|
|
|
|
|
|
|
|
318
|
|
|
|
|
|
|
=cut |
319
|
|
|
|
|
|
|
*/ |
320
|
|
|
|
|
|
|
|
321
|
|
|
|
|
|
|
i_img_dim |
322
|
0
|
|
|
|
|
|
(i_plin)(i_img *im, i_img_dim l, i_img_dim r, i_img_dim y, const i_color *vals) { |
323
|
0
|
|
|
|
|
|
return i_plin(im, l, r, y, vals); |
324
|
|
|
|
|
|
|
} |
325
|
|
|
|
|
|
|
|
326
|
|
|
|
|
|
|
/* |
327
|
|
|
|
|
|
|
=item i_glin(im, l, r, y, colors) |
328
|
|
|
|
|
|
|
|
329
|
|
|
|
|
|
|
=category Drawing |
330
|
|
|
|
|
|
|
|
331
|
|
|
|
|
|
|
Retrieves (r-l) pixels starting from (l,y) into I. |
332
|
|
|
|
|
|
|
|
333
|
|
|
|
|
|
|
Returns the number of pixels retrieved. |
334
|
|
|
|
|
|
|
|
335
|
|
|
|
|
|
|
=cut |
336
|
|
|
|
|
|
|
*/ |
337
|
|
|
|
|
|
|
|
338
|
|
|
|
|
|
|
i_img_dim |
339
|
0
|
|
|
|
|
|
(i_glin)(i_img *im, i_img_dim l, i_img_dim r, i_img_dim y, i_color *vals) { |
340
|
0
|
|
|
|
|
|
return i_glin(im, l, r, y, vals); |
341
|
|
|
|
|
|
|
} |
342
|
|
|
|
|
|
|
|
343
|
|
|
|
|
|
|
/* |
344
|
|
|
|
|
|
|
=item i_plinf(im, C, C, C) |
345
|
|
|
|
|
|
|
|
346
|
|
|
|
|
|
|
=category Drawing |
347
|
|
|
|
|
|
|
|
348
|
|
|
|
|
|
|
Sets (right-left) pixels starting from (left,y) using (right-left) |
349
|
|
|
|
|
|
|
floating point colors from C. |
350
|
|
|
|
|
|
|
|
351
|
|
|
|
|
|
|
Returns the number of pixels set. |
352
|
|
|
|
|
|
|
|
353
|
|
|
|
|
|
|
=cut |
354
|
|
|
|
|
|
|
*/ |
355
|
|
|
|
|
|
|
|
356
|
|
|
|
|
|
|
i_img_dim |
357
|
0
|
|
|
|
|
|
(i_plinf)(i_img *im, i_img_dim l, i_img_dim r, i_img_dim y, const i_fcolor *vals) { |
358
|
0
|
|
|
|
|
|
return i_plinf(im, l, r, y, vals); |
359
|
|
|
|
|
|
|
} |
360
|
|
|
|
|
|
|
|
361
|
|
|
|
|
|
|
/* |
362
|
|
|
|
|
|
|
=item i_glinf(im, l, r, y, colors) |
363
|
|
|
|
|
|
|
|
364
|
|
|
|
|
|
|
=category Drawing |
365
|
|
|
|
|
|
|
|
366
|
|
|
|
|
|
|
Retrieves (r-l) pixels starting from (l,y) into I as floating |
367
|
|
|
|
|
|
|
point colors. |
368
|
|
|
|
|
|
|
|
369
|
|
|
|
|
|
|
Returns the number of pixels retrieved. |
370
|
|
|
|
|
|
|
|
371
|
|
|
|
|
|
|
=cut |
372
|
|
|
|
|
|
|
*/ |
373
|
|
|
|
|
|
|
|
374
|
|
|
|
|
|
|
i_img_dim |
375
|
0
|
|
|
|
|
|
(i_glinf)(i_img *im, i_img_dim l, i_img_dim r, i_img_dim y, i_fcolor *vals) { |
376
|
0
|
|
|
|
|
|
return i_glinf(im, l, r, y, vals); |
377
|
|
|
|
|
|
|
} |
378
|
|
|
|
|
|
|
|
379
|
|
|
|
|
|
|
/* |
380
|
|
|
|
|
|
|
=item i_gsamp(im, left, right, y, samples, channels, channel_count) |
381
|
|
|
|
|
|
|
|
382
|
|
|
|
|
|
|
=category Drawing |
383
|
|
|
|
|
|
|
|
384
|
|
|
|
|
|
|
Reads sample values from C for the horizontal line (left, y) to |
385
|
|
|
|
|
|
|
(right-1,y) for the channels specified by C, an array of int |
386
|
|
|
|
|
|
|
with C elements. |
387
|
|
|
|
|
|
|
|
388
|
|
|
|
|
|
|
If channels is NULL then the first channels_count channels are retrieved for |
389
|
|
|
|
|
|
|
each pixel. |
390
|
|
|
|
|
|
|
|
391
|
|
|
|
|
|
|
Returns the number of samples read (which should be (right-left) * |
392
|
|
|
|
|
|
|
channel_count) |
393
|
|
|
|
|
|
|
|
394
|
|
|
|
|
|
|
=cut |
395
|
|
|
|
|
|
|
*/ |
396
|
|
|
|
|
|
|
i_img_dim |
397
|
0
|
|
|
|
|
|
(i_gsamp)(i_img *im, i_img_dim l, i_img_dim r, i_img_dim y, i_sample_t *samp, |
398
|
|
|
|
|
|
|
const int *chans, int chan_count) { |
399
|
0
|
|
|
|
|
|
return i_gsamp(im, l, r, y, samp, chans, chan_count); |
400
|
|
|
|
|
|
|
} |
401
|
|
|
|
|
|
|
|
402
|
|
|
|
|
|
|
/* |
403
|
|
|
|
|
|
|
=item i_gsampf(im, left, right, y, samples, channels, channel_count) |
404
|
|
|
|
|
|
|
|
405
|
|
|
|
|
|
|
=category Drawing |
406
|
|
|
|
|
|
|
|
407
|
|
|
|
|
|
|
Reads floating point sample values from C for the horizontal line |
408
|
|
|
|
|
|
|
(left, y) to (right-1,y) for the channels specified by C, an |
409
|
|
|
|
|
|
|
array of int with channel_count elements. |
410
|
|
|
|
|
|
|
|
411
|
|
|
|
|
|
|
If C is NULL then the first C channels are |
412
|
|
|
|
|
|
|
retrieved for each pixel. |
413
|
|
|
|
|
|
|
|
414
|
|
|
|
|
|
|
Returns the number of samples read (which should be (C-C) |
415
|
|
|
|
|
|
|
* C) |
416
|
|
|
|
|
|
|
|
417
|
|
|
|
|
|
|
=cut |
418
|
|
|
|
|
|
|
*/ |
419
|
|
|
|
|
|
|
i_img_dim |
420
|
0
|
|
|
|
|
|
(i_gsampf)(i_img *im, i_img_dim l, i_img_dim r, i_img_dim y, i_fsample_t *samp, |
421
|
|
|
|
|
|
|
const int *chans, int chan_count) { |
422
|
0
|
|
|
|
|
|
return i_gsampf(im, l, r, y, samp, chans, chan_count); |
423
|
|
|
|
|
|
|
} |
424
|
|
|
|
|
|
|
|
425
|
|
|
|
|
|
|
/* |
426
|
|
|
|
|
|
|
=item i_gsamp_bits(im, left, right, y, samples, channels, channel_count, bits) |
427
|
|
|
|
|
|
|
=category Drawing |
428
|
|
|
|
|
|
|
|
429
|
|
|
|
|
|
|
Reads integer samples scaled to C bits of precision into the |
430
|
|
|
|
|
|
|
C array C. |
431
|
|
|
|
|
|
|
|
432
|
|
|
|
|
|
|
Expect this to be slow unless C<< bits == im->bits >>. |
433
|
|
|
|
|
|
|
|
434
|
|
|
|
|
|
|
Returns the number of samples copied, or -1 on error. |
435
|
|
|
|
|
|
|
|
436
|
|
|
|
|
|
|
Not all image types implement this method. |
437
|
|
|
|
|
|
|
|
438
|
|
|
|
|
|
|
Pushes errors, but does not call C. |
439
|
|
|
|
|
|
|
|
440
|
|
|
|
|
|
|
=cut |
441
|
|
|
|
|
|
|
*/ |
442
|
|
|
|
|
|
|
|
443
|
|
|
|
|
|
|
/* |
444
|
|
|
|
|
|
|
=item i_psamp_bits(im, left, right, y, samples, channels, channel_count, bits) |
445
|
|
|
|
|
|
|
=category Drawing |
446
|
|
|
|
|
|
|
|
447
|
|
|
|
|
|
|
Writes integer samples scaled to C bits of precision from the |
448
|
|
|
|
|
|
|
C array C. |
449
|
|
|
|
|
|
|
|
450
|
|
|
|
|
|
|
Expect this to be slow unless C<< bits == im->bits >>. |
451
|
|
|
|
|
|
|
|
452
|
|
|
|
|
|
|
Returns the number of samples copied, or -1 on error. |
453
|
|
|
|
|
|
|
|
454
|
|
|
|
|
|
|
Not all image types implement this method. |
455
|
|
|
|
|
|
|
|
456
|
|
|
|
|
|
|
Pushes errors, but does not call C. |
457
|
|
|
|
|
|
|
|
458
|
|
|
|
|
|
|
=cut |
459
|
|
|
|
|
|
|
*/ |
460
|
|
|
|
|
|
|
|
461
|
|
|
|
|
|
|
/* |
462
|
|
|
|
|
|
|
=item i_gpal(im, left, right, y, indexes) |
463
|
|
|
|
|
|
|
|
464
|
|
|
|
|
|
|
=category Drawing |
465
|
|
|
|
|
|
|
|
466
|
|
|
|
|
|
|
Reads palette indexes for the horizontal line (left, y) to (right-1, |
467
|
|
|
|
|
|
|
y) into C. |
468
|
|
|
|
|
|
|
|
469
|
|
|
|
|
|
|
Returns the number of indexes read. |
470
|
|
|
|
|
|
|
|
471
|
|
|
|
|
|
|
Always returns 0 for direct color images. |
472
|
|
|
|
|
|
|
|
473
|
|
|
|
|
|
|
=cut |
474
|
|
|
|
|
|
|
*/ |
475
|
|
|
|
|
|
|
i_img_dim |
476
|
0
|
|
|
|
|
|
(i_gpal)(i_img *im, i_img_dim x, i_img_dim r, i_img_dim y, i_palidx *vals) { |
477
|
0
|
0
|
|
|
|
|
return i_gpal(im, x, r, y, vals); |
478
|
|
|
|
|
|
|
} |
479
|
|
|
|
|
|
|
|
480
|
|
|
|
|
|
|
/* |
481
|
|
|
|
|
|
|
=item i_ppal(im, left, right, y, indexes) |
482
|
|
|
|
|
|
|
|
483
|
|
|
|
|
|
|
=category Drawing |
484
|
|
|
|
|
|
|
|
485
|
|
|
|
|
|
|
Writes palette indexes for the horizontal line (left, y) to (right-1, |
486
|
|
|
|
|
|
|
y) from C. |
487
|
|
|
|
|
|
|
|
488
|
|
|
|
|
|
|
Returns the number of indexes written. |
489
|
|
|
|
|
|
|
|
490
|
|
|
|
|
|
|
Always returns 0 for direct color images. |
491
|
|
|
|
|
|
|
|
492
|
|
|
|
|
|
|
=cut |
493
|
|
|
|
|
|
|
*/ |
494
|
|
|
|
|
|
|
i_img_dim |
495
|
0
|
|
|
|
|
|
(i_ppal)(i_img *im, i_img_dim x, i_img_dim r, i_img_dim y, const i_palidx *vals) { |
496
|
0
|
0
|
|
|
|
|
return i_ppal(im, x, r, y, vals); |
497
|
|
|
|
|
|
|
} |
498
|
|
|
|
|
|
|
|
499
|
|
|
|
|
|
|
/* |
500
|
|
|
|
|
|
|
=item i_addcolors(im, colors, count) |
501
|
|
|
|
|
|
|
|
502
|
|
|
|
|
|
|
=category Paletted images |
503
|
|
|
|
|
|
|
|
504
|
|
|
|
|
|
|
Adds colors to the image's palette. |
505
|
|
|
|
|
|
|
|
506
|
|
|
|
|
|
|
On success returns the index of the lowest color added. |
507
|
|
|
|
|
|
|
|
508
|
|
|
|
|
|
|
On failure returns -1. |
509
|
|
|
|
|
|
|
|
510
|
|
|
|
|
|
|
Always fails for direct color images. |
511
|
|
|
|
|
|
|
|
512
|
|
|
|
|
|
|
=cut |
513
|
|
|
|
|
|
|
*/ |
514
|
|
|
|
|
|
|
|
515
|
|
|
|
|
|
|
int |
516
|
0
|
|
|
|
|
|
(i_addcolors)(i_img *im, const i_color *colors, int count) { |
517
|
0
|
0
|
|
|
|
|
return i_addcolors(im, colors, count); |
518
|
|
|
|
|
|
|
} |
519
|
|
|
|
|
|
|
|
520
|
|
|
|
|
|
|
/* |
521
|
|
|
|
|
|
|
=item i_getcolors(im, index, colors, count) |
522
|
|
|
|
|
|
|
|
523
|
|
|
|
|
|
|
=category Paletted images |
524
|
|
|
|
|
|
|
|
525
|
|
|
|
|
|
|
Retrieves I colors starting from I in the image's |
526
|
|
|
|
|
|
|
palette. |
527
|
|
|
|
|
|
|
|
528
|
|
|
|
|
|
|
On success stores the colors into I and returns true. |
529
|
|
|
|
|
|
|
|
530
|
|
|
|
|
|
|
On failure returns false. |
531
|
|
|
|
|
|
|
|
532
|
|
|
|
|
|
|
Always fails for direct color images. |
533
|
|
|
|
|
|
|
|
534
|
|
|
|
|
|
|
Fails if there are less than I+I colors in the image's |
535
|
|
|
|
|
|
|
palette. |
536
|
|
|
|
|
|
|
|
537
|
|
|
|
|
|
|
=cut |
538
|
|
|
|
|
|
|
*/ |
539
|
|
|
|
|
|
|
|
540
|
|
|
|
|
|
|
int |
541
|
0
|
|
|
|
|
|
(i_getcolors)(i_img *im, int i, i_color *colors, int count) { |
542
|
0
|
0
|
|
|
|
|
return i_getcolors(im, i, colors, count); |
543
|
|
|
|
|
|
|
} |
544
|
|
|
|
|
|
|
|
545
|
|
|
|
|
|
|
/* |
546
|
|
|
|
|
|
|
=item i_colorcount(im) |
547
|
|
|
|
|
|
|
|
548
|
|
|
|
|
|
|
=category Paletted images |
549
|
|
|
|
|
|
|
|
550
|
|
|
|
|
|
|
Returns the number of colors in the image's palette. |
551
|
|
|
|
|
|
|
|
552
|
|
|
|
|
|
|
Returns -1 for direct images. |
553
|
|
|
|
|
|
|
|
554
|
|
|
|
|
|
|
=cut |
555
|
|
|
|
|
|
|
*/ |
556
|
|
|
|
|
|
|
|
557
|
|
|
|
|
|
|
int |
558
|
0
|
|
|
|
|
|
(i_colorcount)(i_img *im) { |
559
|
0
|
0
|
|
|
|
|
return i_colorcount(im); |
560
|
|
|
|
|
|
|
} |
561
|
|
|
|
|
|
|
|
562
|
|
|
|
|
|
|
/* |
563
|
|
|
|
|
|
|
=item i_maxcolors(im) |
564
|
|
|
|
|
|
|
|
565
|
|
|
|
|
|
|
=category Paletted images |
566
|
|
|
|
|
|
|
|
567
|
|
|
|
|
|
|
Returns the maximum number of colors the palette can hold for the |
568
|
|
|
|
|
|
|
image. |
569
|
|
|
|
|
|
|
|
570
|
|
|
|
|
|
|
Returns -1 for direct color images. |
571
|
|
|
|
|
|
|
|
572
|
|
|
|
|
|
|
=cut |
573
|
|
|
|
|
|
|
*/ |
574
|
|
|
|
|
|
|
|
575
|
|
|
|
|
|
|
int |
576
|
0
|
|
|
|
|
|
(i_maxcolors)(i_img *im) { |
577
|
0
|
0
|
|
|
|
|
return i_maxcolors(im); |
578
|
|
|
|
|
|
|
} |
579
|
|
|
|
|
|
|
|
580
|
|
|
|
|
|
|
/* |
581
|
|
|
|
|
|
|
=item i_findcolor(im, color, &entry) |
582
|
|
|
|
|
|
|
|
583
|
|
|
|
|
|
|
=category Paletted images |
584
|
|
|
|
|
|
|
|
585
|
|
|
|
|
|
|
Searches the images palette for the given color. |
586
|
|
|
|
|
|
|
|
587
|
|
|
|
|
|
|
On success sets *I to the index of the color, and returns true. |
588
|
|
|
|
|
|
|
|
589
|
|
|
|
|
|
|
On failure returns false. |
590
|
|
|
|
|
|
|
|
591
|
|
|
|
|
|
|
Always fails on direct color images. |
592
|
|
|
|
|
|
|
|
593
|
|
|
|
|
|
|
=cut |
594
|
|
|
|
|
|
|
*/ |
595
|
|
|
|
|
|
|
int |
596
|
0
|
|
|
|
|
|
(i_findcolor)(i_img *im, const i_color *color, i_palidx *entry) { |
597
|
0
|
0
|
|
|
|
|
return i_findcolor(im, color, entry); |
598
|
|
|
|
|
|
|
} |
599
|
|
|
|
|
|
|
|
600
|
|
|
|
|
|
|
/* |
601
|
|
|
|
|
|
|
=item i_setcolors(im, index, colors, count) |
602
|
|
|
|
|
|
|
|
603
|
|
|
|
|
|
|
=category Paletted images |
604
|
|
|
|
|
|
|
|
605
|
|
|
|
|
|
|
Sets I colors starting from I in the image's palette. |
606
|
|
|
|
|
|
|
|
607
|
|
|
|
|
|
|
On success returns true. |
608
|
|
|
|
|
|
|
|
609
|
|
|
|
|
|
|
On failure returns false. |
610
|
|
|
|
|
|
|
|
611
|
|
|
|
|
|
|
The image must have at least I+I colors in it's palette |
612
|
|
|
|
|
|
|
for this to succeed. |
613
|
|
|
|
|
|
|
|
614
|
|
|
|
|
|
|
Always fails on direct color images. |
615
|
|
|
|
|
|
|
|
616
|
|
|
|
|
|
|
=cut |
617
|
|
|
|
|
|
|
*/ |
618
|
|
|
|
|
|
|
int |
619
|
0
|
|
|
|
|
|
(i_setcolors)(i_img *im, int index, const i_color *colors, int count) { |
620
|
0
|
0
|
|
|
|
|
return i_setcolors(im, index, colors, count); |
621
|
|
|
|
|
|
|
} |
622
|
|
|
|
|
|
|
|
623
|
|
|
|
|
|
|
/* |
624
|
|
|
|
|
|
|
=item im_get_context() |
625
|
|
|
|
|
|
|
|
626
|
|
|
|
|
|
|
Retrieve the context object for the current thread. |
627
|
|
|
|
|
|
|
|
628
|
|
|
|
|
|
|
Inside Imager itself this is just a function pointer, which the |
629
|
|
|
|
|
|
|
F BOOT handler initializes for use within perl. If you're |
630
|
|
|
|
|
|
|
taking the Imager code and embedding it elsewhere you need to |
631
|
|
|
|
|
|
|
initialize the C pointer at some point. |
632
|
|
|
|
|
|
|
|
633
|
|
|
|
|
|
|
=cut |
634
|
|
|
|
|
|
|
*/ |
635
|
|
|
|
|
|
|
|
636
|
|
|
|
|
|
|
static im_context_t |
637
|
441
|
|
|
|
|
|
get_context(void) { |
638
|
441
|
|
|
|
|
|
return im_get_context(); |
639
|
|
|
|
|
|
|
} |
640
|
|
|
|
|
|
|
|
641
|
|
|
|
|
|
|
static i_img * |
642
|
0
|
|
|
|
|
|
mathom_i_img_8_new(i_img_dim xsize, i_img_dim ysize, int channels) { |
643
|
0
|
|
|
|
|
|
return i_img_8_new(xsize, ysize, channels); |
644
|
|
|
|
|
|
|
} |
645
|
|
|
|
|
|
|
|
646
|
|
|
|
|
|
|
static i_img * |
647
|
0
|
|
|
|
|
|
mathom_i_img_16_new(i_img_dim xsize, i_img_dim ysize, int channels) { |
648
|
0
|
|
|
|
|
|
return i_img_16_new(xsize, ysize, channels); |
649
|
|
|
|
|
|
|
} |
650
|
|
|
|
|
|
|
|
651
|
|
|
|
|
|
|
static i_img * |
652
|
0
|
|
|
|
|
|
mathom_i_img_double_new(i_img_dim xsize, i_img_dim ysize, int channels) { |
653
|
0
|
|
|
|
|
|
return i_img_double_new(xsize, ysize, channels); |
654
|
|
|
|
|
|
|
} |
655
|
|
|
|
|
|
|
|
656
|
|
|
|
|
|
|
static i_img * |
657
|
0
|
|
|
|
|
|
mathom_i_img_pal_new(i_img_dim xsize, i_img_dim ysize, int channels, |
658
|
|
|
|
|
|
|
int maxpal) { |
659
|
0
|
|
|
|
|
|
return i_img_pal_new(xsize, ysize, channels, maxpal); |
660
|
|
|
|
|
|
|
} |
661
|
|
|
|
|
|
|
|
662
|
|
|
|
|
|
|
static void |
663
|
0
|
|
|
|
|
|
mathom_i_clear_error(void) { |
664
|
0
|
|
|
|
|
|
i_clear_error(); |
665
|
0
|
|
|
|
|
|
} |
666
|
|
|
|
|
|
|
|
667
|
|
|
|
|
|
|
static void |
668
|
0
|
|
|
|
|
|
mathom_i_push_error(int code, const char *msg) { |
669
|
0
|
|
|
|
|
|
i_push_error(code, msg); |
670
|
0
|
|
|
|
|
|
} |
671
|
|
|
|
|
|
|
|
672
|
|
|
|
|
|
|
static void |
673
|
0
|
|
|
|
|
|
mathom_i_push_errorvf(int code, const char *fmt, va_list args) { |
674
|
0
|
|
|
|
|
|
i_push_errorvf(code, fmt, args); |
675
|
0
|
|
|
|
|
|
} |
676
|
|
|
|
|
|
|
|
677
|
|
|
|
|
|
|
static int |
678
|
0
|
|
|
|
|
|
mathom_i_set_image_file_limits(i_img_dim max_width, i_img_dim max_height, |
679
|
|
|
|
|
|
|
size_t max_bytes) { |
680
|
0
|
|
|
|
|
|
return i_set_image_file_limits(max_width, max_height, max_bytes); |
681
|
|
|
|
|
|
|
} |
682
|
|
|
|
|
|
|
|
683
|
|
|
|
|
|
|
static int |
684
|
0
|
|
|
|
|
|
mathom_i_get_image_file_limits(i_img_dim *pmax_width, i_img_dim *pmax_height, |
685
|
|
|
|
|
|
|
size_t *pmax_bytes) { |
686
|
0
|
|
|
|
|
|
return i_get_image_file_limits(pmax_width, pmax_height, pmax_bytes); |
687
|
|
|
|
|
|
|
} |
688
|
|
|
|
|
|
|
|
689
|
|
|
|
|
|
|
static int |
690
|
0
|
|
|
|
|
|
mathom_i_int_check_image_file_limits(i_img_dim width, i_img_dim height, |
691
|
|
|
|
|
|
|
int channels, size_t sample_size) { |
692
|
0
|
|
|
|
|
|
return i_int_check_image_file_limits(width, height, channels, sample_size); |
693
|
|
|
|
|
|
|
} |
694
|
|
|
|
|
|
|
|
695
|
|
|
|
|
|
|
static i_img * |
696
|
0
|
|
|
|
|
|
mathom_i_img_alloc(void) { |
697
|
0
|
|
|
|
|
|
return i_img_alloc(); |
698
|
|
|
|
|
|
|
} |
699
|
|
|
|
|
|
|
|
700
|
|
|
|
|
|
|
static void |
701
|
0
|
|
|
|
|
|
mathom_i_img_init(i_img *im) { |
702
|
0
|
|
|
|
|
|
i_img_init(im); |
703
|
0
|
|
|
|
|
|
} |
704
|
|
|
|
|
|
|
|
705
|
|
|
|
|
|
|
static i_io_glue_t * |
706
|
0
|
|
|
|
|
|
mathom_io_new_fd(int fd) { |
707
|
0
|
|
|
|
|
|
return io_new_fd(fd); |
708
|
|
|
|
|
|
|
} |
709
|
|
|
|
|
|
|
static i_io_glue_t * |
710
|
0
|
|
|
|
|
|
mathom_io_new_bufchain(void) { |
711
|
0
|
|
|
|
|
|
return io_new_bufchain(); |
712
|
|
|
|
|
|
|
} |
713
|
|
|
|
|
|
|
|
714
|
|
|
|
|
|
|
static i_io_glue_t * |
715
|
0
|
|
|
|
|
|
mathom_io_new_buffer(const char *data, size_t size, i_io_closebufp_t closefp, |
716
|
|
|
|
|
|
|
void *close_data) { |
717
|
0
|
|
|
|
|
|
return io_new_buffer(data, size, closefp, close_data); |
718
|
|
|
|
|
|
|
} |
719
|
|
|
|
|
|
|
|
720
|
|
|
|
|
|
|
static i_io_glue_t * |
721
|
0
|
|
|
|
|
|
mathom_io_new_cb(void *p, i_io_readl_t readcb, i_io_writel_t writecb, |
722
|
|
|
|
|
|
|
i_io_seekl_t seekcb, i_io_closel_t closecb, |
723
|
|
|
|
|
|
|
i_io_destroyl_t destroycb) { |
724
|
0
|
|
|
|
|
|
return io_new_cb(p, readcb, writecb, seekcb, closecb, destroycb); |
725
|
|
|
|
|
|
|
} |