00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __IMG_RasterTypes__
00026 #define __IMG_RasterTypes__
00027
00028 #include <SYS/SYS_Types.h>
00029
00030 class UT_RGBA;
00031 class UT_BIG_RGBA;
00032
00033 #define IMG_SMALL_IMAGE 100 // Default size for scaled loading
00034
00035 #define IMG_COMPOSITE_CLEAR 0x100
00036
00037 enum IMG_CompositeOp {
00038 IMG_COMPOSITE_OVER = 0,
00039 IMG_COMPOSITE_UNDER = 1,
00040 IMG_COMPOSITE_ATOP = 2,
00041 IMG_COMPOSITE_A_INSIDE_B = 3,
00042 IMG_COMPOSITE_B_INSIDE_A = 4 | IMG_COMPOSITE_CLEAR,
00043 IMG_COMPOSITE_A_OUTSIDE_B = 5,
00044 IMG_COMPOSITE_B_OUTSIDE_A = 6 | IMG_COMPOSITE_CLEAR,
00045 IMG_COMPOSITE_PLUS = 7,
00046 IMG_COMPOSITE_A_MINUS_B = 8,
00047 IMG_COMPOSITE_B_MINUS_A = 9 | IMG_COMPOSITE_CLEAR,
00048 IMG_COMPOSITE_MULTIPLY = 10 | IMG_COMPOSITE_CLEAR,
00049 IMG_COMPOSITE_ERASE = 11,
00050 IMG_COMPOSITE_WRITE = 12,
00051 IMG_COMPOSITE_READ = 13,
00052 IMG_COMPOSITE_CROSS = 14,
00053 IMG_COMPOSITE_MERGE = 15,
00054 IMG_COMPOSITE_DIFF = 16,
00055 IMG_COMPOSITE_EMBOSS = 17,
00056 IMG_COMPOSITE_MULTIPLY_NC = 18,
00057 IMG_COMPOSITE_MIN = 19,
00058 IMG_COMPOSITE_MAX = 20
00059 };
00060
00061 enum IMG_FilterOp {
00062 IMG_FILTER_NONE,
00063 IMG_FILTER_DISSOLVE,
00064 IMG_FILTER_GAMMA,
00065 IMG_FILTER_QUANTIZE,
00066 IMG_FILTER_MONO,
00067 IMG_FILTER_BLUR,
00068 IMG_FILTER_EVEN,
00069 IMG_FILTER_ODD,
00070 IMG_FILTER_CHANNEL,
00071 IMG_FILTER_SHARPEN,
00072 IMG_FILTER_EDGES,
00073 IMG_FILTER_CHROMAKEY,
00074 IMG_FILTER_BUMPMAP
00075 };
00076
00077 enum IMG_ScaleOp {
00078 IMG_SCALE_NONE = 0,
00079 IMG_SCALE_SIZE,
00080 IMG_SCALE_FIT
00081 };
00082
00083 enum IMG_Channel {
00084 IMG_CHANNEL_R,
00085 IMG_CHANNEL_G,
00086 IMG_CHANNEL_B,
00087 IMG_CHANNEL_A,
00088 IMG_CHANNEL_HUE,
00089 IMG_CHANNEL_SAT,
00090 IMG_CHANNEL_VAL,
00091 IMG_CHANNEL_LUM
00092 };
00093
00094
00095
00096
00097 enum IMG_EdgeOptions {
00098 IMG_EDGES_HARD = 0x00,
00099 IMG_EDGES_SOFT = 0x01,
00100 IMG_EDGES_COLOR = 0x02,
00101 IMG_EDGES_LOWSIDE = 0x04
00102 };
00103
00104 typedef void (*IMG_Compositebit_8_8) (UT_RGBA *dest, UT_RGBA *op, int len );
00105 typedef void (*IMG_Compositebit_8_16) (UT_RGBA *dest, UT_BIG_RGBA *op, int len );
00106 typedef void (*IMG_Compositebit_16_16)(UT_BIG_RGBA *dest, UT_BIG_RGBA *op, int len );
00107 typedef void (*IMG_Compositebit_16_8) (UT_BIG_RGBA *dest, UT_RGBA *op, int len );
00108
00109 typedef void (*IMG_UnaryOp) (UT_RGBA *pixel);
00110
00111 typedef void (*IMG_UnaryOp16)(UT_BIG_RGBA *pixel, int length);
00112 typedef void (*IMG_UnaryOp8) (UT_RGBA *pixel, int length);
00113
00114
00115
00116 #define CHANNEL_BITS 8
00117 #define BIG_CHANNEL_BITS 16
00118 #define HUE_CHANNEL_BITS 15
00119 #define SAT_CHANNEL_BITS 15
00120 #define VAL_CHANNEL_BITS 16
00121 #define ALP_CHANNEL_BITS 16 // HSVA alpha
00122
00123 #define CHANNEL_MAX 0xFF
00124 #define BIG_CHANNEL_MAX 0xFFFF
00125 #define HUE_CHANNEL_MAX 0x7FFF
00126 #define SAT_CHANNEL_MAX 0x7FFF
00127 #define VAL_CHANNEL_MAX 0xFFFF
00128 #define ALP_CHANNEL_MAX 0xFFFF // HSVA alpha
00129
00130 #define POINT_FIVE 0x80
00131 #define BIG_POINT_FIVE 0x8000
00132
00133 #define CHANNEL_SHIFT (BIG_CHANNEL_BITS - CHANNEL_BITS)
00134
00135
00136 #define HUE_SHIFT (HUE_CHANNEL_BITS - CHANNEL_BITS)
00137 #define SAT_SHIFT (SAT_CHANNEL_BITS - CHANNEL_BITS)
00138 #define VAL_SHIFT (VAL_CHANNEL_BITS - CHANNEL_BITS)
00139 #define HUE_POINT_FIVE (1 << (HUE_SHIFT - 1))
00140 #define SAT_POINT_FIVE (1 << (SAT_SHIFT - 1))
00141 #define VAL_POINT_FIVE (1 << (VAL_SHIFT - 1))
00142 #define HUE_TO_SMALL_CHANNEL(v) (((v) + HUE_POINT_FIVE) >> HUE_SHIFT)
00143 #define SAT_TO_SMALL_CHANNEL(v) (((v) + SAT_POINT_FIVE) >> SAT_SHIFT)
00144 #define VAL_TO_SMALL_CHANNEL(v) (((v) + VAL_POINT_FIVE) >> VAL_SHIFT)
00145
00146
00147 #define BIG_HUE_SHIFT (BIG_CHANNEL_BITS - HUE_CHANNEL_BITS)
00148 #define BIG_SAT_SHIFT (BIG_CHANNEL_BITS - SAT_CHANNEL_BITS)
00149 #define BIG_VAL_SHIFT (BIG_CHANNEL_BITS - VAL_CHANNEL_BITS)
00150 #define HUE_ROUND(v) ((v) >>((HUE_CHANNEL_BITS<<1)-BIG_CHANNEL_BITS))
00151 #define SAT_ROUND(v) ((v) >>((SAT_CHANNEL_BITS<<1)-BIG_CHANNEL_BITS))
00152 #define VAL_ROUND(v) ((v) >>((VAL_CHANNEL_BITS<<1)-BIG_CHANNEL_BITS))
00153 #define HUE_TO_BIG_CHANNEL(v) (((v) << BIG_HUE_SHIFT) | HUE_ROUND(v))
00154 #define SAT_TO_BIG_CHANNEL(v) (((v) << BIG_SAT_SHIFT) | SAT_ROUND(v))
00155 #define VAL_TO_BIG_CHANNEL(v) (((v) << BIG_VAL_SHIFT) | VAL_ROUND(v))
00156
00157 #define BIG_TO_SMALL_CHANNEL(v) ((v) >> CHANNEL_SHIFT)
00158 #define SMALL_TO_BIG_CHANNEL(v) ((v) << CHANNEL_SHIFT | (v))
00159
00160 #define MONO_WEIGHTR 76 // .299
00161 #define MONO_WEIGHTG 151 // .587
00162 #define MONO_WEIGHTB 29 // .114
00163
00164 #define NTSC_LUM(r, g, b) ((((r) * MONO_WEIGHTR) \
00165 + ((g) * MONO_WEIGHTG) \
00166 + ((b) * MONO_WEIGHTB)) >> 8)
00167
00168 #endif