- extra concept index entries
[imager.git] / imagei.h
CommitLineData
faa9b3e7
TC
1/* Declares utility functions useful across various files which
2 aren't meant to be available externally
3*/
4
5#ifndef IMAGEI_H_
6#define IMAGEI_H_
7
8#include "image.h"
9
10/* wrapper functions that implement the floating point sample version of a
11 function in terms of the 8-bit sample version
12*/
13extern int i_ppixf_fp(i_img *im, int x, int y, i_fcolor *pix);
14extern int i_gpixf_fp(i_img *im, int x, int y, i_fcolor *pix);
15extern int i_plinf_fp(i_img *im, int l, int r, int y, i_fcolor *pix);
16extern int i_glinf_fp(i_img *im, int l, int r, int y, i_fcolor *pix);
17extern int i_gsampf_fp(i_img *im, int l, int r, int y, i_fsample_t *samp,
18accb2a 18 int const *chans, int chan_count);
faa9b3e7
TC
19
20/* wrapper functions that forward palette calls to the underlying image,
21 assuming the underlying image is the first pointer in whatever
22 ext_data points at
23*/
24extern int i_addcolors_forward(i_img *im, i_color *, int count);
25extern int i_getcolors_forward(i_img *im, int i, i_color *, int count);
26extern int i_colorcount_forward(i_img *im);
27extern int i_maxcolors_forward(i_img *im);
28extern int i_findcolor_forward(i_img *im, i_color *color, i_palidx *entry);
29extern int i_setcolors_forward(i_img *im, int index, i_color *colors,
30 int count);
31
32#define SampleFTo16(num) ((int)((num) * 65535.0 + 0.01))
33/* we add that little bit to avoid rounding issues */
34#define Sample16ToF(num) ((num) / 65535.0)
35
36#define SampleFTo8(num) ((int)((num) * 255.0 + 0.01))
37#define Sample8ToF(num) ((num) / 255.0)
38
39#define Sample16To8(num) ((num) / 257)
40#define Sample8To16(num) ((num) * 257)
41
efdc2568
TC
42extern void i_get_combine(int combine, i_fill_combine_f *, i_fill_combinef_f *);
43
77157728
TC
44extern int
45i_int_check_image_file_limits(int width, int height, int channels, int sample_size);
46
a8652edf
TC
47#define im_min(a, b) ((a) < (b) ? (a) : (b))
48#define im_max(a, b) ((a) > (b) ? (a) : (b))
49
b33c08f8
TC
50#include "ext.h"
51
52extern UTIL_table_t i_UTIL_table;
53
ffeb4a67
TC
54/* Ideally this will move into imconfig.h if we ever probe */
55#if defined(_GNU_SOURCE) || __STDC_VERSION__ >= 199901L
56/* snprintf() is part of C99 and provided by Glibc */
57#define HAVE_SNPRINTF
58#endif
59
35f40526
TC
60/* test if all channels are writable */
61#define I_ALL_CHANNELS_WRITABLE(im) (((im)->ch_mask & 0xF) == 0xf)
62
a8652edf
TC
63typedef struct i_int_hline_seg_tag {
64 int minx, x_limit;
65} i_int_hline_seg;
66
67typedef struct i_int_hline_entry_tag {
68 int count;
69 int alloc;
70 i_int_hline_seg segs[1];
71} i_int_hline_entry;
72
73/* represents a set of horizontal line segments to be filled in later */
74typedef struct i_int_hlines_tag {
75 int start_y, limit_y;
76 int start_x, limit_x;
77 i_int_hline_entry **entries;
78} i_int_hlines;
79
80extern void
81i_int_init_hlines(
82 i_int_hlines *hlines,
83 int start_y,
84 int count_y,
85 int start_x,
86 int width_x
87 );
88extern void i_int_init_hlines_img(i_int_hlines *hlines, i_img *img);
89extern void i_int_hlines_add(i_int_hlines *hlines, int y, int minx, int width);
90extern void i_int_hlines_destroy(i_int_hlines *hlines);
91
92extern void i_int_hlines_fill_color(i_img *im, i_int_hlines *hlines, i_color *val);
93extern void i_int_hlines_fill_fill(i_img *im, i_int_hlines *hlines, i_fill_t *fill);
94
faa9b3e7 95#endif