tahoma2d/toonz/sources/include/toonz4.6/raster.h
Shinya Kitaoka fd19c4eedf Support Visual Studio 2015 (#544)
* Small changes, for some reason VS 2015 can't link cprintf and they added a second function std::map::count and bind couldn't resolve the function. Substituted with a lambda-expression.

* Created all 64bit version of the 3rd party libs.

* Cleanup popup opens CleanupSettings instead of CleanupSettingsPane. Not finished, panel is wrong now (also uses CleanupSettings).

* Tried to get Twain working, failed.

* When there are more then 3 peg holes create additional holes.

* When a hole touches the boundary it should still be considered a hole.

* Do not compare dot size against fixed size. Will not work in some scan resolutions. Used the same value (PERCENT * max dot size) as later in the code in compare_dots.

* When there are more than three peg holes the code looked for the best fit and used that. The problem was, that the middle hole was used as center for auto center. For three peg holes that is correct, but does not work for more than three. Now the best fit is calculated and from there the offset of the middle of the three best fit holes is calculated and applied.

* One of the last changes broke VS2015 compatibility, it chocked on a missing include.

* fix for msvs2013

* revert autopos.cpp

* apply clang-format

* use GIT-LFS
2016-07-04 17:50:30 +09:00

600 lines
24 KiB
C++

#pragma once
#ifndef _RASTER_H_
#define _RASTER_H_
#include "tmacro.h"
//#include "img.h"
#include "tcm.h"
//#include "affine.h"
#include "machine.h"
#include "pixel.h"
#include <string>
#undef TNZAPI
#ifdef TNZ_IS_RASTERLIB
#define TNZAPI TNZ_EXPORT_API
#else
#define TNZAPI TNZ_IMPORT_API
#endif
typedef enum {
RAS_NONE,
RAS_GR8, /* grey tones, 8 bits */
RAS_GR16, /* grey tones, 16 bits */
RAS_RGBM, /* LPIXEL, matte channel considered */
RAS_RGBM64, /* SPIXEL, matte channel considered */
RAS_RGB_64, /* SPIXEL, matte channel ignored */
RAS_CM32, /* cmapped, 12+12+8 bits (ink, paint, ramp) */
RAS_HOW_MANY
} RAS_TYPE;
#ifdef VECCHIO
typedef enum {
RAS_NONE,
RAS_BW, // 1 bit, B=0, W=1, first pixel in bit 7
RAS_WB, // " , W=0, B=1, "
RAS_GR8, // grey tones, 8 bits
RAS_CM8, // color-mapped, 8 bits
RAS_GR16, // grey tones, 16 bits
RAS_RGB16, // RGB 5+6+5 bits, red most significant
RAS_RLEBW, // 1 bit compressed(quick casm format)
RAS_RGB, // 1 byte per color channel/
RAS_RGB_, // LPIXEL, matte channel ignored, for display
RAS_RGBM, // LPIXEL, matte channel considered
RAS_RGBM64, // SPIXEL, matte channel considered
RAS_RGB_64, // SPIXEL, matte channel ignored
RAS_MBW16, // 16 images of 1 bit per pixel, B=0, W=1
RAS_CM8S4, // cmapped, 8 bits, standard SGI 16-color colormap
RAS_CM8S8, // cmapped, 8 bits, standard SGI 256-color colormap
RAS_CM16S4, // cmapped, 16 bits, standard SGI 16-color colormap
RAS_CM16S8, // cmapped, 16 bits, standard SGI 256-color colormap
RAS_CM16S12, // cmapped, 16 bits, standard SGI+Toonz 4096-color colormap
// RAS_CM24, // cmapped, 8+8+8 bits (ink, paint, ramp), +8 bits extra (MSB)
RAS_CM16, // color-mapped, 16 bits
RAS_CM32, // cmapped, 12+12+8 bits (ink, paint, ramp)
RAS_HOW_MANY
} RAS_TYPE;
#endif
typedef struct {
LPIXEL *buffer; /* colormap buffer for <= 16 bits or for 32 bits (otherwise
NIL) */
TCM_INFO info; /* toonz colormap info, see tcm.h */
} RAS_CMAP;
typedef struct _RASTER {
RAS_TYPE type; /* image type */
void *native_buffer; /* allocated buffer, if != NIL free this one */
void *buffer; /* (sub)image start address */
UCHAR *native_extra; /* allocated extra, if != NIL free this one */
UCHAR *extra; /* (sub)extra information (patches...) start addr */
UCHAR extra_mask; /* used extra bits in buffer (for CM24) or extra */
int bit_offs; /* for bw/wb only: bit offset of first pixel */
int multimask; /* for multibw only: ith bit==1 -> img in ith pos */
int wrap; /* pixel wrap for y direction */
int lx, ly; /* x and y lengths */
RAS_CMAP cmap;
char *cacheId;
int cacheIdLength;
} RASTER;
typedef enum {
FLT_NONE,
FLT_TRIANGLE, /* triangle filter */
FLT_MITCHELL, /* Mitchell-Netravali filter */
FLT_CUBIC_5, /* cubic convolution, a = .5 */
FLT_CUBIC_75, /* cubic convolution, a = .75 */
FLT_CUBIC_1, /* cubic convolution, a = 1 */
FLT_HANN2, /* Hann window, rad = 2 */
FLT_HANN3, /* Hann window, rad = 3 */
FLT_HAMMING2, /* Hamming window, rad = 2 */
FLT_HAMMING3, /* Hamming window, rad = 3 */
FLT_LANCZOS2, /* Lanczos window, rad = 2 */
FLT_LANCZOS3, /* Lanczos window, rad = 3 */
FLT_GAUSS, /* Gaussian convolution */
FLT_HOW_MANY
} FLT_TYPE;
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#define RASRAS(type1, type2) ((type1)*RAS_HOW_MANY + (type2))
#define RASRASRAS(type1, type2, type3) RASRAS(RASRAS((type1), (type2)), (type3))
#define RASRASRASRAS(type1, type2, type3, type4) \
RASRAS(RASRASRAS((type1), (type2), (type3)), (type4))
/*===========================================================================*/
/* About extra information:
* If the raster is of type RAS_CM24, the extra information is contained
* in the extra upper byte (XUB) of the longword containing pixel information.
* For all other buffer types, the extra information is contained in the extra
* buffer, which is a byte buffer. If a bit in the extra_mask is 0, then all
* corresponding bits of the extra are to be considered as 0, even if they are
* not 0. In other words, the extra_mask must be ANDed with all extra bytes
* before they are used. If the whole extra_mask is 0, then the extra buffer
* may be NIL (unless the type is RAS_CM24, in which case the extra buffer
* is always NIL because the XUB is used).
* No raster operation may change the extra_mask of an argument.
* Unless otherwise stated, raster operations having one input raster
* and one output raster copy or transform those bits of extra information
* which are set in both input and output extra_masks, and zero those bits
* which are set in the output extra_mask but not in the input extra_mask.
* All other raster operations leave the extra information of the output
* raster untouched (unless otherwise stated).
*/
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#ifdef LEVO
/* The RASTER structures in these functions must have already been allocated
* (can be automatic vars)
*/
TNZAPI void create_raster(RASTER *raster, int xsize, int ysize, RAS_TYPE type);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* also allocates the extra buffer if needed
*/
TNZAPI void create_raster_with_extra(RASTER *raster, int xsize, int ysize,
RAS_TYPE type, UCHAR extra_mask);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* does NOT allocate a buffer for rout, only adjusts the pointer in the buffer
* (and maybe in the extra buffer) of rin.
*/
TNZAPI int create_subraster(RASTER *rin, RASTER *rout, int x0, int y0, int x1,
int y1);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* DOES allocate a new buffer (and maybe a new extra buffer),
* but does NOT create [a] new colormap buffer[s].
*/
TNZAPI void clone_raster(RASTER *rin, RASTER *rout);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void convert_raster(RASTER *r, RAS_TYPE type);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* The RASTER structure is zeroed but not freed (can be an automatic var)
* It is recommended to use release_raster if the raster was created with
* the function create_raster.
* Also calls rop_clear_extra()
*/
TNZAPI void release_raster(RASTER *raster);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* Zeroes extra_mask and releases the extra buffer if present.
*/
TNZAPI void rop_clear_extra(RASTER *raster);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* Zeroes the patch bits in extra_mask and releases the extra buffer
* if extra_mask becomes zero and the extra buffer exists.
*/
TNZAPI void rop_clear_patches(RASTER *raster);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* Zeroes the non-patch bits in extra_mask and releases the extra buffer
* if extra_mask becomes zero and the extra buffer exists.
*/
TNZAPI void rop_clear_extra_but_not_patches(RASTER *raster);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* The following two functions do NOT copy image buffers, nor extra buffers.
* For cmapped images, the pointers to the cmap buffers are left to NIL
* unless build_cmap is TRUE, in which case [a] new cmap buffer[s] is/are
* allocated and filled.
*/
TNZAPI void rop_image_to_raster(IMAGE *img, RASTER *ras, int build_cmap);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_subimage_to_raster(IMAGE *img, int img_x0, int img_y0,
int img_x1, int img_y1, RASTER *ras,
int build_cmap);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* number of bits per pixel
*/
TNZAPI int rop_pixbits(RAS_TYPE rastertype);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* number of bytes per pixel (rounded up)
*/
TNZAPI int rop_pixbytes(RAS_TYPE rastertype);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* whether or not there may be unused bits at the end of the line
*/
TNZAPI int rop_fillerbits(RAS_TYPE rastertype);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI RAS_TYPE rop_standard_ras_type_of_pix_type(PIX_TYPE pix_type);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI PIX_TYPE rop_pix_type_of_ras_type(RAS_TYPE ras_type);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* premultiply fullcolor rasters; lx and ly must be equal.
*/
TNZAPI void rop_premultiply(RASTER *rin, RASTER *rout);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* copy region delimited by (x1,y1) and (x2,y2) onto region
* with first pixel in (newx,newy);
* when used to color quantize images, image buffer of rout may be same
* of rin;
* also calls rop_copy_extra (or acts equivalently).
*/
TNZAPI void rop_copy(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
int newx, int newy);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_copy, but only on the extra information
* (extra buffers may be NIL).
*/
TNZAPI void rop_copy_extra(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
int y2, int newx, int newy);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* copy region delimited by (x1,y1) and (x2,y2) onto region
* with first pixel in (newx,newy),
* mirroring horizontally if mirror is odd,
* then rotating counterclockwise by given multiple of ninety (may be <0).
*/
TNZAPI void rop_copy_90(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
int y2, int newx, int newy, int mirror, int ninety);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_copy, but reduce by the given linear factor by subsampling.
*/
TNZAPI void rop_shrink(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
int y2, int newx, int newy, int factor);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_copy, but zoom out by averaging some of the pixels
*/
TNZAPI void rop_zoom_out(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
int y2, int newx, int newy, int abs_zoom_level);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* see both rop_zoom_out and rop_copy_90 (combined effect)
*/
TNZAPI void rop_zoom_out_90(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
int y2, int newx, int newy, int abs_zoom_level,
int mirror, int ninety);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* clear region delimited by (x1,y1) and (x2,y2) (extra is not altered)
*/
TNZAPI void rop_clear(RASTER *r, int x1, int y1, int x2, int y2);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* does not alter nor consider extra_mask,
* simply returns if type is not RAS_CM24 and the extra buffer is NIL.
*/
void rop_and_extra_bits(RASTER *ras, UCHAR and_mask, int x1, int y1, int x2,
int y2);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_sharpen(RASTER *rin, RASTER *rout, int sharpen_max_corr);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* perform a female matte operation, the result raster may coincide with
* the bottom raster,lx and ly are the ones of the result raster,
* rasters must have a matte channel.
* female: pixmatte.m == 0 -> pixmatted.m = 0.
*/
TNZAPI void rop_female_matte(RASTER *rmatted, RASTER *rmatte, RASTER *rres);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* perform a male matte operation, the result raster may coincide with
* the bottom raster, lx and ly are the ones of the result raster,
* rasters must have a matte channel.
* male: pixmatte.m == 0 -> pixmatted.m = 255.
*/
TNZAPI void rop_male_matte(RASTER *rmatted, RASTER *rmatte, RASTER *rres);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* overlay a raster on a color (a colorcard),
* the result raster may coincide with the bottom raster,
* lx and ly are the ones of the result raster.
* From the point of view of extra information, behaves like a function
* with three raster arguments.
*/
TNZAPI void rop_ovr_rgbm(int r, int g, int b, int m, RASTER *rtop,
RASTER *rovr);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* overlay two rasters, the result raster may coincide with the bottom raster,
* lx and ly are the ones of the result raster,
* if the bottom raster is opaque but is RAS_RGBM, it should be temporarily
* set to RAS_RGB_ for increased speed.
*/
TNZAPI void rop_ovr_2(RASTER *rbot, RASTER *rtop, RASTER *rovr);
/* overlay two rasters, one of them is a greytones one.
* the result raster may coincide with the bottom raster,
* lx and ly are the ones of the result raster,
* if the bottom raster is opaque but is RAS_RGBM, it should be temporarily
* set to RAS_RGB_ for increased speed.
*/
TNZAPI void rop_ovr_gr_2(RASTER *rbot, RASTER *rtop, RASTER *rovr,
LPIXEL color);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_ovr_2, but only those patches which correspond to set bits in
* botmask and topmask are selected, unselected pixels are set to transparent
* (rop_ovr_2 is the special case with both masks set to 0xff) (masks are not
* to be confused with extra_masks, which have only 3 bits for patches).
*/
TNZAPI void rop_ovr_patches(RASTER *rbot, UCHAR botmask, RASTER *rtop,
UCHAR topmask, RASTER *rovr);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_ovr_patches with a transparent second buffer:
* only those patches which correspond to set bits in mask are selected.
* Only non-patch extra information is copied, provided that the corresponding
* bits are set in rout->extra_mask.
*/
TNZAPI void rop_filter_patches(RASTER *rin, UCHAR mask, RASTER *rout);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* overlay 3 rasters, the result raster may coincide with the bottom raster,
* lx and ly are the ones of the result raster,
* if the bottom raster is opaque but is RAS_RGBM, it should be temporarily
* set to RAS_RGB_ for increased speed.
*/
TNZAPI void rop_ovr_3(RASTER *rbot, RASTER *rmid, RASTER *rtop, RASTER *rovr);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* overlay n rasters, the result raster may coincide with the bottom raster,
* rtop[n-1] is the topmost raster,
* lx and ly are the ones of the result raster,
* if the bottom raster is opaque but is RAS_RGBM, it should be temporarily
* set to RAS_RGB_ for increased speed.
*/
TNZAPI void rop_ovr_n(RASTER *rbot, RASTER **rtop, int n, RASTER *rovr);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_ovr_2, but zooming out at the same time (see rop_zoom_out)
*/
TNZAPI void rop_zoom_out_ovr_2(RASTER *rbot, RASTER *rtop, RASTER *rovr,
int abs_zoom_level);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_ovr_3, but zooming out at the same time (see rop_zoom_out)
*/
TNZAPI void rop_zoom_out_ovr_3(RASTER *rbot, RASTER *rmid, RASTER *rtop,
RASTER *rovr, int abs_zoom_level);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_ovr_n, but zooming out at the same time (see rop_zoom_out)
*/
TNZAPI void rop_zoom_out_ovr_n(RASTER *rbot, RASTER **rtop, int n, RASTER *rovr,
int abs_zoom_level);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_ovr_2, but simply computes 1/4*bottom + 3/4*top;
* if the bottom buffer is NIL, white is assumed
*/
TNZAPI void rop_onion(RASTER *rbot, RASTER *rtop, RASTER *rovr);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* like rop_zoom_out_ovr_2, but simply computes 1/4*bottom + 3/4*top;
* if the bottom buffer is NIL, white is assumed
*/
TNZAPI void rop_zoom_out_onion(RASTER *rbot, RASTER *rtop, RASTER *rovr,
int abs_zoom_level);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* convolve with a 3x3 matrix, mapping point (dx,dy) onto (0,0),
* using floating point calculations
*/
TNZAPI void rop_conv_3(RASTER *rin, RASTER *rout, int dx, int dy,
double conv[]);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* convolve with a 3x3 matrix, mapping point (dx,dy) onto (0,0),
* using integer calculations
*/
TNZAPI void rop_conv_3_i(RASTER *rin, RASTER *rout, int dx, int dy,
double conv[]);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* move by dx in x direction and by dy in y direction
*/
TNZAPI void rop_fracmove(RASTER *rin, RASTER *rout, double dx, double dy);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* scale by sx in x direction and by sy in y direction,
* mapping point (cxin,cyin) onto (cxout,cyout),
* using given filtertype and blur factor (1 means normal filter width)
*/
TNZAPI void rop_scale(RASTER *rin, RASTER *rout, double sx, double sy,
double cxin, double cyin, double cxout, double cyout,
FLT_TYPE filtertype, double blur);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* rotate by angle in radians (infinite range), mapping point (cxin,cyin)
* onto (cxout,cyout)
*/
TNZAPI void rop_rotate(RASTER *rin, RASTER *rout, double angle, double cxin,
double cyin, double cxout, double cyout);
TNZAPI void rop_rotate_sin(RASTER *rin, RASTER *rout, double sin, double cos,
double cxin, double cyin, double cxout,
double cyout);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void get_flt_fun_rad(FLT_TYPE flt_type, double (**flt_fun)(double),
double *flt_rad);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_resample(RASTER *rin, RASTER *rout, AFFINE aff,
FLT_TYPE flt_type, double blur);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_resample_tcm(RASTER *rin, RASTER *rout, AFFINE aff,
FLT_TYPE flt_type, double blur, TCM_INFO tcm_info);
/*---------------------------------------------------------------------------*/
TNZAPI void rop_add_white_to_cmap(RASTER *ras);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_remove_white_from_cmap(RASTER *ras);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI LPIXEL premult_lpixel(LPIXEL lpixel);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI LPIXEL unpremult_lpixel(LPIXEL lpixel);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_fill_cmap_ramp(RASTER *ras, TCM_INFO info, LPIXEL color,
LPIXEL pencil, int color_index, int pencil_index,
int already_premultiplied);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_fill_cmap_colramp(RASTER *ras, TCM_INFO info, LPIXEL color,
int color_index, int already_premultiplied);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_fill_cmap_penramp(RASTER *ras, TCM_INFO info, LPIXEL pencil,
int pencil_index, int already_premultiplied);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_custom_fill_cmap_ramp(RASTER *ras, TCM_INFO info, LPIXEL color,
LPIXEL pencil, int color_index,
int pencil_index,
int already_premultiplied,
int *custom_tone);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_custom_fill_cmap_colramp(RASTER *ras, TCM_INFO info,
LPIXEL color, int color_index,
int already_premultiplied,
int *custom_tone);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_custom_fill_cmap_penramp(RASTER *ras, TCM_INFO info,
LPIXEL pencil, int pencil_index,
int already_premultiplied,
int *custom_tone);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_fill_cmap_buffer(RASTER *ras, TCM_INFO info, LPIXEL *color,
LPIXEL *pencil, int already_premultiplied);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_fill_cmap_colbuffer(RASTER *ras, TCM_INFO info, LPIXEL *color,
int already_premultiplied);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_fill_cmap_penbuffer(RASTER *ras, TCM_INFO info, LPIXEL *pencil,
int already_premultiplied);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_custom_fill_cmap_buffer(RASTER *ras, TCM_INFO info,
LPIXEL *color, LPIXEL *pencil,
int already_premultiplied,
int *custom_tone);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_custom_fill_cmap_colbuffer(RASTER *ras, TCM_INFO info,
LPIXEL *color,
int already_premultiplied,
int *custom_tone);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
TNZAPI void rop_custom_fill_cmap_penbuffer(RASTER *ras, TCM_INFO info,
LPIXEL *pencil,
int already_premultiplied,
int *custom_tone);
/*---------------------------------------------------------------------------*/
TNZAPI TDRECT rop_transform_region(TDRECT src, AFFINE placement);
TNZAPI void rop_lineart_fullcolor(RASTER *r, LPIXEL *colors, int num_colors,
TBOOL only_edges);
TNZAPI void rop_lineart_palette(IMAGE *plt, int threshold, TBOOL only_edges);
/*---------------------------------------------------------------------------*/
/* N.B rin and rout can be the same */
TNZAPI void rop_mirror(RASTER *rin, RASTER *rout, TBOOL is_vertical);
#endif
#endif