1 /** \file
2 * \brief Palette Generators
3 *
4 * See Copyright Notice in im_lib.h
5 */6 moduleim.im_palette;
7 8 version(IM) :
9 10 importcore.stdc.config : c_long;
11 12 version(DigitalMars) version(Windows) { pragma(lib, "im.lib"); }
13 14 extern @nogcnothrow :
15 16 17 /** \defgroup palette Palette Generators
18 * \par
19 * Creates several standard palettes. The palette is just an array of encoded color values.
20 * See also \ref colorutl.
21 * \par
22 * In Lua, to create a palette you can call im.PaletteCreate.
23 * \verbatim im.PaletteCreate([count: number]) -> pal: imPalette [in Lua 5] \endverbatim
24 * Default count is 256.
25 * IMLua and CDLua palettes are 100% compatible. The IM palette metatable name is "imPalette". \n
26 * When converted to a string will return "imPalete(%p)" where %p is replaced by the userdata address.
27 * If the palette is already destroyed by im.PaletteDestroy, then it will return also the suffix "-destroyed".
28 * \par
29 * In Lua, to destroy a palette you can call im.PaletteDestroy.
30 * If this function is not called, the palette is destroyed by the garbage collector.
31 * \verbatim im.PaletteDestroy(pal: imPalette) [in Lua 5] \endverbatim
32 * \par
33 * In Lua, array access is enabled so you can do:.
34 * \verbatim color = pal[index] \endverbatim
35 * \verbatim pal[index] = color \endverbatim
36 * \verbatim count = #pal \endverbatim
37 * \par
38 * See \ref im_palette.h
39 * \ingroup util */40 41 42 /** Allocates memory for the palette data.
43 * This ensures allocation and release in the same module by the correct functions.
44 * \ingroup palette */45 c_long* imPaletteNew(intcount);
46 47 /** Releases memory for the palette data.
48 * This ensures allocation and release in the same module by the correct functions.
49 * \ingroup palette */50 voidimPaletteRelease(c_long* palette);
51 52 /** Duplicate a palette data using imPaletteNew.
53 * \ingroup palette */54 c_long* imPaletteDuplicate(const(c_long)* palette, intcount);
55 56 57 /** Searches for the nearest color on the table and returns the color index if successful.
58 * It looks in all palette entries and finds the minimum euclidian square distance.
59 * If the color matches the given color it returns immediately.
60 * See also \ref colorutl.
61 *
62 * \verbatim im.PaletteFindNearest(pal: imPalette, color: lightuserdata) -> index: number [in Lua 5] \endverbatim
63 * \ingroup palette */64 intimPaletteFindNearest(const(c_long)* palette, intpalette_count, c_longcolor);
65 66 /** Searches for the color on the table and returns the color index if successful.
67 * If the tolerance is 0 search for the exact match in the palette else search for the
68 * first color that fits in the tolerance range.
69 * See also \ref colorutl.
70 *
71 * \verbatim im.PaletteFindColor(pal: imPalette, color: lightuserdata, tol: number) -> index: number [in Lua 5] \endverbatim
72 * \ingroup palette */73 intimPaletteFindColor(const(c_long)* palette, intpalette_count, c_longcolor, ubytetol);
74 75 /** Creates a palette of gray scale values.
76 * The colors are arranged from black to white.
77 *
78 * \verbatim im.PaletteGray() -> pal: imPalette [in Lua 5] \endverbatim
79 * \ingroup palette */80 c_long* imPaletteGray();
81 82 /** Creates a palette of a gradient of red colors.
83 * The colors are arranged from black to pure red.
84 *
85 * \verbatim im.PaletteRed() -> pal: imPalette [in Lua 5] \endverbatim
86 * \ingroup palette */87 c_long* imPaletteRed();
88 89 /** Creates a palette of a gradient of green colors.
90 * The colors are arranged from black to pure green.
91 *
92 * \verbatim im.PaletteGreen() -> pal: imPalette [in Lua 5] \endverbatim
93 * \ingroup palette */94 c_long* imPaletteGreen();
95 96 /** Creates a palette of a gradient of blue colors.
97 * The colors are arranged from black to pure blue.
98 *
99 * \verbatim im.PaletteBlue() -> pal: imPalette [in Lua 5] \endverbatim
100 * \ingroup palette */101 c_long* imPaletteBlue();
102 103 /** Creates a palette of a gradient of yellow colors.
104 * The colors are arranged from black to pure yellow.
105 *
106 * \verbatim im.PaletteYellow() -> pal: imPalette [in Lua 5] \endverbatim
107 * \ingroup palette */108 c_long* imPaletteYellow();
109 110 /** Creates a palette of a gradient of magenta colors.
111 * The colors are arranged from black to pure magenta.
112 *
113 * \verbatim im.PaletteMagenta() -> pal: imPalette [in Lua 5] \endverbatim
114 * \ingroup palette */115 c_long* imPaletteMagenta();
116 117 /** Creates a palette of a gradient of cian colors.
118 * The colors are arranged from black to pure cian.
119 *
120 * \verbatim im.PaletteCian() -> pal: imPalette [in Lua 5] \endverbatim
121 * \ingroup palette */122 c_long* imPaletteCian();
123 124 /** Creates a palette of rainbow colors.
125 * The colors are arranged in the light wave length spectrum order (starting from purple).
126 *
127 * \verbatim im.PaletteRainbow() -> pal: imPalette [in Lua 5] \endverbatim
128 * \ingroup palette */129 c_long* imPaletteRainbow();
130 131 /** Creates a palette of hues with maximum saturation.
132 *
133 * \verbatim im.PaletteHues() -> pal: imPalette [in Lua 5] \endverbatim
134 * \ingroup palette */135 c_long* imPaletteHues();
136 137 /** Creates a palette of a gradient of blue colors.
138 * The colors are arranged from pure blue to white.
139 *
140 * \verbatim im.PaletteBlueIce() -> pal: imPalette [in Lua 5] \endverbatim
141 * \ingroup palette */142 c_long* imPaletteBlueIce();
143 144 /** Creates a palette of a gradient from black to white passing trough red and orange.
145 *
146 * \verbatim im.PaletteHotIron() -> pal: imPalette [in Lua 5] \endverbatim
147 * \ingroup palette */148 c_long* imPaletteHotIron();
149 150 /** Creates a palette of a gradient from black to white passing trough red and yellow.
151 *
152 * \verbatim im.PaletteBlackBody() -> pal: imPalette [in Lua 5] \endverbatim
153 * \ingroup palette */154 c_long* imPaletteBlackBody();
155 156 /** Creates a palette with high contrast colors.
157 *
158 * \verbatim im.PaletteHighContrast() -> pal: imPalette [in Lua 5] \endverbatim
159 * \ingroup palette */160 c_long* imPaletteHighContrast();
161 162 /** Creates a palette of a sequence of colors from black to white
163 * with 32 linear intensity values combined with 8 hue variations.
164 *
165 * \verbatim im.PaletteLinear() -> pal: imPalette [in Lua 5] \endverbatim
166 * \ingroup palette */167 c_long* imPaletteLinear();
168 169 /** Creates a palette of an uniform sub-division of colors from black to white.
170 * This is a 2^(2.6) bits per pixel palette.
171 *
172 * \verbatim im.PaletteUniform() -> pal: imPalette [in Lua 5] \endverbatim
173 * \ingroup palette */174 c_long* imPaletteUniform();
175 176 /** Returns the index of the correspondent RGB color of an uniform palette.
177 *
178 * \verbatim im.PaletteUniformIndex(color: lightuserdata) -> index: number [in Lua 5] \endverbatim
179 * \ingroup palette */180 intimPaletteUniformIndex(c_longcolor);
181 182 /** Returns the index of the correspondent RGB color of an uniform palette.
183 * Uses an 8x8 ordered dither to lookup the index in a halftone matrix.
184 * The spatial position used by the halftone method.
185 *
186 * \verbatim im.PaletteUniformIndexHalftoned(color: lightuserdata, x: number, y: number) -> index: number [in Lua 5] \endverbatim
187 * \ingroup palette */188 intimPaletteUniformIndexHalftoned(c_longcolor, intx, inty);