X-Git-Url: http://git.imager.perl.org/imager.git/blobdiff_plain/156699af0d2ede8cdf1a8c4bd7b4867a6e3118dd..4cc5f9138095855baa5b1daff65d07e031827db1:/imdatatypes.h diff --git a/imdatatypes.h b/imdatatypes.h index b56b43f1..8a194908 100644 --- a/imdatatypes.h +++ b/imdatatypes.h @@ -6,8 +6,29 @@ #define MAXCHANNELS 4 +/* +=item im_context_t +=category Data Types + +Imager's per-thread context. + +=cut +*/ + typedef struct im_context_tag *im_context_t; +/* +=item im_slot_t +=category Data Types + +Represents a slot in the context object. + +=cut +*/ + +typedef ptrdiff_t im_slot_t; +typedef void (*im_slot_destroy_t)(void *); + /* used for palette indices in some internal code (which might be exposed at some point */ @@ -39,6 +60,21 @@ May be larger than int on some platforms. typedef ptrdiff_t i_img_dim; +/* +=item i_img_dim_u +=category Data Types +=synopsis i_img_dim_u limit; +=order 90 + +An unsigned variant of L. + +=cut +*/ + +typedef size_t i_img_dim_u; + +#define i_img_dim_MAX ((i_img_dim)(~(i_img_dim_u)0 >> 1)) + /* =item i_color =category Data Types @@ -436,6 +472,59 @@ enum bounding_box_index_t { BOUNDING_BOX_COUNT }; +/* +=item i_polygon_t +=category Data Types + +Represents a polygon. Has the following members: + +=over + +=item * + +C, C - arrays of x and y locations of vertices. + +=item * + +C - the number of entries in the C and C arrays. + +=back + +=cut +*/ + +typedef struct i_polygon_tag { + const double *x; + const double *y; + size_t count; +} i_polygon_t; + +/* +=item i_poly_fill_mode_t +=category Data Types + +Control how polygons are filled. Has the following values: + +=over + +=item * + +C - simple even-odd fills. + +=item * + +C - non-zero winding rule fills. + +=back + +=cut +*/ + +typedef enum i_poly_fill_mode_tag { + i_pfm_evenodd, + i_pfm_nonzero +} i_poly_fill_mode_t; + /* Generic fills */ struct i_fill_tag; @@ -553,6 +642,18 @@ typedef enum { ic_color } i_combine_t; +/* +=item i_mutex_t +X +=category mutex +=synopsis i_mutex_t mutex; + +Opaque type for Imager's mutex API. + +=cut + */ +typedef struct i_mutex_tag *i_mutex_t; + /* describes an axis of a MM font. Modelled on FT2's FT_MM_Axis. @@ -585,6 +686,40 @@ typedef struct TT_Fonthandle_ TT_Fonthandle; #endif +/* +=item i_transp +=category Data Types + +An enumerated type for controlling how transparency is handled during +quantization. + +This has the following possible values: + +=over + +=item * + +C - ignore the alpha channel + +=item * + +C - simple transparency thresholding. + +=item * + +C - use error diffusion to control which pixels are +transparent. + +=item * + +C - use ordered dithering to control which pixels are +transparent. + +=back + +=cut +*/ + /* transparency handling for quantized output */ typedef enum i_transp_tag { tr_none, /* ignore any alpha channel */ @@ -593,7 +728,49 @@ typedef enum i_transp_tag { tr_ordered /* an ordered dither */ } i_transp; -/* controls how we build the colour map */ +/* +=item i_make_colors +=category Data Types + +An enumerated type used to control the method used for produce the +color map: + +=over + +=item * + +C - the user supplied map is used. + +=item * + +C - use the classic web map. Any existing fixed colors +are ignored. + +=item * + +C - use median cut + +=item * + +C - use a fixed black and white map. + +=item * + +C - 256 step gray map. + +=item * + +C - 4 step gray map. + +=item * + +C - 16 step gray map. + +=back + +=cut +*/ + typedef enum i_make_colors_tag { mc_none, /* user supplied colour map only */ mc_web_map, /* Use the 216 colour web colour map */ @@ -606,6 +783,37 @@ typedef enum i_make_colors_tag { mc_mask = 0xFF /* (mask for generator) */ } i_make_colors; +/* +=item i_translate +=category Data Types + +An enumerated type that controls how colors are translated: + +=over + +=item * + +C - obsolete, forces C to use median cut and +acts like C. + +=item * + +C - always use the closest color. + +=item * + +C - add random values to each sample and find the closest +color. + +=item * + +C - error diffusion dither. + +=back + +=cut +*/ + /* controls how we translate the colours */ typedef enum i_translate_tag { pt_giflib, /* get gif lib to do it (ignores make_colours) */ @@ -614,6 +822,41 @@ typedef enum i_translate_tag { pt_errdiff /* error diffusion dither - uses errdiff */ } i_translate; +/* +=item i_errdiff +=category Data Types + +Controls the type of error diffusion to use: + +=over + +=item * + +C - floyd-steinberg + +=item * + +C - Jarvis, Judice and Ninke + +=item * + +C - Stucki + +=item * + +C - not usable for transparency dithering, allows a custom +error diffusion map to be used. + +=item * + +C - or with the error diffusion type to use alternate +directions on each line of the dither. + +=back + +=cut +*/ + /* Which error diffusion map to use */ typedef enum i_errdiff_tag { ed_floyd, /* floyd-steinberg */ @@ -624,8 +867,55 @@ typedef enum i_errdiff_tag { ed_bidir = 0x100 /* change direction for each row */ } i_errdiff; -/* which ordered dither map to use - currently only available for transparency +/* +=item i_ord_dith +=category Data Types + +Which ordered dither map to use, currently only available for +transparency. Values are: + +=over + +=item * + +C - a pre-generated random map. + +=item * + +C - large dot dither. + +=item * + +C - smaller dot dither + +=item * + +C - horizontal line dither. + +=item * + +C - vertical line dither. + +=item * + +C - C line dither. + +=item * + +C - C<\> line dither. + +=item * + +C - small checkbox dither + +=item * + +C - custom dither map. + +=back + +=cut + I don't know of a way to do ordered dither of an image against some general palette */ @@ -642,7 +932,89 @@ typedef enum i_ord_dith_tag od_custom /* custom 8x8 map */ } i_ord_dith; -/* passed into i_writegif_gen() to control quantization */ +/* +=item i_quantize +=category Data Types + +A structure type used to supply image quantization, ie. when +converting a direct color image to a paletted image. + +This has the following members: + +=over + +=item * + +C - how to handle transparency, see L. + +=item * + +C - when C is C, this is the alpha +level at which pixels become transparent. + +=item * + +C - when C is C this controls the type +of error diffusion to be done. This may not be C for this +member. + +=item * + +C - when C is C this controls the +patten used for dithering transparency. + +=item * + +C - when C is C this is the ordered +dither mask. + +=item * + +C - the method used to generate the color palette, see +L. + +=item * + +C - an array of C L entries used to +define the fixed colors (controlled by C and to return the +generated color list. + +=item * + +C - the size of the buffer allocated to C in +C units. + +=item * + +C - the number of initialized colors in C. + +=item * + +C - how RGB colors are translated to palette indexes, see +L. + +=item * + +C - when C is C this controls the type +of error diffusion to be done. + +=item * + +C, C, C, C - when C is +C this controls the error diffusion map. C is an +array of C integers. C is the position +of the current pixel in the error diffusion map, always on the top +row. + +=item * + +C - the amount to perturb pixels when C is +C. + +=back + +=cut +*/ typedef struct i_quantize_tag { int version; @@ -694,8 +1066,63 @@ enum { #include "iolayert.h" +/* error message information returned by im_errors() */ + +typedef struct { + char *msg; + int code; +} i_errmsg; + typedef struct i_render_tag i_render; +/* +=item i_color_model_t +=category Data Types +=order 95 + +Returned by L to indicate the color model of +the image. + +An enumerated type with the following possible values: + +=over + +=item * + +C - the image has no usable color data. In future +versions of Imager this will be returned in a few limited cases, +eg. when the source image is CMYK and the user has requested no color +translation is done. + +=item * + +C - gray scale with no alpha channel. + +=item * + +C - gray scale with an alpha channel. + +=item * + +C - RGB + +=item * + +C - RGB with an alpha channel. + +=back + +=cut +*/ + +typedef enum { + icm_unknown, + icm_gray, + icm_gray_alpha, + icm_rgb, + icm_rgb_alpha +} i_color_model_t; + #ifdef IMAGER_FORMAT_ATTR #define I_FORMAT_ATTR(format_index, va_index) \ __attribute ((format (printf, format_index, va_index)))