rmagick 1.7.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

Files changed (239) hide show
  1. data/ChangeLog +232 -0
  2. data/Makefile.in +28 -0
  3. data/README.html +404 -0
  4. data/README.txt +397 -0
  5. data/configure +8554 -0
  6. data/configure.ac +497 -0
  7. data/doc/comtasks.html +241 -0
  8. data/doc/constants.html +1195 -0
  9. data/doc/css/doc.css +299 -0
  10. data/doc/css/popup.css +34 -0
  11. data/doc/draw.html +3108 -0
  12. data/doc/ex/Adispatch.rb +43 -0
  13. data/doc/ex/Zconstitute.rb +9 -0
  14. data/doc/ex/adaptive_threshold.rb +19 -0
  15. data/doc/ex/add_noise.rb +18 -0
  16. data/doc/ex/affine.rb +48 -0
  17. data/doc/ex/affine_transform.rb +20 -0
  18. data/doc/ex/arc.rb +47 -0
  19. data/doc/ex/arcpath.rb +33 -0
  20. data/doc/ex/average.rb +15 -0
  21. data/doc/ex/axes.rb +64 -0
  22. data/doc/ex/bilevel_channel.rb +20 -0
  23. data/doc/ex/blur_image.rb +12 -0
  24. data/doc/ex/border.rb +10 -0
  25. data/doc/ex/bounding_box.rb +48 -0
  26. data/doc/ex/cbezier1.rb +40 -0
  27. data/doc/ex/cbezier2.rb +40 -0
  28. data/doc/ex/cbezier3.rb +40 -0
  29. data/doc/ex/cbezier4.rb +41 -0
  30. data/doc/ex/cbezier5.rb +41 -0
  31. data/doc/ex/cbezier6.rb +51 -0
  32. data/doc/ex/channel.rb +26 -0
  33. data/doc/ex/channel_threshold.rb +48 -0
  34. data/doc/ex/charcoal.rb +12 -0
  35. data/doc/ex/chop.rb +29 -0
  36. data/doc/ex/circle.rb +31 -0
  37. data/doc/ex/clip_path.rb +56 -0
  38. data/doc/ex/coalesce.rb +60 -0
  39. data/doc/ex/color_fill_to_border.rb +29 -0
  40. data/doc/ex/color_floodfill.rb +28 -0
  41. data/doc/ex/color_histogram.rb +60 -0
  42. data/doc/ex/color_reset.rb +11 -0
  43. data/doc/ex/colorize.rb +16 -0
  44. data/doc/ex/colors.rb +65 -0
  45. data/doc/ex/composite.rb +135 -0
  46. data/doc/ex/contrast.rb +37 -0
  47. data/doc/ex/crop.rb +31 -0
  48. data/doc/ex/crop_with_gravity.rb +46 -0
  49. data/doc/ex/cycle_colormap.rb +21 -0
  50. data/doc/ex/demo.rb +324 -0
  51. data/doc/ex/drawcomp.rb +42 -0
  52. data/doc/ex/drop_shadow.rb +60 -0
  53. data/doc/ex/edge.rb +11 -0
  54. data/doc/ex/ellipse.rb +43 -0
  55. data/doc/ex/emboss.rb +11 -0
  56. data/doc/ex/enhance.rb +28 -0
  57. data/doc/ex/equalize.rb +11 -0
  58. data/doc/ex/flatten_images.rb +38 -0
  59. data/doc/ex/flip.rb +11 -0
  60. data/doc/ex/flop.rb +11 -0
  61. data/doc/ex/fonts.rb +20 -0
  62. data/doc/ex/frame.rb +12 -0
  63. data/doc/ex/gaussian_blur.rb +11 -0
  64. data/doc/ex/get_multiline_type_metrics.rb +53 -0
  65. data/doc/ex/get_pixels.rb +48 -0
  66. data/doc/ex/get_type_metrics.rb +140 -0
  67. data/doc/ex/gradientfill.rb +27 -0
  68. data/doc/ex/grav.rb +44 -0
  69. data/doc/ex/gravity.rb +80 -0
  70. data/doc/ex/hatchfill.rb +27 -0
  71. data/doc/ex/images/Ballerina.jpg +0 -0
  72. data/doc/ex/images/Ballerina3.jpg +0 -0
  73. data/doc/ex/images/Button_0.gif +0 -0
  74. data/doc/ex/images/Button_1.gif +0 -0
  75. data/doc/ex/images/Button_2.gif +0 -0
  76. data/doc/ex/images/Button_3.gif +0 -0
  77. data/doc/ex/images/Button_4.gif +0 -0
  78. data/doc/ex/images/Button_5.gif +0 -0
  79. data/doc/ex/images/Button_6.gif +0 -0
  80. data/doc/ex/images/Button_7.gif +0 -0
  81. data/doc/ex/images/Button_8.gif +0 -0
  82. data/doc/ex/images/Button_9.gif +0 -0
  83. data/doc/ex/images/Button_A.gif +0 -0
  84. data/doc/ex/images/Button_B.gif +0 -0
  85. data/doc/ex/images/Button_C.gif +0 -0
  86. data/doc/ex/images/Button_D.gif +0 -0
  87. data/doc/ex/images/Button_E.gif +0 -0
  88. data/doc/ex/images/Button_F.gif +0 -0
  89. data/doc/ex/images/Button_G.gif +0 -0
  90. data/doc/ex/images/Button_H.gif +0 -0
  91. data/doc/ex/images/Button_I.gif +0 -0
  92. data/doc/ex/images/Button_J.gif +0 -0
  93. data/doc/ex/images/Button_K.gif +0 -0
  94. data/doc/ex/images/Button_L.gif +0 -0
  95. data/doc/ex/images/Button_M.gif +0 -0
  96. data/doc/ex/images/Button_N.gif +0 -0
  97. data/doc/ex/images/Button_O.gif +0 -0
  98. data/doc/ex/images/Button_P.gif +0 -0
  99. data/doc/ex/images/Button_Q.gif +0 -0
  100. data/doc/ex/images/Button_R.gif +0 -0
  101. data/doc/ex/images/Button_S.gif +0 -0
  102. data/doc/ex/images/Button_T.gif +0 -0
  103. data/doc/ex/images/Button_U.gif +0 -0
  104. data/doc/ex/images/Button_V.gif +0 -0
  105. data/doc/ex/images/Button_W.gif +0 -0
  106. data/doc/ex/images/Button_X.gif +0 -0
  107. data/doc/ex/images/Button_Y.gif +0 -0
  108. data/doc/ex/images/Button_Z.gif +0 -0
  109. data/doc/ex/images/Cheetah.jpg +0 -0
  110. data/doc/ex/images/Coffee.wmf +0 -0
  111. data/doc/ex/images/Flower_Hat.jpg +0 -0
  112. data/doc/ex/images/Gold_Statue.jpg +0 -0
  113. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  114. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  115. data/doc/ex/images/No.wmf +0 -0
  116. data/doc/ex/images/Polynesia.jpg +0 -0
  117. data/doc/ex/images/Red_Rocks.jpg +0 -0
  118. data/doc/ex/images/Shorts.jpg +0 -0
  119. data/doc/ex/images/Snake.wmf +0 -0
  120. data/doc/ex/images/Violin.jpg +0 -0
  121. data/doc/ex/images/graydient230x6.gif +0 -0
  122. data/doc/ex/images/logo400x83.gif +0 -0
  123. data/doc/ex/images/model.miff +0 -0
  124. data/doc/ex/images/notimplemented.gif +0 -0
  125. data/doc/ex/images/smile.miff +0 -0
  126. data/doc/ex/images/spin.gif +0 -0
  127. data/doc/ex/implode.rb +32 -0
  128. data/doc/ex/level.rb +12 -0
  129. data/doc/ex/level_channel.rb +33 -0
  130. data/doc/ex/line.rb +40 -0
  131. data/doc/ex/map.rb +28 -0
  132. data/doc/ex/map_f.rb +15 -0
  133. data/doc/ex/matte_fill_to_border.rb +42 -0
  134. data/doc/ex/matte_floodfill.rb +35 -0
  135. data/doc/ex/matte_replace.rb +42 -0
  136. data/doc/ex/median_filter.rb +28 -0
  137. data/doc/ex/modulate.rb +11 -0
  138. data/doc/ex/mono.rb +23 -0
  139. data/doc/ex/morph.rb +26 -0
  140. data/doc/ex/mosaic.rb +35 -0
  141. data/doc/ex/motion_blur.rb +11 -0
  142. data/doc/ex/negate.rb +11 -0
  143. data/doc/ex/negate_channel.rb +19 -0
  144. data/doc/ex/normalize.rb +11 -0
  145. data/doc/ex/oil_paint.rb +11 -0
  146. data/doc/ex/opacity.rb +38 -0
  147. data/doc/ex/opaque.rb +14 -0
  148. data/doc/ex/ordered_dither.rb +11 -0
  149. data/doc/ex/path.rb +62 -0
  150. data/doc/ex/pattern1.rb +25 -0
  151. data/doc/ex/pattern2.rb +26 -0
  152. data/doc/ex/polygon.rb +24 -0
  153. data/doc/ex/polyline.rb +23 -0
  154. data/doc/ex/posterize.rb +19 -0
  155. data/doc/ex/preview.rb +16 -0
  156. data/doc/ex/qbezierpath.rb +49 -0
  157. data/doc/ex/quantize-m.rb +25 -0
  158. data/doc/ex/radial_blur.rb +19 -0
  159. data/doc/ex/raise.rb +11 -0
  160. data/doc/ex/random_channel_threshold.rb +17 -0
  161. data/doc/ex/random_threshold_channel.rb +18 -0
  162. data/doc/ex/rectangle.rb +33 -0
  163. data/doc/ex/reduce_noise.rb +28 -0
  164. data/doc/ex/roll.rb +9 -0
  165. data/doc/ex/rotate.rb +43 -0
  166. data/doc/ex/rotate_f.rb +14 -0
  167. data/doc/ex/roundrect.rb +32 -0
  168. data/doc/ex/rubyname.rb +31 -0
  169. data/doc/ex/segment.rb +11 -0
  170. data/doc/ex/shade.rb +11 -0
  171. data/doc/ex/shave.rb +15 -0
  172. data/doc/ex/shear.rb +10 -0
  173. data/doc/ex/skewx.rb +50 -0
  174. data/doc/ex/skewy.rb +45 -0
  175. data/doc/ex/smile.rb +124 -0
  176. data/doc/ex/solarize.rb +11 -0
  177. data/doc/ex/splice.rb +16 -0
  178. data/doc/ex/spread.rb +11 -0
  179. data/doc/ex/stegano.rb +50 -0
  180. data/doc/ex/stroke_dasharray.rb +41 -0
  181. data/doc/ex/stroke_linecap.rb +44 -0
  182. data/doc/ex/stroke_linejoin.rb +48 -0
  183. data/doc/ex/stroke_width.rb +47 -0
  184. data/doc/ex/swirl.rb +17 -0
  185. data/doc/ex/text.rb +32 -0
  186. data/doc/ex/text_align.rb +36 -0
  187. data/doc/ex/text_antialias.rb +33 -0
  188. data/doc/ex/text_undercolor.rb +26 -0
  189. data/doc/ex/texture_fill_to_border.rb +34 -0
  190. data/doc/ex/texture_floodfill.rb +31 -0
  191. data/doc/ex/texturefill.rb +25 -0
  192. data/doc/ex/threshold.rb +13 -0
  193. data/doc/ex/to_blob.rb +14 -0
  194. data/doc/ex/translate.rb +37 -0
  195. data/doc/ex/transparent.rb +38 -0
  196. data/doc/ex/trim.rb +25 -0
  197. data/doc/ex/unsharp_mask.rb +28 -0
  198. data/doc/ex/viewex.rb +36 -0
  199. data/doc/ex/wave.rb +9 -0
  200. data/doc/ilist.html +1592 -0
  201. data/doc/image1.html +3009 -0
  202. data/doc/image2.html +2169 -0
  203. data/doc/image3.html +2815 -0
  204. data/doc/imageattrs.html +1319 -0
  205. data/doc/imusage.html +403 -0
  206. data/doc/index.html +418 -0
  207. data/doc/info.html +949 -0
  208. data/doc/magick.html +439 -0
  209. data/doc/scripts/doc.js +9 -0
  210. data/doc/struct.html +1334 -0
  211. data/doc/usage.html +1318 -0
  212. data/examples/describe.rb +44 -0
  213. data/examples/histogram.rb +289 -0
  214. data/examples/image_opacity.rb +29 -0
  215. data/examples/import_export.rb +31 -0
  216. data/examples/pattern_fill.rb +38 -0
  217. data/examples/rotating_text.rb +47 -0
  218. data/examples/thumbnail.rb +65 -0
  219. data/examples/vignette.rb +79 -0
  220. data/ext/RMagick/MANIFEST +239 -0
  221. data/ext/RMagick/extconf.rb.in +21 -0
  222. data/ext/RMagick/rmagick.h +938 -0
  223. data/ext/RMagick/rmagick_config.h.in +170 -0
  224. data/ext/RMagick/rmdraw.c +1308 -0
  225. data/ext/RMagick/rmfill.c +609 -0
  226. data/ext/RMagick/rmilist.c +685 -0
  227. data/ext/RMagick/rmimage.c +7980 -0
  228. data/ext/RMagick/rminfo.c +982 -0
  229. data/ext/RMagick/rmmain.c +1497 -0
  230. data/ext/RMagick/rmutil.c +2685 -0
  231. data/install.rb +1015 -0
  232. data/lib/RMagick.rb +1486 -0
  233. data/metaconfig.in +6 -0
  234. data/post-clean.rb +12 -0
  235. data/post-install.rb +36 -0
  236. data/post-setup.rb +245 -0
  237. data/rmagick.gemspec +22 -0
  238. data/uninstall.rb +71 -0
  239. metadata +286 -0
@@ -0,0 +1,1497 @@
1
+ /* $Id: rmmain.c,v 1.74 2004/12/10 00:00:12 rmagick Exp $ */
2
+ /*============================================================================\
3
+ | Copyright (C) 2004 by Timothy P. Hunter
4
+ | Name: rmmain.c
5
+ | Author: Tim Hunter
6
+ | Purpose: Contains all module, class, method declarations.
7
+ | Defines all constants
8
+ | Contains Magick module methods.
9
+ \============================================================================*/
10
+
11
+ #define MAIN // Define external variables
12
+ #include "rmagick.h"
13
+
14
+ /*----------------------------------------------------------------------------\
15
+ | External declarations
16
+ \----------------------------------------------------------------------------*/
17
+ void Init_RMagick(void);
18
+
19
+ static void version_constants(void);
20
+
21
+
22
+ #define MAGICK_MONITOR_CVAR "@@__rmagick_monitor__"
23
+ static VALUE Magick_Monitor;
24
+
25
+ /*
26
+ Method: Magick::colors [ { |colorinfo| } ]
27
+ Purpose: If called with the optional block, iterates over the colors,
28
+ otherwise returns an array of Magick::Color objects
29
+ Notes: There are 3 implementations
30
+
31
+ */
32
+ VALUE
33
+ Magick_colors(VALUE class)
34
+ {
35
+ #if defined(HAVE_GETCOLORINFOARRAY) // GraphicsMagick
36
+ ColorInfo **color_ary;
37
+ ExceptionInfo exception;
38
+ volatile VALUE ary;
39
+ int x;
40
+
41
+ GetExceptionInfo(&exception);
42
+
43
+ color_ary = GetColorInfoArray(&exception);
44
+ HANDLE_ERROR
45
+
46
+ if (rb_block_given_p())
47
+ {
48
+ x = 0;
49
+ while(color_ary[x])
50
+ {
51
+ rb_yield(Color_from_ColorInfo(color_ary[x]));
52
+ x += 1;
53
+ }
54
+ magick_free(color_ary);
55
+ return class;
56
+ }
57
+ else
58
+ {
59
+ ary = rb_ary_new();
60
+
61
+ x = 0;
62
+ while (color_ary[x])
63
+ {
64
+ rb_ary_push(ary, Color_from_ColorInfo(color_ary[x]));
65
+ x += 1;
66
+ }
67
+ magick_free(color_ary);
68
+ return ary;
69
+ }
70
+
71
+ #elif defined(HAVE_GETCOLORINFOLIST) // ImageMagick 6.0.0
72
+
73
+ const ColorInfo **color_info_list;
74
+ unsigned long number_colors, x;
75
+ volatile VALUE ary;
76
+
77
+ #if defined(HAVE_OLD_GETCOLORINFOLIST)
78
+ color_info_list = GetColorInfoList("*", &number_colors);
79
+
80
+ #else
81
+ // IM 6.1.3 added an exception parm to GetColorInfoList
82
+ ExceptionInfo exception;
83
+
84
+ GetExceptionInfo(&exception);
85
+
86
+ color_info_list = GetColorInfoList("*", &number_colors, &exception);
87
+ HANDLE_ERROR
88
+ #endif
89
+
90
+
91
+ if (rb_block_given_p())
92
+ {
93
+ for(x = 0; x < number_colors; x++)
94
+ {
95
+ rb_yield(Color_from_ColorInfo(color_info_list[x]));
96
+ }
97
+ magick_free(color_info_list);
98
+ return class;
99
+ }
100
+ else
101
+ {
102
+ ary = rb_ary_new2((long) number_colors);
103
+ for(x = 0; x < number_colors; x++)
104
+ {
105
+ rb_ary_push(ary, Color_from_ColorInfo(color_info_list[x]));
106
+ }
107
+
108
+ magick_free(color_info_list);
109
+ return ary;
110
+ }
111
+
112
+ #else // ImageMagick < 6.0.0
113
+
114
+ const ColorInfo *color_list;
115
+ ColorInfo *color;
116
+ ExceptionInfo exception;
117
+ volatile VALUE ary, el;
118
+
119
+ GetExceptionInfo(&exception);
120
+
121
+ color_list = GetColorInfo("*", &exception);
122
+ DestroyExceptionInfo(&exception);
123
+
124
+ // The order of the colors list can change in mid-iteration,
125
+ // so the only way we can guarantee a single pass thru the list
126
+ // is to copy the elements into an array without returning to
127
+ // IM. So, we always create a Ruby array and either return it
128
+ // or iterate over it.
129
+ ary = rb_ary_new();
130
+ for (color = (ColorInfo *)color_list; color; color = color->next)
131
+ {
132
+ rb_ary_push(ary, Color_from_ColorInfo(color));
133
+ }
134
+
135
+ // If block, iterate over colors
136
+ if (rb_block_given_p())
137
+ {
138
+ while ((el = rb_ary_shift(ary)) != Qnil)
139
+ {
140
+ rb_yield(el);
141
+ }
142
+ return class;
143
+ }
144
+ else
145
+ {
146
+ return ary;
147
+ }
148
+
149
+ #endif
150
+ }
151
+
152
+ /*
153
+ Method: Magick::fonts [ { |fontinfo| } ]
154
+ Purpose: If called with the optional block, iterates over the fonts,
155
+ otherwise returns an array of Magick::Font objects
156
+ */
157
+ VALUE
158
+ Magick_fonts(VALUE class)
159
+ {
160
+ #if defined(HAVE_GETTYPEINFOLIST) // ImageMagick 6.0.0
161
+
162
+ const TypeInfo **type_info;
163
+ unsigned long number_types, x;
164
+ volatile VALUE ary;
165
+
166
+ #if defined(HAVE_OLD_GETTYPEINFOLIST)
167
+ type_info = GetTypeInfoList("*", &number_types);
168
+
169
+ #else
170
+ // IM 6.1.3 added an exception argument to GetTypeInfoList
171
+ ExceptionInfo exception;
172
+
173
+ GetExceptionInfo(&exception);
174
+ type_info = GetTypeInfoList("*", &number_types, &exception);
175
+ HANDLE_ERROR
176
+ #endif
177
+
178
+ if (rb_block_given_p())
179
+ {
180
+ for(x = 0; x < number_types; x++)
181
+ {
182
+ rb_yield(Font_from_TypeInfo((TypeInfo *)type_info[x]));
183
+ }
184
+ magick_free(type_info);
185
+ return class;
186
+ }
187
+ else
188
+ {
189
+ ary = rb_ary_new2(number_types);
190
+ for(x = 0; x < number_types; x++)
191
+ {
192
+ rb_ary_push(ary, Font_from_TypeInfo((TypeInfo *)type_info[x]));
193
+ }
194
+ magick_free(type_info);
195
+ return ary;
196
+ }
197
+
198
+ #else
199
+
200
+ const TypeInfo *type_list;
201
+ TypeInfo *type, *next;
202
+ ExceptionInfo exception;
203
+ volatile VALUE ary;
204
+
205
+ GetExceptionInfo(&exception);
206
+
207
+ type_list = GetTypeInfo("*", &exception);
208
+ HANDLE_ERROR
209
+
210
+ // If block, iterate over fonts
211
+ if (rb_block_given_p())
212
+ {
213
+ for (type = (TypeInfo *)type_list; type; type = next)
214
+ {
215
+ next = type->next; // Protect against recursive calls to GetTypeInfo
216
+ if (! type->stealth)
217
+ {
218
+ rb_yield(Font_from_TypeInfo(type));
219
+ }
220
+ }
221
+
222
+ return class;
223
+ }
224
+ else
225
+ {
226
+ ary = rb_ary_new();
227
+ for (type = (TypeInfo *)type_list; type; type = type->next)
228
+ {
229
+ rb_ary_push(ary, Font_from_TypeInfo(type));
230
+ }
231
+ return ary;
232
+ }
233
+
234
+ #endif
235
+ }
236
+
237
+
238
+ /*
239
+ Method: Magick.init_formats
240
+ Purpose: Build the @@formats hash
241
+
242
+ The hash keys are image formats. The hash values
243
+ specify the format "mode string", i.e. a description of what
244
+ ImageMagick can do with that format. The mode string is in the
245
+ form "BRWA", where
246
+ "B" is "*" if the format has native blob support, or " " otherwise.
247
+ "R" is "r" if ImageMagick can read that format, or "-" otherwise.
248
+ "W" is "w" if ImageMagick can write that format, or "-" otherwise.
249
+ "A" is "+" if the format supports multi-image files, or "-" otherwise.
250
+ Notes: Only called once.
251
+ There are 3 implementations.
252
+ */
253
+
254
+ static VALUE MagickInfo_to_format(MagickInfo *magick_info)
255
+ {
256
+ char mode[4];
257
+
258
+ mode[0] = magick_info->blob_support ? '*': ' ';
259
+ mode[1] = magick_info->decoder ? 'r' : '-';
260
+ mode[2] = magick_info->encoder ? 'w' : '-';
261
+ mode[3] = magick_info->encoder && magick_info->adjoin ? '+' : '-';
262
+
263
+ return rb_str_new(mode, sizeof(mode));
264
+ }
265
+
266
+ VALUE
267
+ Magick_init_formats(VALUE class)
268
+ {
269
+ #if defined(HAVE_GETMAGICKINFOARRAY) // GraphicsMagick
270
+
271
+ MagickInfo *magick_info, *m;
272
+ volatile VALUE formats;
273
+ ExceptionInfo exception;
274
+
275
+ class = class; // defeat "never referenced" message from icc
276
+
277
+ formats = rb_hash_new();
278
+
279
+ GetExceptionInfo(&exception);
280
+ magick_info = (MagickInfo *)GetMagickInfoArray(&exception);
281
+ for(m = magick_info; m != NULL; m = m->next)
282
+ {
283
+ rb_hash_aset(formats, rb_str_new2(m->name), MagickInfo_to_format(m));
284
+ }
285
+
286
+ magick_free(magick_info);
287
+ return formats;
288
+
289
+ #elif defined(HAVE_GETMAGICKINFOLIST) // ImageMagick 6.0.0
290
+
291
+ const MagickInfo **magick_info;
292
+ unsigned long number_formats, x;
293
+ volatile VALUE formats;
294
+ #if !defined(HAVE_OLD_GETMAGICKINFOLIST)
295
+ ExceptionInfo exception;
296
+ #endif
297
+
298
+ class = class; // defeat "never referenced" message from icc
299
+ formats = rb_hash_new();
300
+
301
+ #if defined(HAVE_OLD_GETMAGICKINFOLIST)
302
+ magick_info = GetMagickInfoList("*", &number_formats);
303
+
304
+ #else
305
+ // IM 6.1.3 added an exception argument to GetMagickInfoList
306
+ GetExceptionInfo(&exception);
307
+ magick_info = GetMagickInfoList("*", &number_formats, &exception);
308
+ HANDLE_ERROR
309
+ #endif
310
+
311
+ for(x = 0; x < number_formats; x++)
312
+ {
313
+ rb_hash_aset(formats
314
+ , rb_str_new2(magick_info[x]->name)
315
+ , MagickInfo_to_format((MagickInfo *)magick_info[x]));
316
+ }
317
+ return formats;
318
+
319
+ #else
320
+
321
+ MagickInfo *m;
322
+ volatile VALUE formats;
323
+ ExceptionInfo exception;
324
+
325
+ class = class; // defeat "never referenced" message from icc
326
+
327
+ formats = rb_hash_new();
328
+
329
+ GetExceptionInfo(&exception);
330
+ m = (MagickInfo *)GetMagickInfo("*", &exception);
331
+ HANDLE_ERROR
332
+
333
+ for ( ; m != NULL; m = m->next)
334
+ {
335
+ rb_hash_aset(formats, rb_str_new2(m->name), MagickInfo_to_format(m));
336
+ }
337
+
338
+ return formats;
339
+
340
+ #endif
341
+ }
342
+
343
+ /*
344
+ This is the exit known to ImageMagick. Retrieve the monitor
345
+ proc and call it, passing the 3 exit arguments.
346
+ */
347
+ static unsigned int
348
+ monitor_handler(
349
+ const char *text,
350
+ const magick_int64_t quantum,
351
+ const magick_uint64_t span,
352
+ ExceptionInfo *exception)
353
+ {
354
+ volatile VALUE monitor;
355
+ volatile VALUE args[3];
356
+
357
+ exception = exception; // defeat "never referenced" message from icc
358
+
359
+ if (rb_cvar_defined(Module_Magick, Magick_Monitor))
360
+ {
361
+ args[0] = rb_str_new2(text);
362
+ // Convert these possibly-64-bit types to 32-bit types that
363
+ // Ruby can handle.
364
+ args[1] = INT2NUM((long) quantum);
365
+ args[2] = UINT2NUM((unsigned long) span);
366
+
367
+ monitor = rb_cvar_get(Module_Magick, Magick_Monitor);
368
+ (void) rb_funcall2((VALUE)monitor, ID_call, 3, (VALUE *)args);
369
+ }
370
+
371
+ return True;
372
+ }
373
+
374
+ /*
375
+ Method: Magick.set_monitor(&monitor)
376
+ Purpose: Establish MagickMonitor exit
377
+ Notes: use nil argument to turn off monitoring
378
+ */
379
+ static VALUE
380
+ Magick_set_monitor(VALUE class, VALUE monitor)
381
+ {
382
+
383
+ // 1st time: establish ID, define @@__MAGICK_MONITOR__
384
+ // class variable, stow monitor VALUE in it.
385
+ if (!Magick_Monitor)
386
+ {
387
+ Magick_Monitor = rb_intern(MAGICK_MONITOR_CVAR);
388
+ rb_define_class_variable(Module_Magick, MAGICK_MONITOR_CVAR, monitor);
389
+ ID_call = rb_intern("call");
390
+ }
391
+
392
+ // If nil, turn off monitoring.
393
+ if (monitor == Qnil)
394
+ {
395
+ (void) SetMonitorHandler(NULL);
396
+ }
397
+ else
398
+ // Otherwise, store monitor in @@__MAGICK_MONITOR__
399
+ {
400
+ // 1.8.0 deletes rb_cvar_declare and adds another
401
+ // parm to rb_cvar_set - if rb_cvar_declare is
402
+ // available, use the 3-parm version of rb_cvar_set.
403
+ RUBY18(rb_cvar_set(Module_Magick, Magick_Monitor, monitor, 0);)
404
+ RUBY16(rb_cvar_set(Module_Magick, Magick_Monitor, monitor);)
405
+ (void) SetMonitorHandler(&monitor_handler);
406
+ }
407
+
408
+ return class;
409
+ }
410
+
411
+ /*
412
+ Method Magick.set_cache_threshold(megabytes)
413
+ Purpose: sets the amount of free memory allocated for the
414
+ pixel cache. Once this threshold is exceeded, all
415
+ subsequent pixels cache operations are to/from disk.
416
+ Notes: singleton method
417
+ Pre-5.5.1 this method called the SetCacheThreshold
418
+ function, which is deprecated in 5.5.1.
419
+ */
420
+ static VALUE
421
+ Magick_set_cache_threshold(VALUE class, VALUE threshold)
422
+ {
423
+ unsigned long thrshld = NUM2ULONG(threshold);
424
+ SetMagickResourceLimit(MemoryResource,thrshld);
425
+ SetMagickResourceLimit(MapResource,2*thrshld);
426
+ return class;
427
+ }
428
+
429
+ /*
430
+ Method: Magick.set_log_event_mask(event,...) -> Magick
431
+ Notes: "event" is one of "all", "annotate", "blob", "cache",
432
+ "coder", "configure", "deprecate", "locale", "none",
433
+ "render", "transform", "user", "x11". Multiple events
434
+ can be specified. Event names may be capitalized.
435
+ */
436
+ static VALUE
437
+ Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
438
+ {
439
+ int x;
440
+
441
+ if (argc == 0)
442
+ {
443
+ rb_raise(rb_eArgError, "wrong number of arguments (at least 1 required)");
444
+ }
445
+ for (x = 0; x < argc; x++)
446
+ {
447
+ (void) SetLogEventMask(STRING_PTR(argv[x]));
448
+ }
449
+ return class;
450
+ }
451
+
452
+ /*
453
+ Method: Magick.set_log_format(format) -> Magick
454
+ Notes: Format is a string containing one or more of:
455
+ %t - current time
456
+ %r - elapsed time
457
+ %u - user time
458
+ %p - pid
459
+ %m - module (source file name)
460
+ %f - function name
461
+ %l - line number
462
+ %d - event domain (one of the events listed above)
463
+ %e - event name
464
+ Plus other characters, including \n, etc.
465
+ */
466
+ static VALUE
467
+ Magick_set_log_format(VALUE class, VALUE format)
468
+ {
469
+ #ifdef HAVE_SETLOGFORMAT
470
+ SetLogFormat(STRING_PTR(format));
471
+ return class;
472
+ #else
473
+ rm_not_implemented();
474
+ return (VALUE)0;
475
+ #endif
476
+ }
477
+
478
+
479
+
480
+ /*
481
+ External: Init_RMagick
482
+ Purpose: define the classes and constants
483
+ Arguments: void
484
+ Returns: void
485
+ */
486
+
487
+ void
488
+ Init_RMagick(void)
489
+ {
490
+ volatile VALUE observable;
491
+
492
+ InitializeMagick("RMagick");
493
+
494
+ Module_Magick = rb_define_module("Magick");
495
+
496
+ /*-----------------------------------------------------------------------*/
497
+ /* Create IDs for frequently used methods, etc. */
498
+ /*-----------------------------------------------------------------------*/
499
+
500
+ ID__dummy_img_ = rb_intern("_dummy_img_");
501
+ ID_changed = rb_intern("changed");
502
+ ID_cur_image = rb_intern("cur_image");
503
+ ID_dup = rb_intern("dup");
504
+ ID_enumerators = rb_intern("enumerators");
505
+ ID_fill = rb_intern("fill");
506
+ ID_flag = rb_intern("flag");
507
+ ID_from_s = rb_intern("from_s");
508
+ ID_Geometry = rb_intern("Geometry");
509
+ ID_GeometryValue = rb_intern("GeometryValue");
510
+ ID_height = rb_intern("height");
511
+ ID_initialize_copy = rb_intern("initialize_copy");
512
+ ID_length = rb_intern("length");
513
+ ID_notify_observers = rb_intern("notify_observers");
514
+ ID_new = rb_intern("new");
515
+ ID_push = rb_intern("push");
516
+ ID_spaceship = rb_intern("<=>");
517
+ ID_to_s = rb_intern("to_s");
518
+ ID_values = rb_intern("values");
519
+ ID_width = rb_intern("width");
520
+ ID_x = rb_intern("x");
521
+ ID_y = rb_intern("y");
522
+
523
+ /*-----------------------------------------------------------------------*/
524
+ /* Module Magick methods */
525
+ /*-----------------------------------------------------------------------*/
526
+
527
+ rb_define_module_function(Module_Magick, "colors", Magick_colors, 0);
528
+ rb_define_module_function(Module_Magick, "fonts", Magick_fonts, 0);
529
+ rb_define_module_function(Module_Magick, "init_formats", Magick_init_formats, 0);
530
+ rb_define_module_function(Module_Magick, "set_monitor", Magick_set_monitor, 1);
531
+ rb_define_module_function(Module_Magick, "set_cache_threshold", Magick_set_cache_threshold, 1);
532
+ rb_define_module_function(Module_Magick, "set_log_event_mask", Magick_set_log_event_mask, -1);
533
+ rb_define_module_function(Module_Magick, "set_log_format", Magick_set_log_format, 1);
534
+
535
+ /*-----------------------------------------------------------------------*/
536
+ /* Class Magick::Image methods */
537
+ /*-----------------------------------------------------------------------*/
538
+
539
+ Class_Image = rb_define_class_under(Module_Magick, "Image", rb_cObject);
540
+
541
+ // Define an alias for Object#display before we override it
542
+ rb_define_alias(Class_Image, "__display__", "display");
543
+
544
+ #if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
545
+ rb_define_alloc_func(Class_Image, Image_alloc);
546
+ rb_define_method(Class_Image, "initialize", Image_initialize, -1);
547
+ #else
548
+ rb_define_singleton_method(Class_Image, "new", Image_new, -1);
549
+ rb_define_method(Class_Image, "initialize", Image_initialize, 4);
550
+ #endif
551
+
552
+ rb_define_singleton_method(Class_Image, "constitute", Image_constitute, 4);
553
+ rb_define_singleton_method(Class_Image, "_load", Image__load, 1);
554
+ rb_define_singleton_method(Class_Image, "capture", Image_capture, -1);
555
+ rb_define_singleton_method(Class_Image, "ping", Image_ping, 1);
556
+ rb_define_singleton_method(Class_Image, "read", Image_read, 1);
557
+ rb_define_singleton_method(Class_Image, "read_inline", Image_read_inline, 1);
558
+ rb_define_singleton_method(Class_Image, "from_blob", Image_from_blob, 1);
559
+
560
+ DCL_ATTR_ACCESSOR(Image, background_color)
561
+ DCL_ATTR_READER(Image, base_columns)
562
+ DCL_ATTR_READER(Image, base_filename)
563
+ DCL_ATTR_READER(Image, base_rows)
564
+ DCL_ATTR_ACCESSOR(Image, blur)
565
+ DCL_ATTR_ACCESSOR(Image, border_color)
566
+ DCL_ATTR_READER(Image, bounding_box)
567
+ DCL_ATTR_ACCESSOR(Image, chromaticity)
568
+ DCL_ATTR_WRITER(Image, clip_mask)
569
+ DCL_ATTR_ACCESSOR(Image, color_profile)
570
+ DCL_ATTR_READER(Image, colors)
571
+ DCL_ATTR_ACCESSOR(Image, colorspace)
572
+ DCL_ATTR_READER(Image, columns)
573
+ DCL_ATTR_ACCESSOR(Image, compose)
574
+ DCL_ATTR_ACCESSOR(Image, compression)
575
+ DCL_ATTR_ACCESSOR(Image, delay)
576
+ DCL_ATTR_ACCESSOR(Image, density)
577
+ DCL_ATTR_READER(Image, depth)
578
+ DCL_ATTR_READER(Image, directory)
579
+ DCL_ATTR_ACCESSOR(Image, dispose)
580
+ DCL_ATTR_ACCESSOR(Image, endian)
581
+ DCL_ATTR_ACCESSOR(Image, extract_info)
582
+ DCL_ATTR_READER(Image, filename)
583
+ DCL_ATTR_READER(Image, filesize)
584
+ DCL_ATTR_ACCESSOR(Image, filter)
585
+ DCL_ATTR_ACCESSOR(Image, format)
586
+ DCL_ATTR_ACCESSOR(Image, fuzz)
587
+ DCL_ATTR_ACCESSOR(Image, gamma)
588
+ DCL_ATTR_ACCESSOR(Image, geometry)
589
+ DCL_ATTR_ACCESSOR(Image, image_type)
590
+ DCL_ATTR_ACCESSOR(Image, interlace)
591
+ DCL_ATTR_ACCESSOR(Image, iptc_profile)
592
+ DCL_ATTR_ACCESSOR(Image, iterations) // do not document! Only used by Image#iterations=
593
+ DCL_ATTR_ACCESSOR(Image, matte)
594
+ DCL_ATTR_ACCESSOR(Image, matte_color)
595
+ DCL_ATTR_READER(Image, mean_error_per_pixel)
596
+ DCL_ATTR_READER(Image, mime_type)
597
+ DCL_ATTR_ACCESSOR(Image, montage)
598
+ DCL_ATTR_READER(Image, normalized_mean_error)
599
+ DCL_ATTR_READER(Image, normalized_maximum_error)
600
+ DCL_ATTR_READER(Image, number_colors)
601
+ DCL_ATTR_ACCESSOR(Image, offset)
602
+ DCL_ATTR_WRITER(Image, opacity)
603
+ DCL_ATTR_ACCESSOR(Image, page)
604
+ DCL_ATTR_READER(Image, quantum_depth)
605
+ DCL_ATTR_ACCESSOR(Image, rendering_intent)
606
+ DCL_ATTR_READER(Image, rows)
607
+ DCL_ATTR_READER(Image, scene)
608
+ DCL_ATTR_ACCESSOR(Image, start_loop)
609
+ DCL_ATTR_ACCESSOR(Image, class_type)
610
+ DCL_ATTR_ACCESSOR(Image, tile_info)
611
+ DCL_ATTR_READER(Image, total_colors)
612
+ DCL_ATTR_ACCESSOR(Image, units)
613
+ DCL_ATTR_ACCESSOR(Image, x_resolution)
614
+ DCL_ATTR_ACCESSOR(Image, y_resolution)
615
+
616
+ rb_define_method(Class_Image, "adaptive_threshold", Image_adaptive_threshold, -1);
617
+ rb_define_method(Class_Image, "add_noise", Image_add_noise, 1);
618
+ rb_define_method(Class_Image, "affine_transform", Image_affine_transform, 1);
619
+ rb_define_method(Class_Image, "[]", Image_aref, 1);
620
+ rb_define_method(Class_Image, "[]=", Image_aset, 2);
621
+ rb_define_method(Class_Image, "properties", Image_properties, 0);
622
+ rb_define_method(Class_Image, "bilevel_channel", Image_bilevel_channel, -1);
623
+ rb_define_method(Class_Image, "black_threshold", Image_black_threshold, -1);
624
+ rb_define_method(Class_Image, "blur_image", Image_blur_image, -1);
625
+ rb_define_method(Class_Image, "blur_channel", Image_blur_channel, -1);
626
+ rb_define_method(Class_Image, "border", Image_border, 3);
627
+ rb_define_method(Class_Image, "border!", Image_border_bang, 3);
628
+ rb_define_method(Class_Image, "change_geometry", Image_change_geometry, 1);
629
+ rb_define_method(Class_Image, "change_geometry!", Image_change_geometry, 1);
630
+ rb_define_method(Class_Image, "changed?", Image_changed_q, 0);
631
+ rb_define_method(Class_Image, "channel", Image_channel, 1);
632
+ // An alias for compare_channel
633
+ rb_define_method(Class_Image, "channel_compare", Image_compare_channel, -1);
634
+ rb_define_method(Class_Image, "compare_channel", Image_compare_channel, -1);
635
+ rb_define_method(Class_Image, "channel_depth", Image_channel_depth, -1);
636
+ rb_define_method(Class_Image, "channel_extrema", Image_channel_extrema, -1);
637
+ rb_define_method(Class_Image, "channel_mean", Image_channel_mean, -1);
638
+ rb_define_method(Class_Image, "channel_threshold", Image_channel_threshold, -1);
639
+ rb_define_method(Class_Image, "charcoal", Image_charcoal, -1);
640
+ rb_define_method(Class_Image, "chop", Image_chop, 4);
641
+ rb_define_method(Class_Image, "clone", Image_clone, 0);
642
+ rb_define_method(Class_Image, "color_flood_fill", Image_color_flood_fill, 5);
643
+ rb_define_method(Class_Image, "color_histogram", Image_color_histogram, 0);
644
+ rb_define_method(Class_Image, "colorize", Image_colorize, -1);
645
+ rb_define_method(Class_Image, "colormap", Image_colormap, -1);
646
+ rb_define_method(Class_Image, "composite", Image_composite, -1);
647
+ rb_define_method(Class_Image, "composite!", Image_composite_bang, -1);
648
+ rb_define_method(Class_Image, "composite_affine", Image_composite_affine, 2);
649
+ rb_define_method(Class_Image, "compress_colormap!", Image_compress_colormap_bang, 0);
650
+ rb_define_method(Class_Image, "contrast", Image_contrast, -1);
651
+ rb_define_method(Class_Image, "convolve", Image_convolve, 2);
652
+ rb_define_method(Class_Image, "convolve_channel", Image_convolve_channel, -1);
653
+ rb_define_method(Class_Image, "copy", Image_copy, 0);
654
+ rb_define_method(Class_Image, "crop", Image_crop, -1);
655
+ rb_define_method(Class_Image, "crop!", Image_crop_bang, -1);
656
+ rb_define_method(Class_Image, "cycle_colormap", Image_cycle_colormap, 1);
657
+ rb_define_method(Class_Image, "despeckle", Image_despeckle, 0);
658
+ rb_define_method(Class_Image, "difference", Image_difference, 1);
659
+ rb_define_method(Class_Image, "dispatch", Image_dispatch, -1);
660
+ rb_define_method(Class_Image, "display", Image_display, 0);
661
+ rb_define_method(Class_Image, "_dump", Image__dump, 1);
662
+ rb_define_method(Class_Image, "dup", Image_dup, 0);
663
+ rb_define_method(Class_Image, "each_profile", Image_each_profile, 0);
664
+ rb_define_method(Class_Image, "edge", Image_edge, -1);
665
+ rb_define_method(Class_Image, "emboss", Image_emboss, -1);
666
+ rb_define_method(Class_Image, "enhance", Image_enhance, 0);
667
+ rb_define_method(Class_Image, "equalize", Image_equalize, 0);
668
+ rb_define_method(Class_Image, "erase!", Image_erase_bang, 0);
669
+ rb_define_method(Class_Image, "export_pixels", Image_export_pixels, 5);
670
+ rb_define_method(Class_Image, "flip", Image_flip, 0);
671
+ rb_define_method(Class_Image, "flip!", Image_flip_bang, 0);
672
+ rb_define_method(Class_Image, "flop", Image_flop, 0);
673
+ rb_define_method(Class_Image, "flop!", Image_flop_bang, 0);
674
+ rb_define_method(Class_Image, "frame", Image_frame, -1);
675
+ rb_define_method(Class_Image, "gamma_channel", Image_gamma_channel, -1);
676
+ rb_define_method(Class_Image, "gamma_correct", Image_gamma_correct, -1);
677
+ rb_define_method(Class_Image, "gaussian_blur", Image_gaussian_blur, -1);
678
+ rb_define_method(Class_Image, "gaussian_blur_channel", Image_gaussian_blur_channel, -1);
679
+ rb_define_method(Class_Image, "get_pixels", Image_get_pixels, 4);
680
+ rb_define_method(Class_Image, "gray?", Image_gray_q, 0);
681
+ rb_define_method(Class_Image, "grey?", Image_gray_q, 0);
682
+ rb_define_method(Class_Image, "grayscale_pseudo_class", Image_grayscale_pseudo_class, -1);
683
+ rb_define_method(Class_Image, "implode", Image_implode, -1);
684
+ rb_define_method(Class_Image, "import_pixels", Image_import_pixels, 6);
685
+ rb_define_method(Class_Image, "initialize_copy", Image_init_copy, 1);
686
+ rb_define_method(Class_Image, "inspect", Image_inspect, 0);
687
+ rb_define_method(Class_Image, "level", Image_level, -1);
688
+ rb_define_method(Class_Image, "level_channel", Image_level_channel, -1);
689
+ rb_define_method(Class_Image, "magnify", Image_magnify, 0);
690
+ rb_define_method(Class_Image, "magnify!", Image_magnify_bang, 0);
691
+ rb_define_method(Class_Image, "map", Image_map, -1);
692
+ rb_define_method(Class_Image, "matte_flood_fill", Image_matte_flood_fill, 5);
693
+ rb_define_method(Class_Image, "median_filter", Image_median_filter, -1);
694
+ rb_define_method(Class_Image, "minify", Image_minify, 0);
695
+ rb_define_method(Class_Image, "minify!", Image_minify_bang, 0);
696
+ rb_define_method(Class_Image, "modulate", Image_modulate, -1);
697
+ rb_define_method(Class_Image, "monochrome?", Image_monochrome_q, 0);
698
+ rb_define_method(Class_Image, "motion_blur", Image_motion_blur, 3);
699
+ rb_define_method(Class_Image, "negate", Image_negate, -1);
700
+ rb_define_method(Class_Image, "negate_channel", Image_negate_channel, -1);
701
+ rb_define_method(Class_Image, "normalize", Image_normalize, 0);
702
+ rb_define_method(Class_Image, "normalize_channel", Image_normalize_channel, -1);
703
+ rb_define_method(Class_Image, "oil_paint", Image_oil_paint, -1);
704
+ rb_define_method(Class_Image, "opaque", Image_opaque, 2);
705
+ rb_define_method(Class_Image, "opaque?", Image_opaque_q, 0);
706
+ rb_define_method(Class_Image, "ordered_dither", Image_ordered_dither, 0);
707
+ rb_define_method(Class_Image, "palette?", Image_palette_q, 0);
708
+ rb_define_method(Class_Image, "pixel_color", Image_pixel_color, -1);
709
+ rb_define_method(Class_Image, "posterize", Image_posterize, -1);
710
+ // rb_define_method(Class_Image, "plasma", Image_plasma, 6);
711
+ rb_define_method(Class_Image, "preview", Image_preview, 1);
712
+ rb_define_method(Class_Image, "profile!", Image_profile_bang, 2);
713
+ rb_define_method(Class_Image, "quantize", Image_quantize, -1);
714
+ rb_define_method(Class_Image, "quantum_operator", Image_quantum_operator, -1);
715
+ rb_define_method(Class_Image, "radial_blur", Image_radial_blur, 1);
716
+ rb_define_method(Class_Image, "raise", Image_raise, -1);
717
+ rb_define_method(Class_Image, "random_channel_threshold", Image_random_channel_threshold, 2);
718
+ rb_define_method(Class_Image, "random_threshold_channel", Image_random_threshold_channel, -1);
719
+ rb_define_method(Class_Image, "reduce_noise", Image_reduce_noise, 1);
720
+ rb_define_method(Class_Image, "resize", Image_resize, -1);
721
+ rb_define_method(Class_Image, "resize!", Image_resize_bang, -1);
722
+ rb_define_method(Class_Image, "roll", Image_roll, 2);
723
+ rb_define_method(Class_Image, "rotate", Image_rotate, 1);
724
+ rb_define_method(Class_Image, "rotate!", Image_rotate_bang, 1);
725
+ rb_define_method(Class_Image, "sample", Image_sample, -1);
726
+ rb_define_method(Class_Image, "sample!", Image_sample_bang, -1);
727
+ rb_define_method(Class_Image, "scale", Image_scale, -1);
728
+ rb_define_method(Class_Image, "scale!", Image_scale_bang, -1);
729
+ rb_define_method(Class_Image, "segment", Image_segment, -1);
730
+ rb_define_method(Class_Image, "set_channel_depth", Image_set_channel_depth, 2);
731
+ rb_define_method(Class_Image, "shade", Image_shade, -1);
732
+ rb_define_method(Class_Image, "sharpen", Image_sharpen, -1);
733
+ rb_define_method(Class_Image, "sharpen_channel", Image_sharpen_channel, -1);
734
+ rb_define_method(Class_Image, "shave", Image_shave, 2);
735
+ rb_define_method(Class_Image, "shave!", Image_shave_bang, 2);
736
+ rb_define_method(Class_Image, "shear", Image_shear, 2);
737
+ rb_define_method(Class_Image, "signature", Image_signature, 0);
738
+ rb_define_method(Class_Image, "solarize", Image_solarize, -1);
739
+ rb_define_method(Class_Image, "<=>", Image_spaceship, 1);
740
+ rb_define_method(Class_Image, "splice", Image_splice, -1);
741
+ rb_define_method(Class_Image, "spread", Image_spread, -1);
742
+ rb_define_method(Class_Image, "statistics", Image_statistics, 0);
743
+ rb_define_method(Class_Image, "stegano", Image_stegano, 2);
744
+ rb_define_method(Class_Image, "stereo", Image_stereo, 1);
745
+ rb_define_method(Class_Image, "strip!", Image_strip_bang, 0);
746
+ rb_define_method(Class_Image, "store_pixels", Image_store_pixels, 5);
747
+ rb_define_method(Class_Image, "swirl", Image_swirl, 1);
748
+ rb_define_method(Class_Image, "texture_flood_fill", Image_texture_flood_fill, 5);
749
+ rb_define_method(Class_Image, "threshold", Image_threshold, 1);
750
+ rb_define_method(Class_Image, "thumbnail", Image_thumbnail, -1);
751
+ rb_define_method(Class_Image, "thumbnail!", Image_thumbnail_bang, -1);
752
+ rb_define_method(Class_Image, "tint", Image_tint, -1);
753
+ rb_define_method(Class_Image, "to_color", Image_to_color, 1);
754
+ rb_define_method(Class_Image, "to_blob", Image_to_blob, 0);
755
+ rb_define_method(Class_Image, "transparent", Image_transparent, -1);
756
+ rb_define_method(Class_Image, "trim", Image_trim, 0);
757
+ rb_define_method(Class_Image, "trim!", Image_trim_bang, 0);
758
+ rb_define_method(Class_Image, "unsharp_mask", Image_unsharp_mask, -1);
759
+ rb_define_method(Class_Image, "unsharp_mask_channel", Image_unsharp_mask_channel, -1);
760
+ rb_define_method(Class_Image, "wave", Image_wave, -1);
761
+ rb_define_method(Class_Image, "white_threshold", Image_white_threshold, -1);
762
+ rb_define_method(Class_Image, "write", Image_write, 1);
763
+
764
+ /*-----------------------------------------------------------------------*/
765
+ /* Class Magick::ImageList methods (see also RMagick.rb) */
766
+ /*-----------------------------------------------------------------------*/
767
+
768
+ Class_ImageList = rb_define_class_under(Module_Magick, "ImageList", rb_cArray);
769
+
770
+ // Define an alias for Object#display before we override it
771
+ rb_define_alias(Class_ImageList, "__display__", "display");
772
+
773
+ // Define an alias for Array's "map" method.
774
+ rb_define_alias(Class_ImageList, "__map__", "map");
775
+
776
+ rb_define_method(Class_ImageList, "animate", ImageList_animate, -1);
777
+ rb_define_method(Class_ImageList, "append", ImageList_append, 1);
778
+ rb_define_method(Class_ImageList, "average", ImageList_average, 0);
779
+ rb_define_method(Class_ImageList, "coalesce", ImageList_coalesce, 0);
780
+ rb_define_method(Class_ImageList, "deconstruct", ImageList_deconstruct, 0);
781
+ rb_define_method(Class_ImageList, "display", ImageList_display, 0);
782
+ rb_define_method(Class_ImageList, "flatten_images", ImageList_flatten_images, 0);
783
+ rb_define_method(Class_ImageList, "map", ImageList_map, 2);
784
+ rb_define_method(Class_ImageList, "montage", ImageList_montage, 0);
785
+ rb_define_method(Class_ImageList, "morph", ImageList_morph, 1);
786
+ rb_define_method(Class_ImageList, "mosaic", ImageList_mosaic, 0);
787
+ rb_define_method(Class_ImageList, "quantize", ImageList_quantize, -1);
788
+ rb_define_method(Class_ImageList, "to_blob", ImageList_to_blob, 0);
789
+ rb_define_method(Class_ImageList, "write", ImageList_write, 1);
790
+
791
+ /*-----------------------------------------------------------------------*/
792
+ /* Class Magick::Draw methods */
793
+ /*-----------------------------------------------------------------------*/
794
+
795
+ Class_Draw = rb_define_class_under(Module_Magick, "Draw", rb_cObject);
796
+ #if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
797
+ rb_define_alloc_func(Class_Draw, Draw_alloc);
798
+ #else
799
+ rb_define_singleton_method(Class_Draw, "new", Draw_new, 0);
800
+ #endif
801
+
802
+ DCL_ATTR_WRITER(Draw, affine)
803
+ DCL_ATTR_WRITER(Draw, align)
804
+ DCL_ATTR_WRITER(Draw, decorate)
805
+ DCL_ATTR_WRITER(Draw, density)
806
+ DCL_ATTR_WRITER(Draw, encoding)
807
+ DCL_ATTR_WRITER(Draw, fill)
808
+ DCL_ATTR_WRITER(Draw, font)
809
+ DCL_ATTR_WRITER(Draw, font_family)
810
+ DCL_ATTR_WRITER(Draw, font_stretch)
811
+ DCL_ATTR_WRITER(Draw, font_style)
812
+ DCL_ATTR_WRITER(Draw, font_weight)
813
+ DCL_ATTR_WRITER(Draw, gravity)
814
+ DCL_ATTR_WRITER(Draw, pointsize)
815
+ DCL_ATTR_WRITER(Draw, rotation)
816
+ DCL_ATTR_WRITER(Draw, stroke)
817
+ DCL_ATTR_WRITER(Draw, stroke_width)
818
+ DCL_ATTR_WRITER(Draw, text_antialias)
819
+ DCL_ATTR_WRITER(Draw, undercolor)
820
+
821
+ rb_define_method(Class_Draw, "annotate", Draw_annotate, 6);
822
+ rb_define_method(Class_Draw, "clone", Draw_clone, 0);
823
+ rb_define_method(Class_Draw, "composite", Draw_composite, -1);
824
+ rb_define_method(Class_Draw, "draw", Draw_draw, 1);
825
+ rb_define_method(Class_Draw, "dup", Draw_dup, 0);
826
+ rb_define_method(Class_Draw, "get_type_metrics", Draw_get_type_metrics, -1);
827
+ rb_define_method(Class_Draw, "get_multiline_type_metrics", Draw_get_multiline_type_metrics, -1);
828
+ rb_define_method(Class_Draw, "initialize", Draw_initialize, 0);
829
+ rb_define_method(Class_Draw, "initialize_copy", Draw_init_copy, 1);
830
+ rb_define_method(Class_Draw, "inspect", Draw_inspect, 0);
831
+ rb_define_method(Class_Draw, "primitive", Draw_primitive, 1);
832
+
833
+ /*-----------------------------------------------------------------------*/
834
+ /* Class Magick::Pixel */
835
+ /*-----------------------------------------------------------------------*/
836
+
837
+ Class_Pixel = rb_define_class_under(Module_Magick, "Pixel", rb_cObject);
838
+
839
+ // include Observable in Pixel for Image::View class
840
+ rb_require("observer");
841
+ observable = rb_const_get(rb_cObject, rb_intern("Observable"));
842
+ rb_include_module(Class_Pixel, observable);
843
+
844
+ // include Comparable
845
+ rb_include_module(Class_Pixel, rb_mComparable);
846
+
847
+ // Magick::Pixel has 3 constructors: "new" "from_color", and "from_HSL".
848
+ #if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
849
+ rb_define_alloc_func(Class_Pixel, Pixel_alloc);
850
+ #else
851
+ rb_define_singleton_method(Class_Pixel, "new", Pixel_new, -1);
852
+ #endif
853
+ rb_define_singleton_method(Class_Pixel, "from_color", Pixel_from_color, 1);
854
+ rb_define_singleton_method(Class_Pixel, "from_HSL", Pixel_from_HSL, 1);
855
+
856
+ // Define the RGBA attributes
857
+ DCL_ATTR_ACCESSOR(Pixel, red)
858
+ DCL_ATTR_ACCESSOR(Pixel, green)
859
+ DCL_ATTR_ACCESSOR(Pixel, blue)
860
+ DCL_ATTR_ACCESSOR(Pixel, opacity)
861
+
862
+ // Define the instance methods
863
+ rb_define_method(Class_Pixel, "<=>", Pixel_spaceship, 1);
864
+ rb_define_method(Class_Pixel, "===", Pixel_case_eq, 1);
865
+ rb_define_method(Class_Pixel, "initialize", Pixel_initialize, -1);
866
+ rb_define_method(Class_Pixel, "initialize_copy", Pixel_init_copy, 1);
867
+ rb_define_method(Class_Pixel, "clone", Pixel_clone, 0);
868
+ rb_define_method(Class_Pixel, "dup", Pixel_dup, 0);
869
+ rb_define_method(Class_Pixel, "fcmp", Pixel_fcmp, -1);
870
+ rb_define_method(Class_Pixel, "intensity", Pixel_intensity, 0);
871
+ rb_define_method(Class_Pixel, "to_color", Pixel_to_color, -1);
872
+ rb_define_method(Class_Pixel, "to_HSL", Pixel_to_HSL, 0);
873
+ rb_define_method(Class_Pixel, "to_s", Pixel_to_s, 0);
874
+
875
+ /*-----------------------------------------------------------------------*/
876
+ /* Class Magick::ImageList::Montage methods */
877
+ /*-----------------------------------------------------------------------*/
878
+
879
+ Class_Montage = rb_define_class_under(Class_ImageList, "Montage", rb_cObject);
880
+
881
+ #if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
882
+ rb_define_alloc_func(Class_Montage, Montage_alloc);
883
+ #else
884
+ rb_define_singleton_method(Class_Montage, "new", Montage_new, 0);
885
+ #endif
886
+
887
+ rb_define_method(Class_Montage, "initialize", Montage_initialize, 0);
888
+ rb_define_method(Class_Montage, "freeze", rm_no_freeze, 0);
889
+
890
+ // These accessors supply optional arguments for Magick::ImageList::Montage.new
891
+ DCL_ATTR_WRITER(Montage, background_color)
892
+ DCL_ATTR_WRITER(Montage, border_color)
893
+ DCL_ATTR_WRITER(Montage, border_width)
894
+ DCL_ATTR_WRITER(Montage, compose)
895
+ DCL_ATTR_WRITER(Montage, filename)
896
+ DCL_ATTR_WRITER(Montage, fill)
897
+ DCL_ATTR_WRITER(Montage, font)
898
+ DCL_ATTR_WRITER(Montage, frame)
899
+ DCL_ATTR_WRITER(Montage, geometry)
900
+ DCL_ATTR_WRITER(Montage, gravity)
901
+ DCL_ATTR_WRITER(Montage, matte_color)
902
+ DCL_ATTR_WRITER(Montage, pointsize)
903
+ DCL_ATTR_WRITER(Montage, shadow)
904
+ DCL_ATTR_WRITER(Montage, stroke)
905
+ DCL_ATTR_WRITER(Montage, texture)
906
+ DCL_ATTR_WRITER(Montage, tile)
907
+ DCL_ATTR_WRITER(Montage, title)
908
+
909
+ /*-----------------------------------------------------------------------*/
910
+ /* Class Magick::Image::Info */
911
+ /*-----------------------------------------------------------------------*/
912
+
913
+ Class_Info = rb_define_class_under(Class_Image, "Info", rb_cObject);
914
+
915
+ #if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
916
+ rb_define_alloc_func(Class_Info, Info_alloc);
917
+ #else
918
+ rb_define_singleton_method(Class_Info, "new", Info_new, 0);
919
+ #endif
920
+
921
+ rb_define_method(Class_Info, "initialize", Info_initialize, 0);
922
+ rb_define_method(Class_Info, "freeze", rm_no_freeze, 0);
923
+ rb_define_method(Class_Info, "define", Info_define, -1);
924
+
925
+ DCL_ATTR_ACCESSOR(Info, antialias)
926
+ DCL_ATTR_ACCESSOR(Info, background_color)
927
+ DCL_ATTR_ACCESSOR(Info, border_color)
928
+ DCL_ATTR_ACCESSOR(Info, colorspace)
929
+ DCL_ATTR_ACCESSOR(Info, compression)
930
+ DCL_ATTR_ACCESSOR(Info, density)
931
+ DCL_ATTR_ACCESSOR(Info, depth)
932
+ DCL_ATTR_ACCESSOR(Info, dither)
933
+ DCL_ATTR_ACCESSOR(Info, extract) // new in 5.5.6, replaces tile
934
+ DCL_ATTR_ACCESSOR(Info, filename)
935
+ DCL_ATTR_ACCESSOR(Info, font)
936
+ DCL_ATTR_ACCESSOR(Info, format)
937
+ DCL_ATTR_ACCESSOR(Info, fuzz)
938
+ DCL_ATTR_ACCESSOR(Info, group)
939
+ DCL_ATTR_ACCESSOR(Info, interlace)
940
+ DCL_ATTR_ACCESSOR(Info, matte_color)
941
+ DCL_ATTR_ACCESSOR(Info, monochrome)
942
+ DCL_ATTR_ACCESSOR(Info, number_scenes) // new in 5.5.6, replaces subrange
943
+ DCL_ATTR_ACCESSOR(Info, page)
944
+ DCL_ATTR_ACCESSOR(Info, quality)
945
+ DCL_ATTR_ACCESSOR(Info, scene) // new in 5.5.6, replaces subimage
946
+ DCL_ATTR_ACCESSOR(Info, server_name)
947
+ DCL_ATTR_ACCESSOR(Info, size)
948
+ DCL_ATTR_ACCESSOR(Info, subimage) // deprecated >=5.5.6, replaced by scene
949
+ DCL_ATTR_ACCESSOR(Info, subrange) // deprecated >=5.5.6, replaced by number_scenes
950
+ DCL_ATTR_ACCESSOR(Info, tile) // deprecated >=5.5.6, replaced by extract and scenes
951
+ DCL_ATTR_ACCESSOR(Info, image_type)
952
+ DCL_ATTR_ACCESSOR(Info, units)
953
+ DCL_ATTR_ACCESSOR(Info, view)
954
+
955
+ /*-----------------------------------------------------------------------*/
956
+ /* Magick::******Fill classes and methods */
957
+ /*-----------------------------------------------------------------------*/
958
+
959
+ // class Magick::GradientFill
960
+ Class_GradientFill = rb_define_class_under(Module_Magick, "GradientFill", rb_cObject);
961
+
962
+ #if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
963
+ rb_define_alloc_func(Class_GradientFill, GradientFill_alloc);
964
+ #else
965
+ rb_define_singleton_method(Class_GradientFill, "new", GradientFill_new, 6);
966
+ #endif
967
+
968
+ rb_define_method(Class_GradientFill, "initialize", GradientFill_initialize, 6);
969
+ rb_define_method(Class_GradientFill, "fill", GradientFill_fill, 1);
970
+
971
+ // class Magick::TextureFill
972
+ Class_TextureFill = rb_define_class_under(Module_Magick, "TextureFill", rb_cObject);
973
+
974
+ #if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
975
+ rb_define_alloc_func(Class_TextureFill, TextureFill_alloc);
976
+ #else
977
+ rb_define_singleton_method(Class_TextureFill, "new", TextureFill_new, 1);
978
+ #endif
979
+
980
+ rb_define_method(Class_TextureFill, "initialize", TextureFill_initialize, 1);
981
+ rb_define_method(Class_TextureFill, "fill", TextureFill_fill, 1);
982
+
983
+ /*-----------------------------------------------------------------------*/
984
+ /* Class Magick::ImageMagickError < StandardError */
985
+ /*-----------------------------------------------------------------------*/
986
+
987
+ Class_ImageMagickError = rb_define_class_under(Module_Magick, "ImageMagickError", rb_eStandardError);
988
+ rb_define_method(Class_ImageMagickError, "initialize", ImageMagickError_initialize, -1);
989
+ RUBY16(rb_enable_super(Class_ImageMagickError, "initialize");)
990
+ rb_define_attr(Class_ImageMagickError, MAGICK_LOC, True, False);
991
+
992
+
993
+ // Miscellaneous constants
994
+ rb_define_const(Module_Magick, "MaxRGB", INT2FIX(MaxRGB));
995
+ rb_define_const(Module_Magick, "QuantumDepth", INT2FIX(QuantumDepth));
996
+
997
+ version_constants();
998
+
999
+ // Opacity constants
1000
+ DEF_CONST(OpaqueOpacity);
1001
+ DEF_CONST(TransparentOpacity);
1002
+
1003
+ /*-----------------------------------------------------------------------*/
1004
+ /* Class Magick::Enum */
1005
+ /*-----------------------------------------------------------------------*/
1006
+
1007
+ // includes Comparable
1008
+ Class_Enum = rb_define_class_under(Module_Magick, "Enum", rb_cObject);
1009
+ rb_include_module(Class_Enum, rb_mComparable);
1010
+
1011
+ #if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
1012
+ rb_define_alloc_func(Class_Enum, Enum_alloc);
1013
+ #else
1014
+ rb_define_singleton_method(Class_Enum, "new", Enum_new, 2);
1015
+ #endif
1016
+
1017
+ rb_define_method(Class_Enum, "initialize", Enum_initialize, 2);
1018
+ rb_define_method(Class_Enum, "to_s", Enum_to_s, 0);
1019
+ rb_define_method(Class_Enum, "to_i", Enum_to_i, 0);
1020
+ rb_define_method(Class_Enum, "<=>", Enum_spaceship, 1);
1021
+ rb_define_method(Class_Enum, "===", Enum_case_eq, 1);
1022
+
1023
+ // AlignType constants
1024
+ DEF_ENUM(AlignType)
1025
+ ENUMERATOR(UndefinedAlign)
1026
+ ENUMERATOR(LeftAlign)
1027
+ ENUMERATOR(CenterAlign)
1028
+ ENUMERATOR(RightAlign)
1029
+ END_ENUM
1030
+
1031
+ // AnchorType constants (for Draw#text_anchor - these are not defined by ImageMagick)
1032
+ DEF_ENUM(AnchorType)
1033
+ ENUMERATOR(StartAnchor)
1034
+ ENUMERATOR(MiddleAnchor)
1035
+ ENUMERATOR(EndAnchor)
1036
+ END_ENUM
1037
+
1038
+ // ChannelType constants
1039
+ DEF_ENUM(ChannelType)
1040
+ ENUMERATOR(UndefinedChannel)
1041
+ ENUMERATOR(RedChannel)
1042
+ ENUMERATOR(CyanChannel)
1043
+ ENUMERATOR(GreenChannel)
1044
+ ENUMERATOR(MagentaChannel)
1045
+ ENUMERATOR(BlueChannel)
1046
+ ENUMERATOR(YellowChannel)
1047
+ ENUMERATOR(OpacityChannel)
1048
+ ENUMERATOR(BlackChannel)
1049
+ ENUMERATOR(MatteChannel)
1050
+ #if defined(HAVE_INDEXCHANNEL)
1051
+ ENUMERATOR(IndexChannel) // 5.5.8
1052
+ #endif
1053
+ #if defined(HAVE_ALLCHANNELS)
1054
+ ENUMERATOR(AllChannels)
1055
+ #endif
1056
+ END_ENUM
1057
+
1058
+ // ClassType constants
1059
+ DEF_ENUM(ClassType)
1060
+ ENUMERATOR(UndefinedClass)
1061
+ ENUMERATOR(PseudoClass)
1062
+ ENUMERATOR(DirectClass)
1063
+ END_ENUM
1064
+
1065
+ // ColorspaceType constants
1066
+ DEF_ENUM(ColorspaceType)
1067
+ ENUMERATOR(UndefinedColorspace)
1068
+ ENUMERATOR(RGBColorspace)
1069
+ ENUMERATOR(GRAYColorspace)
1070
+ ENUMERATOR(TransparentColorspace)
1071
+ ENUMERATOR(OHTAColorspace)
1072
+ ENUMERATOR(XYZColorspace)
1073
+ ENUMERATOR(YCbCrColorspace)
1074
+ ENUMERATOR(YCCColorspace)
1075
+ ENUMERATOR(YIQColorspace)
1076
+ ENUMERATOR(YPbPrColorspace)
1077
+ ENUMERATOR(YUVColorspace)
1078
+ ENUMERATOR(CMYKColorspace)
1079
+ rb_define_const(Module_Magick, "SRGBColorspace"
1080
+ , rm_enum_new(Class_ColorspaceType
1081
+ , ID2SYM(rb_intern("SRGBColorspace"))
1082
+ , INT2FIX(sRGBColorspace)));
1083
+ #if defined(HAVE_HSLCOLORSPACE)
1084
+ ENUMERATOR(HSLColorspace) // 5.5.7
1085
+ #endif
1086
+ #if defined(HAVE_HWBCOLORSPACE)
1087
+ ENUMERATOR(HWBColorspace) // 5.5.7
1088
+ #endif
1089
+ #if defined(HAVE_HSBCOLORSPACE)
1090
+ ENUMERATOR(HSBColorspace) // 6.0.0
1091
+ #endif
1092
+ END_ENUM
1093
+
1094
+ // ComplianceType constants are defined as enums but used as bit flags
1095
+ DEF_ENUM(ComplianceType)
1096
+ ENUMERATOR(UndefinedCompliance)
1097
+
1098
+ // AllCompliance is 0xffff, not too useful for us!
1099
+ rb_define_const(Module_Magick, "AllCompliance"
1100
+ , rm_enum_new(Class_AnchorType
1101
+ , ID2SYM(rb_intern("AllCompliance"))
1102
+ , INT2FIX(SVGCompliance|X11Compliance|XPMCompliance)));
1103
+
1104
+ #if defined(HAVE_NOCOMPLIANCE)
1105
+ ENUMERATOR(NoCompliance)
1106
+ #endif
1107
+ ENUMERATOR(SVGCompliance)
1108
+ ENUMERATOR(X11Compliance)
1109
+ ENUMERATOR(XPMCompliance)
1110
+ END_ENUM
1111
+
1112
+ // CompositeOperator constants
1113
+ DEF_ENUM(CompositeOperator)
1114
+ ENUMERATOR(UndefinedCompositeOp)
1115
+ ENUMERATOR(NoCompositeOp)
1116
+ ENUMERATOR(AddCompositeOp)
1117
+ ENUMERATOR(AtopCompositeOp)
1118
+ ENUMERATOR(BumpmapCompositeOp)
1119
+ ENUMERATOR(ClearCompositeOp)
1120
+ ENUMERATOR(ColorizeCompositeOp)
1121
+ ENUMERATOR(CopyBlueCompositeOp)
1122
+ ENUMERATOR(CopyCompositeOp)
1123
+ ENUMERATOR(CopyGreenCompositeOp)
1124
+ ENUMERATOR(CopyOpacityCompositeOp)
1125
+ ENUMERATOR(CopyRedCompositeOp)
1126
+ #if defined(HAVE_COPYCYANCOMPOSITEOP) // CYMK added 5.5.7
1127
+ ENUMERATOR(CopyCyanCompositeOp)
1128
+ ENUMERATOR(CopyMagentaCompositeOp)
1129
+ ENUMERATOR(CopyYellowCompositeOp)
1130
+ ENUMERATOR(CopyBlackCompositeOp)
1131
+ #endif
1132
+ ENUMERATOR(DarkenCompositeOp)
1133
+ ENUMERATOR(DifferenceCompositeOp)
1134
+ ENUMERATOR(DisplaceCompositeOp)
1135
+ ENUMERATOR(DissolveCompositeOp)
1136
+ #if defined(HAVE_DSTCOMPOSITEOP)
1137
+ ENUMERATOR(DstAtopCompositeOp) // Added 6.0.2?
1138
+ ENUMERATOR(DstCompositeOp)
1139
+ ENUMERATOR(DstInCompositeOp)
1140
+ ENUMERATOR(DstOutCompositeOp)
1141
+ ENUMERATOR(DstOverCompositeOp)
1142
+ #endif
1143
+ ENUMERATOR(HueCompositeOp)
1144
+ ENUMERATOR(InCompositeOp)
1145
+ ENUMERATOR(LightenCompositeOp)
1146
+ ENUMERATOR(LuminizeCompositeOp)
1147
+ ENUMERATOR(MinusCompositeOp)
1148
+ ENUMERATOR(ModulateCompositeOp)
1149
+ ENUMERATOR(MultiplyCompositeOp)
1150
+ ENUMERATOR(OutCompositeOp)
1151
+ ENUMERATOR(OverCompositeOp)
1152
+ ENUMERATOR(OverlayCompositeOp)
1153
+ ENUMERATOR(PlusCompositeOp)
1154
+ #if defined(HAVE_REPLACECOMPOSITEOP) // Added 5.5.8
1155
+ ENUMERATOR(ReplaceCompositeOp) // synonym for CopyCompositeOp
1156
+ #endif
1157
+ ENUMERATOR(SaturateCompositeOp)
1158
+ ENUMERATOR(ScreenCompositeOp)
1159
+ #if defined(HAVE_DSTCOMPOSITEOP)
1160
+ ENUMERATOR(SrcAtopCompositeOp)
1161
+ ENUMERATOR(SrcCompositeOp)
1162
+ ENUMERATOR(SrcInCompositeOp)
1163
+ ENUMERATOR(SrcOutCompositeOp)
1164
+ ENUMERATOR(SrcOverCompositeOp)
1165
+ #endif
1166
+ ENUMERATOR(SubtractCompositeOp)
1167
+ ENUMERATOR(ThresholdCompositeOp)
1168
+ ENUMERATOR(XorCompositeOp)
1169
+
1170
+ #if defined(HAVE_COLORDODGECOMPOSITEOP)
1171
+ ENUMERATOR(ColorDodgeCompositeOp)
1172
+ ENUMERATOR(ExclusionCompositeOp)
1173
+ ENUMERATOR(HardLightCompositeOp)
1174
+ ENUMERATOR(SoftLightCompositeOp)
1175
+ #endif
1176
+ END_ENUM
1177
+
1178
+ // CompressionType constants
1179
+ DEF_ENUM(CompressionType)
1180
+ ENUMERATOR(UndefinedCompression)
1181
+ ENUMERATOR(NoCompression)
1182
+ ENUMERATOR(BZipCompression)
1183
+ ENUMERATOR(FaxCompression)
1184
+ ENUMERATOR(Group4Compression)
1185
+ ENUMERATOR(JPEGCompression)
1186
+ ENUMERATOR(LosslessJPEGCompression)
1187
+ ENUMERATOR(LZWCompression)
1188
+ ENUMERATOR(RunlengthEncodedCompression)
1189
+ ENUMERATOR(ZipCompression)
1190
+ END_ENUM
1191
+
1192
+ // DecorationType constants
1193
+ DEF_ENUM(DecorationType)
1194
+ ENUMERATOR(NoDecoration)
1195
+ ENUMERATOR(UnderlineDecoration)
1196
+ ENUMERATOR(OverlineDecoration)
1197
+ ENUMERATOR(LineThroughDecoration)
1198
+ END_ENUM
1199
+
1200
+ #if defined(HAVE_DISPOSETYPE)
1201
+ // DisposeType constants (5.5.1)
1202
+ DEF_ENUM(DisposeType)
1203
+ ENUMERATOR(UndefinedDispose)
1204
+ ENUMERATOR(BackgroundDispose)
1205
+ ENUMERATOR(NoneDispose)
1206
+ ENUMERATOR(PreviousDispose)
1207
+ END_ENUM
1208
+ #endif
1209
+
1210
+ DEF_ENUM(EndianType)
1211
+ ENUMERATOR(UndefinedEndian)
1212
+ ENUMERATOR(LSBEndian)
1213
+ ENUMERATOR(MSBEndian)
1214
+ END_ENUM
1215
+
1216
+ // FilterTypes constants
1217
+ DEF_ENUM(FilterTypes)
1218
+ ENUMERATOR(UndefinedFilter)
1219
+ ENUMERATOR(PointFilter)
1220
+ ENUMERATOR(BoxFilter)
1221
+ ENUMERATOR(TriangleFilter)
1222
+ ENUMERATOR(HermiteFilter)
1223
+ ENUMERATOR(HanningFilter)
1224
+ ENUMERATOR(HammingFilter)
1225
+ ENUMERATOR(BlackmanFilter)
1226
+ ENUMERATOR(GaussianFilter)
1227
+ ENUMERATOR(QuadraticFilter)
1228
+ ENUMERATOR(CubicFilter)
1229
+ ENUMERATOR(CatromFilter)
1230
+ ENUMERATOR(MitchellFilter)
1231
+ ENUMERATOR(LanczosFilter)
1232
+ ENUMERATOR(BesselFilter)
1233
+ ENUMERATOR(SincFilter)
1234
+ END_ENUM
1235
+
1236
+ // GravityType constants
1237
+ DEF_ENUM(GravityType)
1238
+ ENUMERATOR(ForgetGravity)
1239
+ ENUMERATOR(NorthWestGravity)
1240
+ ENUMERATOR(NorthGravity)
1241
+ ENUMERATOR(NorthEastGravity)
1242
+ ENUMERATOR(WestGravity)
1243
+ ENUMERATOR(CenterGravity)
1244
+ ENUMERATOR(EastGravity)
1245
+ ENUMERATOR(SouthWestGravity)
1246
+ ENUMERATOR(SouthGravity)
1247
+ ENUMERATOR(SouthEastGravity)
1248
+ ENUMERATOR(StaticGravity)
1249
+ END_ENUM
1250
+
1251
+ // ImageType constants
1252
+ DEF_ENUM(ImageType)
1253
+ ENUMERATOR(UndefinedType)
1254
+ ENUMERATOR(BilevelType)
1255
+ ENUMERATOR(GrayscaleType)
1256
+ ENUMERATOR(GrayscaleMatteType)
1257
+ ENUMERATOR(PaletteType)
1258
+ ENUMERATOR(PaletteMatteType)
1259
+ ENUMERATOR(TrueColorType)
1260
+ ENUMERATOR(TrueColorMatteType)
1261
+ ENUMERATOR(ColorSeparationType)
1262
+ ENUMERATOR(ColorSeparationMatteType)
1263
+ ENUMERATOR(OptimizeType)
1264
+ END_ENUM
1265
+
1266
+ // InterlaceType constants
1267
+ DEF_ENUM(InterlaceType)
1268
+ ENUMERATOR(UndefinedInterlace)
1269
+ ENUMERATOR(NoInterlace)
1270
+ ENUMERATOR(LineInterlace)
1271
+ ENUMERATOR(PlaneInterlace)
1272
+ ENUMERATOR(PartitionInterlace)
1273
+ END_ENUM
1274
+
1275
+ #if defined(HAVE_COMPAREIMAGECHANNELS)
1276
+ DEF_ENUM(MetricType)
1277
+ ENUMERATOR(UndefinedMetric)
1278
+ ENUMERATOR(MeanAbsoluteErrorMetric)
1279
+ ENUMERATOR(MeanSquaredErrorMetric)
1280
+ ENUMERATOR(PeakAbsoluteErrorMetric)
1281
+ ENUMERATOR(PeakSignalToNoiseRatioMetric)
1282
+ ENUMERATOR(RootMeanSquaredErrorMetric)
1283
+ END_ENUM
1284
+ #endif
1285
+
1286
+ // NoiseType constants
1287
+ DEF_ENUM(NoiseType)
1288
+ ENUMERATOR(UniformNoise)
1289
+ ENUMERATOR(GaussianNoise)
1290
+ ENUMERATOR(MultiplicativeGaussianNoise)
1291
+ ENUMERATOR(ImpulseNoise)
1292
+ ENUMERATOR(LaplacianNoise)
1293
+ ENUMERATOR(PoissonNoise)
1294
+ END_ENUM
1295
+
1296
+ // Paint method constants
1297
+ DEF_ENUM(PaintMethod)
1298
+ ENUMERATOR(PointMethod)
1299
+ ENUMERATOR(ReplaceMethod)
1300
+ ENUMERATOR(FloodfillMethod)
1301
+ ENUMERATOR(FillToBorderMethod)
1302
+ ENUMERATOR(ResetMethod)
1303
+ END_ENUM
1304
+
1305
+ // PreviewType
1306
+ DEF_ENUM(PreviewType)
1307
+ ENUMERATOR(UndefinedPreview)
1308
+ ENUMERATOR(RotatePreview)
1309
+ ENUMERATOR(ShearPreview)
1310
+ ENUMERATOR(RollPreview)
1311
+ ENUMERATOR(HuePreview)
1312
+ ENUMERATOR(SaturationPreview)
1313
+ ENUMERATOR(BrightnessPreview)
1314
+ ENUMERATOR(GammaPreview)
1315
+ ENUMERATOR(SpiffPreview)
1316
+ ENUMERATOR(DullPreview)
1317
+ ENUMERATOR(GrayscalePreview)
1318
+ ENUMERATOR(QuantizePreview)
1319
+ ENUMERATOR(DespecklePreview)
1320
+ ENUMERATOR(ReduceNoisePreview)
1321
+ ENUMERATOR(AddNoisePreview)
1322
+ ENUMERATOR(SharpenPreview)
1323
+ ENUMERATOR(BlurPreview)
1324
+ ENUMERATOR(ThresholdPreview)
1325
+ ENUMERATOR(EdgeDetectPreview)
1326
+ ENUMERATOR(SpreadPreview)
1327
+ ENUMERATOR(SolarizePreview)
1328
+ ENUMERATOR(ShadePreview)
1329
+ ENUMERATOR(RaisePreview)
1330
+ ENUMERATOR(SegmentPreview)
1331
+ ENUMERATOR(SwirlPreview)
1332
+ ENUMERATOR(ImplodePreview)
1333
+ ENUMERATOR(WavePreview)
1334
+ ENUMERATOR(OilPaintPreview)
1335
+ ENUMERATOR(CharcoalDrawingPreview)
1336
+ ENUMERATOR(JPEGPreview)
1337
+ END_ENUM
1338
+
1339
+ #if defined(HAVE_QUANTUMOPERATORREGIONIMAGE) || defined(HAVE_EVALUATEIMAGECHANNEL)
1340
+ DEF_ENUM(QuantumExpressionOperator)
1341
+ ENUMERATOR(UndefinedQuantumOperator)
1342
+ ENUMERATOR(AddQuantumOperator)
1343
+ ENUMERATOR(AndQuantumOperator)
1344
+ ENUMERATOR(DivideQuantumOperator)
1345
+ ENUMERATOR(LShiftQuantumOperator)
1346
+ ENUMERATOR(MultiplyQuantumOperator)
1347
+ ENUMERATOR(OrQuantumOperator)
1348
+ ENUMERATOR(RShiftQuantumOperator)
1349
+ ENUMERATOR(SubtractQuantumOperator)
1350
+ ENUMERATOR(XorQuantumOperator)
1351
+ END_ENUM
1352
+ #endif
1353
+
1354
+ // RenderingIntent
1355
+ DEF_ENUM(RenderingIntent)
1356
+ ENUMERATOR(UndefinedIntent)
1357
+ ENUMERATOR(SaturationIntent)
1358
+ ENUMERATOR(PerceptualIntent)
1359
+ ENUMERATOR(AbsoluteIntent)
1360
+ ENUMERATOR(RelativeIntent)
1361
+ END_ENUM
1362
+
1363
+ // ResolutionType constants
1364
+ DEF_ENUM(ResolutionType)
1365
+ ENUMERATOR(UndefinedResolution)
1366
+ ENUMERATOR(PixelsPerInchResolution)
1367
+ ENUMERATOR(PixelsPerCentimeterResolution)
1368
+ END_ENUM
1369
+
1370
+ // StretchType constants
1371
+ DEF_ENUM(StretchType)
1372
+ ENUMERATOR(NormalStretch)
1373
+ ENUMERATOR(UltraCondensedStretch)
1374
+ ENUMERATOR(ExtraCondensedStretch)
1375
+ ENUMERATOR(CondensedStretch)
1376
+ ENUMERATOR(SemiCondensedStretch)
1377
+ ENUMERATOR(SemiExpandedStretch)
1378
+ ENUMERATOR(ExpandedStretch)
1379
+ ENUMERATOR(ExtraExpandedStretch)
1380
+ ENUMERATOR(UltraExpandedStretch)
1381
+ ENUMERATOR(AnyStretch)
1382
+ END_ENUM
1383
+
1384
+ // StyleType constants
1385
+ DEF_ENUM(StyleType)
1386
+ ENUMERATOR(NormalStyle)
1387
+ ENUMERATOR(ItalicStyle)
1388
+ ENUMERATOR(ObliqueStyle)
1389
+ ENUMERATOR(AnyStyle)
1390
+ END_ENUM
1391
+
1392
+ // WeightType constants
1393
+ DEF_ENUM(WeightType)
1394
+ ENUMERATOR(AnyWeight)
1395
+ ENUMERATOR(NormalWeight)
1396
+ ENUMERATOR(BoldWeight)
1397
+ ENUMERATOR(BolderWeight)
1398
+ ENUMERATOR(LighterWeight)
1399
+ END_ENUM
1400
+
1401
+ /*-----------------------------------------------------------------------*/
1402
+ /* Struct classes */
1403
+ /*-----------------------------------------------------------------------*/
1404
+
1405
+ // Pass NULL as the structure name to keep them from polluting the Struct
1406
+ // namespace. The only way to use these classes is via the Magick:: namespace.
1407
+
1408
+ // Magick::AffineMatrix
1409
+ Class_AffineMatrix = rb_struct_define(NULL, "sx", "rx", "ry", "sy", "tx", "ty", 0);
1410
+ rb_define_const(Module_Magick, "AffineMatrix", Class_AffineMatrix);
1411
+
1412
+ #if defined(HAVE_GETIMAGESTATISTICS)
1413
+ // These classes are defined for >= GM 1.1.
1414
+
1415
+ // Magick::Statistics
1416
+ Class_Statistics = rb_struct_define(NULL, "red", "green", "blue", "opacity", 0);
1417
+ rb_define_const(Module_Magick, "Statistics", Class_Statistics);
1418
+ // Magick::ChannelStatistics
1419
+ Class_StatisticsChannel = rb_struct_define(NULL, "max", "min", "mean", "stddev", "var", 0);
1420
+ rb_define_const(Class_Statistics, "Channel", Class_StatisticsChannel);
1421
+ #endif
1422
+
1423
+
1424
+ // Magick::Primary
1425
+ Class_Primary = rb_struct_define(NULL, "x", "y", "z", 0);
1426
+ rb_define_method(Class_Primary, "to_s", PrimaryInfo_to_s, 0);
1427
+ rb_define_const(Module_Magick, "Primary", Class_Primary);
1428
+
1429
+ // Magick::Chromaticity
1430
+ Class_Chromaticity = rb_struct_define(NULL
1431
+ , "red_primary"
1432
+ , "green_primary"
1433
+ , "blue_primary"
1434
+ , "white_point"
1435
+ , 0);
1436
+ rb_define_method(Class_Chromaticity, "to_s", ChromaticityInfo_to_s, 0);
1437
+ rb_define_const(Module_Magick, "Chromaticity", Class_Chromaticity);
1438
+
1439
+ // Magick::Color
1440
+ Class_Color = rb_struct_define(NULL, "name", "compliance", "color", 0);
1441
+ rb_define_method(Class_Color, "to_s", Color_to_s, 0);
1442
+ rb_define_const(Module_Magick, "Color", Class_Color);
1443
+
1444
+ // Magick::Point
1445
+ Class_Point = rb_struct_define(NULL, "x", "y", 0);
1446
+ rb_define_const(Module_Magick, "Point", Class_Point);
1447
+
1448
+ // Magick::Rectangle
1449
+ Class_Rectangle = rb_struct_define(NULL, "width", "height", "x", "y", 0);
1450
+ rb_define_method(Class_Rectangle, "to_s", RectangleInfo_to_s, 0);
1451
+ rb_define_const(Module_Magick, "Rectangle", Class_Rectangle);
1452
+
1453
+ // Magick::Segment
1454
+ Class_Segment = rb_struct_define(NULL, "x1", "y1", "x2", "y2", 0);
1455
+ rb_define_method(Class_Segment, "to_s", SegmentInfo_to_s, 0);
1456
+ rb_define_const(Module_Magick, "Segment", Class_Segment);
1457
+
1458
+ // Magick::Font
1459
+ Class_Font = rb_struct_define(NULL, "name", "description",
1460
+ "family", "style", "stretch", "weight",
1461
+ "encoding", "foundry", "format", 0);
1462
+ rb_define_method(Class_Font, "to_s", Font_to_s, 0);
1463
+ rb_define_const(Module_Magick, "Font", Class_Font);
1464
+
1465
+ // Magick::TypeMetric
1466
+ Class_TypeMetric = rb_struct_define(NULL, "pixels_per_em", "ascent", "descent",
1467
+ "width", "height", "max_advance", "bounds",
1468
+ "underline_position", "underline_thickness", 0);
1469
+ rb_define_method(Class_TypeMetric, "to_s", TypeMetric_to_s, 0);
1470
+ rb_define_const(Module_Magick, "TypeMetric", Class_TypeMetric);
1471
+
1472
+
1473
+ }
1474
+
1475
+ /*
1476
+ Static: version_constants
1477
+ Purpose: create Version, Magick_version, and Version_long constants.
1478
+ */
1479
+ static void version_constants(void)
1480
+ {
1481
+ const char *mgk_version;
1482
+ char long_version[300];
1483
+
1484
+ mgk_version = GetMagickVersion(NULL);
1485
+ rb_define_const(Module_Magick, "Magick_version", rb_str_new2(mgk_version));
1486
+
1487
+ rb_define_const(Module_Magick, "Version", rb_str_new2(PACKAGE_STRING));
1488
+ sprintf(long_version,
1489
+ "This is %s ($Date: 2004/12/10 00:00:12 $) Copyright (C) 2004 by Timothy P. Hunter\n"
1490
+ "Built with %s\n"
1491
+ "Built for %s\n"
1492
+ "Web page: http://rmagick.rubyforge.org\n"
1493
+ "Email: rmagick@rubyforge.org\n",
1494
+ PACKAGE_STRING, mgk_version, RUBY_VERSION_STRING);
1495
+ rb_define_const(Module_Magick, "Long_version", rb_str_new2(long_version));
1496
+
1497
+ }