rmagick-windows 2.16.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (393) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +14 -0
  3. data/.gitignore +23 -0
  4. data/.hound.yml +2 -0
  5. data/.rspec +1 -0
  6. data/.rubocop.yml +340 -0
  7. data/.simplecov +27 -0
  8. data/.travis.yml +60 -0
  9. data/CHANGELOG.md +915 -0
  10. data/CODE_OF_CONDUCT.md +13 -0
  11. data/CONTRIBUTING.md +50 -0
  12. data/Doxyfile +1514 -0
  13. data/Gemfile +10 -0
  14. data/LICENSE +20 -0
  15. data/README.textile +257 -0
  16. data/Rakefile +188 -0
  17. data/before_install_linux.sh +32 -0
  18. data/before_install_osx.sh +2 -0
  19. data/deprecated/RMagick.rb +6 -0
  20. data/doc/.cvsignore +1 -0
  21. data/doc/comtasks.html +287 -0
  22. data/doc/constants.html +1581 -0
  23. data/doc/css/doc.css +299 -0
  24. data/doc/css/popup.css +34 -0
  25. data/doc/css/ref.css +67 -0
  26. data/doc/draw.html +3272 -0
  27. data/doc/ex/InitialCoords.rb +22 -0
  28. data/doc/ex/NewCoordSys.rb +30 -0
  29. data/doc/ex/OrigCoordSys.rb +16 -0
  30. data/doc/ex/PreserveAspectRatio.rb +204 -0
  31. data/doc/ex/RotateScale.rb +36 -0
  32. data/doc/ex/Skew.rb +38 -0
  33. data/doc/ex/Use01.rb +15 -0
  34. data/doc/ex/Use02.rb +20 -0
  35. data/doc/ex/Use03.rb +16 -0
  36. data/doc/ex/ViewBox.rb +31 -0
  37. data/doc/ex/adaptive_threshold.rb +9 -0
  38. data/doc/ex/add_noise.rb +16 -0
  39. data/doc/ex/affine.rb +48 -0
  40. data/doc/ex/affine_transform.rb +20 -0
  41. data/doc/ex/arc.rb +49 -0
  42. data/doc/ex/arcpath.rb +32 -0
  43. data/doc/ex/arcs01.rb +28 -0
  44. data/doc/ex/arcs02.rb +59 -0
  45. data/doc/ex/average.rb +15 -0
  46. data/doc/ex/axes.rb +64 -0
  47. data/doc/ex/baseline_shift01.rb +17 -0
  48. data/doc/ex/bilevel_channel.rb +8 -0
  49. data/doc/ex/blur_image.rb +12 -0
  50. data/doc/ex/border.rb +10 -0
  51. data/doc/ex/bounding_box.rb +42 -0
  52. data/doc/ex/cbezier1.rb +41 -0
  53. data/doc/ex/cbezier2.rb +41 -0
  54. data/doc/ex/cbezier3.rb +41 -0
  55. data/doc/ex/cbezier4.rb +42 -0
  56. data/doc/ex/cbezier5.rb +42 -0
  57. data/doc/ex/cbezier6.rb +53 -0
  58. data/doc/ex/channel.rb +25 -0
  59. data/doc/ex/charcoal.rb +12 -0
  60. data/doc/ex/chop.rb +29 -0
  61. data/doc/ex/circle.rb +33 -0
  62. data/doc/ex/circle01.rb +16 -0
  63. data/doc/ex/clip_path.rb +60 -0
  64. data/doc/ex/coalesce.rb +57 -0
  65. data/doc/ex/color_fill_to_border.rb +29 -0
  66. data/doc/ex/color_floodfill.rb +28 -0
  67. data/doc/ex/color_histogram.rb +47 -0
  68. data/doc/ex/color_reset.rb +11 -0
  69. data/doc/ex/colorize.rb +16 -0
  70. data/doc/ex/colors.rb +64 -0
  71. data/doc/ex/compose_mask.rb +22 -0
  72. data/doc/ex/composite.rb +133 -0
  73. data/doc/ex/composite_layers.rb +53 -0
  74. data/doc/ex/composite_tiled.rb +21 -0
  75. data/doc/ex/contrast.rb +36 -0
  76. data/doc/ex/crop.rb +31 -0
  77. data/doc/ex/crop_with_gravity.rb +42 -0
  78. data/doc/ex/cubic01.rb +43 -0
  79. data/doc/ex/cubic02.rb +91 -0
  80. data/doc/ex/cycle_colormap.rb +21 -0
  81. data/doc/ex/dissolve.rb +12 -0
  82. data/doc/ex/drawcomp.rb +42 -0
  83. data/doc/ex/drop_shadow.rb +60 -0
  84. data/doc/ex/edge.rb +11 -0
  85. data/doc/ex/ellipse.rb +45 -0
  86. data/doc/ex/ellipse01.rb +21 -0
  87. data/doc/ex/emboss.rb +11 -0
  88. data/doc/ex/enhance.rb +28 -0
  89. data/doc/ex/equalize.rb +11 -0
  90. data/doc/ex/evenodd.rb +42 -0
  91. data/doc/ex/fill_pattern.rb +23 -0
  92. data/doc/ex/flatten_images.rb +36 -0
  93. data/doc/ex/flip.rb +11 -0
  94. data/doc/ex/flop.rb +11 -0
  95. data/doc/ex/font_styles.rb +32 -0
  96. data/doc/ex/fonts.rb +20 -0
  97. data/doc/ex/frame.rb +12 -0
  98. data/doc/ex/gaussian_blur.rb +11 -0
  99. data/doc/ex/get_multiline_type_metrics.rb +41 -0
  100. data/doc/ex/get_pixels.rb +47 -0
  101. data/doc/ex/get_type_metrics.rb +141 -0
  102. data/doc/ex/gradientfill.rb +27 -0
  103. data/doc/ex/grav.rb +45 -0
  104. data/doc/ex/gravity.rb +80 -0
  105. data/doc/ex/group.rb +26 -0
  106. data/doc/ex/hatchfill.rb +27 -0
  107. data/doc/ex/image.rb +44 -0
  108. data/doc/ex/images/Apple.miff +0 -0
  109. data/doc/ex/images/Ballerina.jpg +0 -0
  110. data/doc/ex/images/Ballerina3.jpg +0 -0
  111. data/doc/ex/images/Button_0.gif +0 -0
  112. data/doc/ex/images/Button_1.gif +0 -0
  113. data/doc/ex/images/Button_2.gif +0 -0
  114. data/doc/ex/images/Button_3.gif +0 -0
  115. data/doc/ex/images/Button_4.gif +0 -0
  116. data/doc/ex/images/Button_5.gif +0 -0
  117. data/doc/ex/images/Button_6.gif +0 -0
  118. data/doc/ex/images/Button_7.gif +0 -0
  119. data/doc/ex/images/Button_8.gif +0 -0
  120. data/doc/ex/images/Button_9.gif +0 -0
  121. data/doc/ex/images/Button_A.gif +0 -0
  122. data/doc/ex/images/Button_B.gif +0 -0
  123. data/doc/ex/images/Button_C.gif +0 -0
  124. data/doc/ex/images/Button_D.gif +0 -0
  125. data/doc/ex/images/Button_E.gif +0 -0
  126. data/doc/ex/images/Button_F.gif +0 -0
  127. data/doc/ex/images/Button_G.gif +0 -0
  128. data/doc/ex/images/Button_H.gif +0 -0
  129. data/doc/ex/images/Button_I.gif +0 -0
  130. data/doc/ex/images/Button_J.gif +0 -0
  131. data/doc/ex/images/Button_K.gif +0 -0
  132. data/doc/ex/images/Button_L.gif +0 -0
  133. data/doc/ex/images/Button_M.gif +0 -0
  134. data/doc/ex/images/Button_N.gif +0 -0
  135. data/doc/ex/images/Button_O.gif +0 -0
  136. data/doc/ex/images/Button_P.gif +0 -0
  137. data/doc/ex/images/Button_Q.gif +0 -0
  138. data/doc/ex/images/Button_R.gif +0 -0
  139. data/doc/ex/images/Button_S.gif +0 -0
  140. data/doc/ex/images/Button_T.gif +0 -0
  141. data/doc/ex/images/Button_U.gif +0 -0
  142. data/doc/ex/images/Button_V.gif +0 -0
  143. data/doc/ex/images/Button_W.gif +0 -0
  144. data/doc/ex/images/Button_X.gif +0 -0
  145. data/doc/ex/images/Button_Y.gif +0 -0
  146. data/doc/ex/images/Button_Z.gif +0 -0
  147. data/doc/ex/images/Cheetah.jpg +0 -0
  148. data/doc/ex/images/Coffee.wmf +0 -0
  149. data/doc/ex/images/Flower_Hat.jpg +0 -0
  150. data/doc/ex/images/Gold_Statue.jpg +0 -0
  151. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  152. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  153. data/doc/ex/images/Leaf.miff +0 -0
  154. data/doc/ex/images/No.wmf +0 -0
  155. data/doc/ex/images/Polynesia.jpg +0 -0
  156. data/doc/ex/images/Red_Rocks.jpg +0 -0
  157. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  158. data/doc/ex/images/Shorts.jpg +0 -0
  159. data/doc/ex/images/Snake.wmf +0 -0
  160. data/doc/ex/images/Violin.jpg +0 -0
  161. data/doc/ex/images/Yellow_Rose.miff +0 -0
  162. data/doc/ex/images/big-duck.gif +0 -0
  163. data/doc/ex/images/duck.gif +0 -0
  164. data/doc/ex/images/duck0.gif +0 -0
  165. data/doc/ex/images/duck1.gif +0 -0
  166. data/doc/ex/images/duck10.gif +0 -0
  167. data/doc/ex/images/duck11.gif +0 -0
  168. data/doc/ex/images/duck12.gif +0 -0
  169. data/doc/ex/images/duck13.gif +0 -0
  170. data/doc/ex/images/duck14.gif +0 -0
  171. data/doc/ex/images/duck15.gif +0 -0
  172. data/doc/ex/images/duck2.gif +0 -0
  173. data/doc/ex/images/duck3.gif +0 -0
  174. data/doc/ex/images/duck4.gif +0 -0
  175. data/doc/ex/images/duck5.gif +0 -0
  176. data/doc/ex/images/duck6.gif +0 -0
  177. data/doc/ex/images/duck7.gif +0 -0
  178. data/doc/ex/images/duck8.gif +0 -0
  179. data/doc/ex/images/duck9.gif +0 -0
  180. data/doc/ex/images/graydient230x6.gif +0 -0
  181. data/doc/ex/images/image_with_profile.jpg +0 -0
  182. data/doc/ex/images/logo400x83.gif +0 -0
  183. data/doc/ex/images/model.miff +0 -0
  184. data/doc/ex/images/notimplemented.gif +0 -0
  185. data/doc/ex/images/smile.miff +0 -0
  186. data/doc/ex/images/spin.gif +0 -0
  187. data/doc/ex/implode.rb +34 -0
  188. data/doc/ex/level.rb +11 -0
  189. data/doc/ex/level_colors.rb +11 -0
  190. data/doc/ex/line.rb +41 -0
  191. data/doc/ex/line01.rb +21 -0
  192. data/doc/ex/mask.rb +35 -0
  193. data/doc/ex/matte_fill_to_border.rb +39 -0
  194. data/doc/ex/matte_floodfill.rb +32 -0
  195. data/doc/ex/matte_replace.rb +39 -0
  196. data/doc/ex/median_filter.rb +28 -0
  197. data/doc/ex/modulate.rb +11 -0
  198. data/doc/ex/mono.rb +23 -0
  199. data/doc/ex/morph.rb +25 -0
  200. data/doc/ex/mosaic.rb +35 -0
  201. data/doc/ex/motion_blur.rb +11 -0
  202. data/doc/ex/negate.rb +11 -0
  203. data/doc/ex/negate_channel.rb +9 -0
  204. data/doc/ex/nested_rvg.rb +21 -0
  205. data/doc/ex/nonzero.rb +42 -0
  206. data/doc/ex/normalize.rb +11 -0
  207. data/doc/ex/oil_paint.rb +11 -0
  208. data/doc/ex/opacity.rb +37 -0
  209. data/doc/ex/ordered_dither.rb +11 -0
  210. data/doc/ex/path.rb +63 -0
  211. data/doc/ex/pattern1.rb +25 -0
  212. data/doc/ex/pattern2.rb +26 -0
  213. data/doc/ex/polaroid.rb +27 -0
  214. data/doc/ex/polygon.rb +23 -0
  215. data/doc/ex/polygon01.rb +21 -0
  216. data/doc/ex/polyline.rb +22 -0
  217. data/doc/ex/polyline01.rb +21 -0
  218. data/doc/ex/posterize.rb +8 -0
  219. data/doc/ex/preview.rb +8 -0
  220. data/doc/ex/qbezierpath.rb +52 -0
  221. data/doc/ex/quad01.rb +34 -0
  222. data/doc/ex/quantize-m.rb +25 -0
  223. data/doc/ex/radial_blur.rb +9 -0
  224. data/doc/ex/raise.rb +8 -0
  225. data/doc/ex/random_threshold_channel.rb +13 -0
  226. data/doc/ex/rect01.rb +14 -0
  227. data/doc/ex/rect02.rb +20 -0
  228. data/doc/ex/rectangle.rb +34 -0
  229. data/doc/ex/reduce_noise.rb +28 -0
  230. data/doc/ex/remap.rb +11 -0
  231. data/doc/ex/remap_images.rb +19 -0
  232. data/doc/ex/resize_to_fill.rb +8 -0
  233. data/doc/ex/resize_to_fit.rb +8 -0
  234. data/doc/ex/roll.rb +9 -0
  235. data/doc/ex/rotate.rb +44 -0
  236. data/doc/ex/rotate_f.rb +14 -0
  237. data/doc/ex/roundrect.rb +33 -0
  238. data/doc/ex/rubyname.rb +30 -0
  239. data/doc/ex/rvg_clippath.rb +12 -0
  240. data/doc/ex/rvg_linecap.rb +42 -0
  241. data/doc/ex/rvg_linejoin.rb +40 -0
  242. data/doc/ex/rvg_opacity.rb +18 -0
  243. data/doc/ex/rvg_pattern.rb +26 -0
  244. data/doc/ex/rvg_stroke_dasharray.rb +11 -0
  245. data/doc/ex/segment.rb +11 -0
  246. data/doc/ex/sepiatone.rb +7 -0
  247. data/doc/ex/shade.rb +11 -0
  248. data/doc/ex/shadow.rb +30 -0
  249. data/doc/ex/shave.rb +15 -0
  250. data/doc/ex/shear.rb +10 -0
  251. data/doc/ex/sketch.rb +17 -0
  252. data/doc/ex/skewx.rb +51 -0
  253. data/doc/ex/skewy.rb +47 -0
  254. data/doc/ex/smile.rb +125 -0
  255. data/doc/ex/solarize.rb +11 -0
  256. data/doc/ex/sparse_color.rb +54 -0
  257. data/doc/ex/splice.rb +8 -0
  258. data/doc/ex/spread.rb +11 -0
  259. data/doc/ex/stegano.rb +55 -0
  260. data/doc/ex/stroke_dasharray.rb +42 -0
  261. data/doc/ex/stroke_fill.rb +10 -0
  262. data/doc/ex/stroke_linecap.rb +44 -0
  263. data/doc/ex/stroke_linejoin.rb +48 -0
  264. data/doc/ex/stroke_width.rb +49 -0
  265. data/doc/ex/swirl.rb +17 -0
  266. data/doc/ex/text.rb +37 -0
  267. data/doc/ex/text01.rb +16 -0
  268. data/doc/ex/text_align.rb +36 -0
  269. data/doc/ex/text_antialias.rb +37 -0
  270. data/doc/ex/text_styles.rb +19 -0
  271. data/doc/ex/text_undercolor.rb +28 -0
  272. data/doc/ex/texture_fill_to_border.rb +34 -0
  273. data/doc/ex/texture_floodfill.rb +32 -0
  274. data/doc/ex/texturefill.rb +24 -0
  275. data/doc/ex/threshold.rb +13 -0
  276. data/doc/ex/to_blob.rb +13 -0
  277. data/doc/ex/translate.rb +39 -0
  278. data/doc/ex/transparent.rb +38 -0
  279. data/doc/ex/transpose.rb +9 -0
  280. data/doc/ex/transverse.rb +9 -0
  281. data/doc/ex/tref01.rb +24 -0
  282. data/doc/ex/triangle01.rb +15 -0
  283. data/doc/ex/trim.rb +23 -0
  284. data/doc/ex/tspan01.rb +17 -0
  285. data/doc/ex/tspan02.rb +17 -0
  286. data/doc/ex/tspan03.rb +19 -0
  287. data/doc/ex/unsharp_mask.rb +28 -0
  288. data/doc/ex/viewex.rb +33 -0
  289. data/doc/ex/vignette.rb +12 -0
  290. data/doc/ex/watermark.rb +27 -0
  291. data/doc/ex/wave.rb +9 -0
  292. data/doc/ex/wet_floor.rb +58 -0
  293. data/doc/ex/writing_mode01.rb +26 -0
  294. data/doc/ex/writing_mode02.rb +26 -0
  295. data/doc/ilist.html +2056 -0
  296. data/doc/image1.html +4680 -0
  297. data/doc/image2.html +3665 -0
  298. data/doc/image3.html +4522 -0
  299. data/doc/imageattrs.html +1638 -0
  300. data/doc/imusage.html +514 -0
  301. data/doc/index.html +416 -0
  302. data/doc/info.html +1499 -0
  303. data/doc/magick.html +565 -0
  304. data/doc/optequiv.html +2435 -0
  305. data/doc/rvg.html +975 -0
  306. data/doc/rvgclip.html +248 -0
  307. data/doc/rvggroup.html +305 -0
  308. data/doc/rvgimage.html +289 -0
  309. data/doc/rvgpattern.html +475 -0
  310. data/doc/rvgshape.html +406 -0
  311. data/doc/rvgstyle.html +270 -0
  312. data/doc/rvgtext.html +465 -0
  313. data/doc/rvgtspan.html +238 -0
  314. data/doc/rvgtut.html +530 -0
  315. data/doc/rvguse.html +145 -0
  316. data/doc/rvgxform.html +294 -0
  317. data/doc/scripts/doc.js +22 -0
  318. data/doc/scripts/stripeTables.js +23 -0
  319. data/doc/struct.html +1339 -0
  320. data/doc/usage.html +1621 -0
  321. data/examples/constitute.rb +7 -0
  322. data/examples/crop_with_gravity.rb +42 -0
  323. data/examples/demo.rb +324 -0
  324. data/examples/describe.rb +43 -0
  325. data/examples/find_similar_region.rb +34 -0
  326. data/examples/histogram.rb +321 -0
  327. data/examples/identify.rb +185 -0
  328. data/examples/image_opacity.rb +29 -0
  329. data/examples/import_export.rb +31 -0
  330. data/examples/pattern_fill.rb +38 -0
  331. data/examples/rotating_text.rb +44 -0
  332. data/examples/spinner.rb +49 -0
  333. data/examples/thumbnail.rb +64 -0
  334. data/examples/vignette.rb +78 -0
  335. data/ext/RMagick/extconf.rb +548 -0
  336. data/ext/RMagick/rmagick.c +401 -0
  337. data/ext/RMagick/rmagick.h +1287 -0
  338. data/ext/RMagick/rmdraw.c +2022 -0
  339. data/ext/RMagick/rmenum.c +1235 -0
  340. data/ext/RMagick/rmfill.c +720 -0
  341. data/ext/RMagick/rmilist.c +1270 -0
  342. data/ext/RMagick/rmimage.c +15427 -0
  343. data/ext/RMagick/rminfo.c +2590 -0
  344. data/ext/RMagick/rmmain.c +1741 -0
  345. data/ext/RMagick/rmmontage.c +519 -0
  346. data/ext/RMagick/rmpixel.c +1114 -0
  347. data/ext/RMagick/rmstruct.c +1124 -0
  348. data/ext/RMagick/rmutil.c +1754 -0
  349. data/lib/rmagick.rb +1 -0
  350. data/lib/rmagick/version.rb +6 -0
  351. data/lib/rmagick_internal.rb +1947 -0
  352. data/lib/rvg/clippath.rb +45 -0
  353. data/lib/rvg/container.rb +122 -0
  354. data/lib/rvg/deep_equal.rb +52 -0
  355. data/lib/rvg/describable.rb +47 -0
  356. data/lib/rvg/embellishable.rb +391 -0
  357. data/lib/rvg/misc.rb +723 -0
  358. data/lib/rvg/paint.rb +50 -0
  359. data/lib/rvg/pathdata.rb +126 -0
  360. data/lib/rvg/rvg.rb +283 -0
  361. data/lib/rvg/stretchable.rb +165 -0
  362. data/lib/rvg/stylable.rb +116 -0
  363. data/lib/rvg/text.rb +172 -0
  364. data/lib/rvg/transformable.rb +126 -0
  365. data/lib/rvg/units.rb +63 -0
  366. data/rmagick.gemspec +46 -0
  367. data/spec/rmagick/ImageList1_spec.rb +24 -0
  368. data/spec/rmagick/draw_spec.rb +156 -0
  369. data/spec/rmagick/image/blue_shift_spec.rb +16 -0
  370. data/spec/rmagick/image/composite_spec.rb +140 -0
  371. data/spec/rmagick/image/constitute_spec.rb +15 -0
  372. data/spec/rmagick/image/dispatch_spec.rb +18 -0
  373. data/spec/rmagick/image/from_blob_spec.rb +14 -0
  374. data/spec/rmagick/image/ping_spec.rb +14 -0
  375. data/spec/rmagick/image/properties_spec.rb +29 -0
  376. data/spec/spec_helper.rb +4 -0
  377. data/test/Image1.rb +565 -0
  378. data/test/Image2.rb +1304 -0
  379. data/test/Image3.rb +1030 -0
  380. data/test/ImageList1.rb +806 -0
  381. data/test/ImageList2.rb +385 -0
  382. data/test/Image_attributes.rb +697 -0
  383. data/test/Import_Export.rb +121 -0
  384. data/test/Info.rb +345 -0
  385. data/test/Magick.rb +321 -0
  386. data/test/Pixel.rb +116 -0
  387. data/test/Preview.rb +57 -0
  388. data/test/cmyk.icm +0 -0
  389. data/test/srgb.icm +0 -0
  390. data/test/test_all_basic.rb +38 -0
  391. data/test/tmpnam_test.rb +50 -0
  392. data/wercker.yml +10 -0
  393. metadata +509 -0
@@ -0,0 +1,1741 @@
1
+ /**************************************************************************//**
2
+ * Contains all module, class, method declarations. Defines all constants.
3
+ * Contains Magick module methods.
4
+ *
5
+ * Copyright © 2002 - 2009 by Timothy P. Hunter
6
+ *
7
+ * Changes since Nov. 2009 copyright © by Benjamin Thomas and Omer Bar-or
8
+ *
9
+ * @file rmmain.c
10
+ * @version $Id: rmmain.c,v 1.303 2009/12/20 02:33:33 baror Exp $
11
+ * @author Tim Hunter
12
+ ******************************************************************************/
13
+
14
+ #define MAIN // Define external variables
15
+ #include "rmagick.h"
16
+ #include "magick/version.h"
17
+
18
+ /*----------------------------------------------------------------------------\
19
+ | External declarations
20
+ \----------------------------------------------------------------------------*/
21
+ void Init_RMagick(void);
22
+
23
+ static void test_Magick_version(void);
24
+ static void version_constants(void);
25
+ static void features_constant(void);
26
+
27
+
28
+
29
+
30
+ /*
31
+ * Handle transferring ImageMagick memory allocations/frees to Ruby.
32
+ * These functions have the same signature as the equivalent C functions.
33
+ */
34
+ #if defined(HAVE_SETMAGICKMEMORYMETHODS)
35
+ /**
36
+ * Allocate memory.
37
+ *
38
+ * No Ruby usage (internal function)
39
+ *
40
+ * @param size the size of memory to allocate
41
+ * @return pointer to a block of memory
42
+ */
43
+ static void *rm_malloc(size_t size)
44
+ {
45
+ void *p;
46
+ // int old_state;
47
+
48
+ // old_state = rb_gc_disable();
49
+ p = xmalloc((long)size);
50
+ // if (!RTEST(old_state))
51
+ // {
52
+ // rb_gc_enable();
53
+ // }
54
+
55
+ return p;
56
+ }
57
+
58
+
59
+
60
+
61
+ /**
62
+ * Reallocate memory.
63
+ *
64
+ * No Ruby usage (internal function)
65
+ *
66
+ * @param ptr pointer to the existing block of memory
67
+ * @param size the new size of memory to allocate
68
+ * @return pointer to a block of memory
69
+ */
70
+ static void *rm_realloc(void *ptr, size_t size)
71
+ {
72
+ void *p;
73
+ // int old_state;
74
+
75
+ // old_state = rb_gc_disable();
76
+ p = xrealloc(ptr, (long)size);
77
+ // if (!RTEST(old_state))
78
+ // {
79
+ // rb_gc_enable();
80
+ // }
81
+
82
+ return p;
83
+ }
84
+
85
+
86
+
87
+
88
+ /**
89
+ * Free memory.
90
+ *
91
+ * No Ruby usage (internal function)
92
+ *
93
+ * @param ptr pointer to the existing block of memory
94
+ */
95
+ static void rm_free(void *ptr)
96
+ {
97
+ xfree(ptr);
98
+ }
99
+
100
+
101
+ /**
102
+ * Use managed memory.
103
+ *
104
+ * No Ruby usage (internal function)
105
+ */
106
+ static void set_managed_memory(void)
107
+ {
108
+ ID enable_mm = rb_intern("RMAGICK_ENABLE_MANAGED_MEMORY");
109
+
110
+ if (RTEST(rb_const_defined(rb_cObject, enable_mm)) && RTEST(rb_const_get(rb_cObject, enable_mm)))
111
+ {
112
+ rb_warning("RMagick: %s", "managed memory enabled. This is an experimental feature.");
113
+ SetMagickMemoryMethods(rm_malloc, rm_realloc, rm_free);
114
+ rb_define_const(Module_Magick, "MANAGED_MEMORY", Qtrue);
115
+ }
116
+ else
117
+ {
118
+ rb_define_const(Module_Magick, "MANAGED_MEMORY", Qfalse);
119
+ }
120
+ }
121
+ #endif
122
+
123
+
124
+
125
+
126
+ /**
127
+ * Define the classes and constants.
128
+ *
129
+ * No Ruby usage (internal function)
130
+ */
131
+ void
132
+ Init_RMagick2(void)
133
+ {
134
+ VALUE observable;
135
+
136
+ MagickCoreGenesis("RMagick", MagickFalse);
137
+
138
+ test_Magick_version();
139
+
140
+ Module_Magick = rb_define_module("Magick");
141
+
142
+ #if defined(HAVE_SETMAGICKMEMORYMETHODS)
143
+ set_managed_memory();
144
+ #else
145
+ rb_define_const(Module_Magick, "MANAGED_MEMORY", Qfalse);
146
+ #endif
147
+
148
+ /*-----------------------------------------------------------------------*/
149
+ /* Create IDs for frequently used methods, etc. */
150
+ /*-----------------------------------------------------------------------*/
151
+
152
+ rm_ID_trace_proc = rb_intern("@trace_proc");
153
+ rm_ID_call = rb_intern("call");
154
+ rm_ID_changed = rb_intern("changed");
155
+ rm_ID_cur_image = rb_intern("cur_image");
156
+ rm_ID_dup = rb_intern("dup");
157
+ rm_ID_fill = rb_intern("fill");
158
+ rm_ID_flag = rb_intern("flag");
159
+ rm_ID_from_s = rb_intern("from_s");
160
+ rm_ID_Geometry = rb_intern("Geometry");
161
+ rm_ID_GeometryValue = rb_intern("GeometryValue");
162
+ rm_ID_has_key_q = rb_intern("has_key?");
163
+ rm_ID_height = rb_intern("height");
164
+ rm_ID_initialize_copy = rb_intern("initialize_copy");
165
+ rm_ID_length = rb_intern("length");
166
+ rm_ID_notify_observers = rb_intern("notify_observers");
167
+ rm_ID_new = rb_intern("new");
168
+ rm_ID_push = rb_intern("push");
169
+ rm_ID_spaceship = rb_intern("<=>");
170
+ rm_ID_to_i = rb_intern("to_i");
171
+ rm_ID_to_s = rb_intern("to_s");
172
+ rm_ID_values = rb_intern("values");
173
+ rm_ID_width = rb_intern("width");
174
+ rm_ID_x = rb_intern("x");
175
+ rm_ID_y = rb_intern("y");
176
+
177
+ /*-----------------------------------------------------------------------*/
178
+ /* Module Magick methods */
179
+ /*-----------------------------------------------------------------------*/
180
+
181
+ rb_define_module_function(Module_Magick, "colors", Magick_colors, 0);
182
+ rb_define_module_function(Module_Magick, "fonts", Magick_fonts, 0);
183
+ rb_define_module_function(Module_Magick, "init_formats", Magick_init_formats, 0);
184
+ rb_define_module_function(Module_Magick, "limit_resource", Magick_limit_resource, -1);
185
+ rb_define_module_function(Module_Magick, "set_cache_threshold", Magick_set_cache_threshold, 1);
186
+ rb_define_module_function(Module_Magick, "set_log_event_mask", Magick_set_log_event_mask, -1);
187
+ rb_define_module_function(Module_Magick, "set_log_format", Magick_set_log_format, 1);
188
+
189
+ /*-----------------------------------------------------------------------*/
190
+ /* Class Magick::Image methods */
191
+ /*-----------------------------------------------------------------------*/
192
+
193
+ Class_Image = rb_define_class_under(Module_Magick, "Image", rb_cObject);
194
+
195
+ // Define an alias for Object#display before we override it
196
+ rb_define_alias(Class_Image, "__display__", "display");
197
+
198
+ rb_define_alloc_func(Class_Image, Image_alloc);
199
+ rb_define_method(Class_Image, "initialize", Image_initialize, -1);
200
+
201
+ rb_define_singleton_method(Class_Image, "combine", Image_combine, -1);
202
+ rb_define_singleton_method(Class_Image, "constitute", Image_constitute, 4);
203
+ rb_define_singleton_method(Class_Image, "_load", Image__load, 1);
204
+ rb_define_singleton_method(Class_Image, "capture", Image_capture, -1);
205
+ rb_define_singleton_method(Class_Image, "ping", Image_ping, 1);
206
+ rb_define_singleton_method(Class_Image, "read", Image_read, 1);
207
+ rb_define_singleton_method(Class_Image, "read_inline", Image_read_inline, 1);
208
+ rb_define_singleton_method(Class_Image, "from_blob", Image_from_blob, 1);
209
+
210
+ DCL_ATTR_WRITER(Image, alpha)
211
+ DCL_ATTR_ACCESSOR(Image, background_color)
212
+ DCL_ATTR_READER(Image, base_columns)
213
+ DCL_ATTR_READER(Image, base_filename)
214
+ DCL_ATTR_READER(Image, base_rows)
215
+ DCL_ATTR_ACCESSOR(Image, bias)
216
+ DCL_ATTR_ACCESSOR(Image, black_point_compensation)
217
+ DCL_ATTR_ACCESSOR(Image, blur)
218
+ DCL_ATTR_ACCESSOR(Image, border_color)
219
+ DCL_ATTR_READER(Image, bounding_box)
220
+ DCL_ATTR_ACCESSOR(Image, chromaticity)
221
+ DCL_ATTR_ACCESSOR(Image, color_profile)
222
+ DCL_ATTR_READER(Image, colors)
223
+ DCL_ATTR_ACCESSOR(Image, colorspace)
224
+ DCL_ATTR_READER(Image, columns)
225
+ DCL_ATTR_ACCESSOR(Image, compose)
226
+ DCL_ATTR_ACCESSOR(Image, compression)
227
+ DCL_ATTR_ACCESSOR(Image, delay)
228
+ DCL_ATTR_ACCESSOR(Image, density)
229
+ DCL_ATTR_READER(Image, depth)
230
+ DCL_ATTR_READER(Image, directory)
231
+ DCL_ATTR_ACCESSOR(Image, dispose)
232
+ DCL_ATTR_ACCESSOR(Image, endian)
233
+ DCL_ATTR_ACCESSOR(Image, extract_info)
234
+ DCL_ATTR_READER(Image, filename)
235
+ DCL_ATTR_READER(Image, filesize)
236
+ DCL_ATTR_ACCESSOR(Image, filter)
237
+ DCL_ATTR_ACCESSOR(Image, format)
238
+ DCL_ATTR_ACCESSOR(Image, fuzz)
239
+ DCL_ATTR_ACCESSOR(Image, gamma)
240
+ DCL_ATTR_ACCESSOR(Image, geometry)
241
+ DCL_ATTR_ACCESSOR(Image, gravity)
242
+ DCL_ATTR_ACCESSOR(Image, image_type)
243
+ DCL_ATTR_ACCESSOR(Image, interlace)
244
+ DCL_ATTR_ACCESSOR(Image, iptc_profile)
245
+ DCL_ATTR_ACCESSOR(Image, iterations) // do not document! Only used by Image#iterations=
246
+ DCL_ATTR_WRITER(Image, mask)
247
+ DCL_ATTR_ACCESSOR(Image, matte)
248
+ DCL_ATTR_ACCESSOR(Image, matte_color)
249
+ DCL_ATTR_READER(Image, mean_error_per_pixel)
250
+ DCL_ATTR_READER(Image, mime_type)
251
+ DCL_ATTR_WRITER(Image, monitor)
252
+ DCL_ATTR_READER(Image, montage)
253
+ DCL_ATTR_READER(Image, normalized_mean_error)
254
+ DCL_ATTR_READER(Image, normalized_maximum_error)
255
+ DCL_ATTR_READER(Image, number_colors)
256
+ DCL_ATTR_ACCESSOR(Image, offset)
257
+ DCL_ATTR_WRITER(Image, opacity)
258
+ DCL_ATTR_ACCESSOR(Image, orientation)
259
+ DCL_ATTR_ACCESSOR(Image, page)
260
+ DCL_ATTR_ACCESSOR(Image, pixel_interpolation_method)
261
+ DCL_ATTR_READER(Image, quality)
262
+ DCL_ATTR_READER(Image, quantum_depth)
263
+ DCL_ATTR_ACCESSOR(Image, rendering_intent)
264
+ DCL_ATTR_READER(Image, rows)
265
+ DCL_ATTR_READER(Image, scene)
266
+ DCL_ATTR_ACCESSOR(Image, start_loop)
267
+ DCL_ATTR_ACCESSOR(Image, class_type)
268
+ DCL_ATTR_ACCESSOR(Image, ticks_per_second)
269
+ DCL_ATTR_READER(Image, total_colors)
270
+ DCL_ATTR_READER(Image, total_ink_density)
271
+ DCL_ATTR_ACCESSOR(Image, transparent_color)
272
+ DCL_ATTR_ACCESSOR(Image, units)
273
+ DCL_ATTR_ACCESSOR(Image, virtual_pixel_method)
274
+ DCL_ATTR_ACCESSOR(Image, x_resolution)
275
+ DCL_ATTR_ACCESSOR(Image, y_resolution)
276
+
277
+ rb_define_method(Class_Image, "adaptive_blur", Image_adaptive_blur, -1);
278
+ rb_define_method(Class_Image, "adaptive_blur_channel", Image_adaptive_blur_channel, -1);
279
+ rb_define_method(Class_Image, "adaptive_resize", Image_adaptive_resize, -1);
280
+ rb_define_method(Class_Image, "adaptive_sharpen", Image_adaptive_sharpen, -1);
281
+ rb_define_method(Class_Image, "adaptive_sharpen_channel", Image_adaptive_sharpen_channel, -1);
282
+ rb_define_method(Class_Image, "adaptive_threshold", Image_adaptive_threshold, -1);
283
+ rb_define_method(Class_Image, "add_compose_mask", Image_add_compose_mask, 1);
284
+ rb_define_method(Class_Image, "add_noise", Image_add_noise, 1);
285
+ rb_define_method(Class_Image, "add_noise_channel", Image_add_noise_channel, -1);
286
+ rb_define_method(Class_Image, "add_profile", Image_add_profile, 1);
287
+ rb_define_method(Class_Image, "affine_transform", Image_affine_transform, 1);
288
+ rb_define_method(Class_Image, "remap", Image_remap, -1);
289
+ rb_define_method(Class_Image, "alpha", Image_alpha, -1);
290
+ rb_define_method(Class_Image, "alpha?", Image_alpha_q, 0);
291
+ rb_define_method(Class_Image, "[]", Image_aref, 1);
292
+ rb_define_method(Class_Image, "[]=", Image_aset, 2);
293
+ rb_define_method(Class_Image, "auto_gamma_channel", Image_auto_gamma_channel, -1);
294
+ rb_define_method(Class_Image, "auto_level_channel", Image_auto_level_channel, -1);
295
+ rb_define_method(Class_Image, "auto_orient", Image_auto_orient, 0);
296
+ rb_define_method(Class_Image, "auto_orient!", Image_auto_orient_bang, 0);
297
+ rb_define_method(Class_Image, "properties", Image_properties, 0);
298
+ rb_define_method(Class_Image, "bilevel_channel", Image_bilevel_channel, -1);
299
+ rb_define_method(Class_Image, "black_threshold", Image_black_threshold, -1);
300
+ rb_define_method(Class_Image, "blend", Image_blend, -1);
301
+ rb_define_method(Class_Image, "blue_shift", Image_blue_shift, -1);
302
+ rb_define_method(Class_Image, "blur_image", Image_blur_image, -1);
303
+ rb_define_method(Class_Image, "blur_channel", Image_blur_channel, -1);
304
+ rb_define_method(Class_Image, "border", Image_border, 3);
305
+ rb_define_method(Class_Image, "border!", Image_border_bang, 3);
306
+ rb_define_method(Class_Image, "change_geometry", Image_change_geometry, 1);
307
+ rb_define_method(Class_Image, "change_geometry!", Image_change_geometry, 1);
308
+ rb_define_method(Class_Image, "changed?", Image_changed_q, 0);
309
+ rb_define_method(Class_Image, "channel", Image_channel, 1);
310
+ // An alias for compare_channel
311
+ rb_define_method(Class_Image, "channel_compare", Image_compare_channel, -1);
312
+ rb_define_method(Class_Image, "check_destroyed", Image_check_destroyed, 0);
313
+ rb_define_method(Class_Image, "compare_channel", Image_compare_channel, -1);
314
+ rb_define_method(Class_Image, "channel_depth", Image_channel_depth, -1);
315
+ rb_define_method(Class_Image, "channel_extrema", Image_channel_extrema, -1);
316
+ rb_define_method(Class_Image, "channel_mean", Image_channel_mean, -1);
317
+ rb_define_method(Class_Image, "charcoal", Image_charcoal, -1);
318
+ rb_define_method(Class_Image, "chop", Image_chop, 4);
319
+ rb_define_method(Class_Image, "clut_channel", Image_clut_channel, -1);
320
+ rb_define_method(Class_Image, "clone", Image_clone, 0);
321
+ rb_define_method(Class_Image, "color_flood_fill", Image_color_flood_fill, 5);
322
+ rb_define_method(Class_Image, "color_histogram", Image_color_histogram, 0);
323
+ rb_define_method(Class_Image, "colorize", Image_colorize, -1);
324
+ rb_define_method(Class_Image, "colormap", Image_colormap, -1);
325
+ rb_define_method(Class_Image, "composite", Image_composite, -1);
326
+ rb_define_method(Class_Image, "composite!", Image_composite_bang, -1);
327
+ rb_define_method(Class_Image, "composite_affine", Image_composite_affine, 2);
328
+ rb_define_method(Class_Image, "composite_channel", Image_composite_channel, -1);
329
+ rb_define_method(Class_Image, "composite_channel!", Image_composite_channel_bang, -1);
330
+ rb_define_method(Class_Image, "composite_mathematics", Image_composite_mathematics, -1);
331
+ rb_define_method(Class_Image, "composite_tiled", Image_composite_tiled, -1);
332
+ rb_define_method(Class_Image, "composite_tiled!", Image_composite_tiled_bang, -1);
333
+ rb_define_method(Class_Image, "compress_colormap!", Image_compress_colormap_bang, 0);
334
+ rb_define_method(Class_Image, "contrast", Image_contrast, -1);
335
+ rb_define_method(Class_Image, "contrast_stretch_channel", Image_contrast_stretch_channel, -1);
336
+ rb_define_method(Class_Image, "convolve", Image_convolve, 2);
337
+ rb_define_method(Class_Image, "convolve_channel", Image_convolve_channel, -1);
338
+ rb_define_method(Class_Image, "copy", Image_copy, 0);
339
+ rb_define_method(Class_Image, "crop", Image_crop, -1);
340
+ rb_define_method(Class_Image, "crop!", Image_crop_bang, -1);
341
+ rb_define_method(Class_Image, "cycle_colormap", Image_cycle_colormap, 1);
342
+ rb_define_method(Class_Image, "decipher", Image_decipher, 1);
343
+ rb_define_method(Class_Image, "define", Image_define, 2);
344
+ rb_define_method(Class_Image, "deskew", Image_deskew, -1);
345
+ rb_define_method(Class_Image, "delete_compose_mask", Image_delete_compose_mask, 0);
346
+ rb_define_method(Class_Image, "delete_profile", Image_delete_profile, 1);
347
+ rb_define_method(Class_Image, "despeckle", Image_despeckle, 0);
348
+ rb_define_method(Class_Image, "destroy!", Image_destroy_bang, 0);
349
+ rb_define_method(Class_Image, "destroyed?", Image_destroyed_q, 0);
350
+ rb_define_method(Class_Image, "difference", Image_difference, 1);
351
+ rb_define_method(Class_Image, "dispatch", Image_dispatch, -1);
352
+ rb_define_method(Class_Image, "displace", Image_displace, -1);
353
+ rb_define_method(Class_Image, "display", Image_display, 0);
354
+ rb_define_method(Class_Image, "dissolve", Image_dissolve, -1);
355
+ rb_define_method(Class_Image, "distort", Image_distort, -1);
356
+ rb_define_method(Class_Image, "distortion_channel", Image_distortion_channel, -1);
357
+ rb_define_method(Class_Image, "_dump", Image__dump, 1);
358
+ rb_define_method(Class_Image, "dup", Image_dup, 0);
359
+ rb_define_method(Class_Image, "each_profile", Image_each_profile, 0);
360
+ rb_define_method(Class_Image, "edge", Image_edge, -1);
361
+ rb_define_method(Class_Image, "emboss", Image_emboss, -1);
362
+ rb_define_method(Class_Image, "encipher", Image_encipher, 1);
363
+ rb_define_method(Class_Image, "enhance", Image_enhance, 0);
364
+ rb_define_method(Class_Image, "equalize", Image_equalize, 0);
365
+ rb_define_method(Class_Image, "equalize_channel", Image_equalize_channel, -1);
366
+ rb_define_method(Class_Image, "erase!", Image_erase_bang, 0);
367
+ rb_define_method(Class_Image, "excerpt", Image_excerpt, 4);
368
+ rb_define_method(Class_Image, "excerpt!", Image_excerpt_bang, 4);
369
+ rb_define_method(Class_Image, "export_pixels", Image_export_pixels, -1);
370
+ rb_define_method(Class_Image, "export_pixels_to_str", Image_export_pixels_to_str, -1);
371
+ rb_define_method(Class_Image, "extent", Image_extent, -1);
372
+ rb_define_method(Class_Image, "find_similar_region", Image_find_similar_region, -1);
373
+ rb_define_method(Class_Image, "flip", Image_flip, 0);
374
+ rb_define_method(Class_Image, "flip!", Image_flip_bang, 0);
375
+ rb_define_method(Class_Image, "flop", Image_flop, 0);
376
+ rb_define_method(Class_Image, "flop!", Image_flop_bang, 0);
377
+ rb_define_method(Class_Image, "frame", Image_frame, -1);
378
+ rb_define_method(Class_Image, "function_channel", Image_function_channel, -1);
379
+ rb_define_method(Class_Image, "gamma_channel", Image_gamma_channel, -1);
380
+ rb_define_method(Class_Image, "gamma_correct", Image_gamma_correct, -1);
381
+ rb_define_method(Class_Image, "gaussian_blur", Image_gaussian_blur, -1);
382
+ rb_define_method(Class_Image, "gaussian_blur_channel", Image_gaussian_blur_channel, -1);
383
+ rb_define_method(Class_Image, "get_pixels", Image_get_pixels, 4);
384
+ rb_define_method(Class_Image, "gray?", Image_gray_q, 0);
385
+ rb_define_method(Class_Image, "grey?", Image_gray_q, 0);
386
+ rb_define_method(Class_Image, "histogram?", Image_histogram_q, 0);
387
+ rb_define_method(Class_Image, "implode", Image_implode, -1);
388
+ rb_define_method(Class_Image, "import_pixels", Image_import_pixels, -1);
389
+ rb_define_method(Class_Image, "initialize_copy", Image_init_copy, 1);
390
+ rb_define_method(Class_Image, "inspect", Image_inspect, 0);
391
+ rb_define_method(Class_Image, "level2", Image_level2, -1);
392
+ rb_define_method(Class_Image, "level_channel", Image_level_channel, -1);
393
+ rb_define_method(Class_Image, "level_colors", Image_level_colors, -1);
394
+ rb_define_method(Class_Image, "levelize_channel", Image_levelize_channel, -1);
395
+ rb_define_method(Class_Image, "linear_stretch", Image_linear_stretch, -1);
396
+ rb_define_method(Class_Image, "liquid_rescale", Image_liquid_rescale, -1);
397
+ rb_define_method(Class_Image, "magnify", Image_magnify, 0);
398
+ rb_define_method(Class_Image, "magnify!", Image_magnify_bang, 0);
399
+ rb_define_method(Class_Image, "map", Image_map, -1);
400
+ rb_define_method(Class_Image, "marshal_dump", Image_marshal_dump, 0);
401
+ rb_define_method(Class_Image, "marshal_load", Image_marshal_load, 1);
402
+ rb_define_method(Class_Image, "mask", Image_mask, -1);
403
+ rb_define_method(Class_Image, "matte_flood_fill", Image_matte_flood_fill, 5);
404
+ rb_define_method(Class_Image, "median_filter", Image_median_filter, -1);
405
+ rb_define_method(Class_Image, "minify", Image_minify, 0);
406
+ rb_define_method(Class_Image, "minify!", Image_minify_bang, 0);
407
+ rb_define_method(Class_Image, "modulate", Image_modulate, -1);
408
+ rb_define_method(Class_Image, "monochrome?", Image_monochrome_q, 0);
409
+ rb_define_method(Class_Image, "motion_blur", Image_motion_blur, -1);
410
+ rb_define_method(Class_Image, "negate", Image_negate, -1);
411
+ rb_define_method(Class_Image, "negate_channel", Image_negate_channel, -1);
412
+ rb_define_method(Class_Image, "normalize", Image_normalize, 0);
413
+ rb_define_method(Class_Image, "normalize_channel", Image_normalize_channel, -1);
414
+ rb_define_method(Class_Image, "oil_paint", Image_oil_paint, -1);
415
+ rb_define_method(Class_Image, "opaque", Image_opaque, 2);
416
+ rb_define_method(Class_Image, "opaque_channel", Image_opaque_channel, -1);
417
+ rb_define_method(Class_Image, "opaque?", Image_opaque_q, 0);
418
+ rb_define_method(Class_Image, "ordered_dither", Image_ordered_dither, -1);
419
+ rb_define_method(Class_Image, "paint_transparent", Image_paint_transparent, -1);
420
+ rb_define_method(Class_Image, "palette?", Image_palette_q, 0);
421
+ rb_define_method(Class_Image, "pixel_color", Image_pixel_color, -1);
422
+ rb_define_method(Class_Image, "polaroid", Image_polaroid, -1);
423
+ rb_define_method(Class_Image, "posterize", Image_posterize, -1);
424
+ // rb_define_method(Class_Image, "plasma", Image_plasma, 6);
425
+ rb_define_method(Class_Image, "preview", Image_preview, 1);
426
+ rb_define_method(Class_Image, "profile!", Image_profile_bang, 2);
427
+ rb_define_method(Class_Image, "quantize", Image_quantize, -1);
428
+ rb_define_method(Class_Image, "quantum_operator", Image_quantum_operator, -1);
429
+ rb_define_method(Class_Image, "radial_blur", Image_radial_blur, 1);
430
+ rb_define_method(Class_Image, "radial_blur_channel", Image_radial_blur_channel, -1);
431
+ rb_define_method(Class_Image, "raise", Image_raise, -1);
432
+ rb_define_method(Class_Image, "random_threshold_channel", Image_random_threshold_channel, -1);
433
+ rb_define_method(Class_Image, "recolor", Image_recolor, 1);
434
+ rb_define_method(Class_Image, "reduce_noise", Image_reduce_noise, 1);
435
+ rb_define_method(Class_Image, "resample", Image_resample, -1);
436
+ rb_define_method(Class_Image, "resample!", Image_resample_bang, -1);
437
+ rb_define_method(Class_Image, "resize", Image_resize, -1);
438
+ rb_define_method(Class_Image, "resize!", Image_resize_bang, -1);
439
+ rb_define_method(Class_Image, "roll", Image_roll, 2);
440
+ rb_define_method(Class_Image, "rotate", Image_rotate, -1);
441
+ rb_define_method(Class_Image, "rotate!", Image_rotate_bang, -1);
442
+ rb_define_method(Class_Image, "sample", Image_sample, -1);
443
+ rb_define_method(Class_Image, "sample!", Image_sample_bang, -1);
444
+ rb_define_method(Class_Image, "scale", Image_scale, -1);
445
+ rb_define_method(Class_Image, "scale!", Image_scale_bang, -1);
446
+ rb_define_method(Class_Image, "segment", Image_segment, -1);
447
+ rb_define_method(Class_Image, "selective_blur_channel", Image_selective_blur_channel, -1);
448
+ rb_define_method(Class_Image, "separate", Image_separate, -1);
449
+ rb_define_method(Class_Image, "sepiatone", Image_sepiatone, -1);
450
+ rb_define_method(Class_Image, "set_channel_depth", Image_set_channel_depth, 2);
451
+ rb_define_method(Class_Image, "shade", Image_shade, -1);
452
+ rb_define_method(Class_Image, "shadow", Image_shadow, -1);
453
+ rb_define_method(Class_Image, "sharpen", Image_sharpen, -1);
454
+ rb_define_method(Class_Image, "sharpen_channel", Image_sharpen_channel, -1);
455
+ rb_define_method(Class_Image, "shave", Image_shave, 2);
456
+ rb_define_method(Class_Image, "shave!", Image_shave_bang, 2);
457
+ rb_define_method(Class_Image, "shear", Image_shear, 2);
458
+ rb_define_method(Class_Image, "sigmoidal_contrast_channel", Image_sigmoidal_contrast_channel, -1);
459
+ rb_define_method(Class_Image, "signature", Image_signature, 0);
460
+ rb_define_method(Class_Image, "sketch", Image_sketch, -1);
461
+ rb_define_method(Class_Image, "solarize", Image_solarize, -1);
462
+ rb_define_method(Class_Image, "<=>", Image_spaceship, 1);
463
+ rb_define_method(Class_Image, "sparse_color", Image_sparse_color, -1);
464
+ rb_define_method(Class_Image, "splice", Image_splice, -1);
465
+ rb_define_method(Class_Image, "spread", Image_spread, -1);
466
+ rb_define_method(Class_Image, "stegano", Image_stegano, 2);
467
+ rb_define_method(Class_Image, "stereo", Image_stereo, 1);
468
+ rb_define_method(Class_Image, "strip!", Image_strip_bang, 0);
469
+ rb_define_method(Class_Image, "store_pixels", Image_store_pixels, 5);
470
+ rb_define_method(Class_Image, "swirl", Image_swirl, 1);
471
+ rb_define_method(Class_Image, "sync_profiles", Image_sync_profiles, 0);
472
+ rb_define_method(Class_Image, "texture_flood_fill", Image_texture_flood_fill, 5);
473
+ rb_define_method(Class_Image, "threshold", Image_threshold, 1);
474
+ rb_define_method(Class_Image, "thumbnail", Image_thumbnail, -1);
475
+ rb_define_method(Class_Image, "thumbnail!", Image_thumbnail_bang, -1);
476
+ rb_define_method(Class_Image, "tint", Image_tint, -1);
477
+ rb_define_method(Class_Image, "to_color", Image_to_color, 1);
478
+ rb_define_method(Class_Image, "to_blob", Image_to_blob, 0);
479
+ rb_define_method(Class_Image, "transparent", Image_transparent, -1);
480
+ rb_define_method(Class_Image, "transparent_chroma", Image_transparent_chroma, -1);
481
+ rb_define_method(Class_Image, "transpose", Image_transpose, 0);
482
+ rb_define_method(Class_Image, "transpose!", Image_transpose_bang, 0);
483
+ rb_define_method(Class_Image, "transverse", Image_transverse, 0);
484
+ rb_define_method(Class_Image, "transverse!", Image_transverse_bang, 0);
485
+ rb_define_method(Class_Image, "trim", Image_trim, -1);
486
+ rb_define_method(Class_Image, "trim!", Image_trim_bang, -1);
487
+ rb_define_method(Class_Image, "undefine", Image_undefine, 1);
488
+ rb_define_method(Class_Image, "unique_colors", Image_unique_colors, 0);
489
+ rb_define_method(Class_Image, "unsharp_mask", Image_unsharp_mask, -1);
490
+ rb_define_method(Class_Image, "unsharp_mask_channel", Image_unsharp_mask_channel, -1);
491
+ rb_define_method(Class_Image, "vignette", Image_vignette, -1);
492
+ rb_define_method(Class_Image, "watermark", Image_watermark, -1);
493
+ rb_define_method(Class_Image, "wave", Image_wave, -1);
494
+ rb_define_method(Class_Image, "wet_floor", Image_wet_floor, -1);
495
+ rb_define_method(Class_Image, "white_threshold", Image_white_threshold, -1);
496
+ rb_define_method(Class_Image, "write", Image_write, 1);
497
+
498
+ /*-----------------------------------------------------------------------*/
499
+ /* Class Magick::ImageList methods (see also RMagick.rb) */
500
+ /*-----------------------------------------------------------------------*/
501
+
502
+ Class_ImageList = rb_define_class_under(Module_Magick, "ImageList", rb_cObject);
503
+
504
+ // Define an alias for Object#display before we override it
505
+ rb_define_alias(Class_ImageList, "__display__", "display");
506
+ rb_define_method(Class_ImageList, "remap", ImageList_remap, -1);
507
+ rb_define_method(Class_ImageList, "animate", ImageList_animate, -1);
508
+ rb_define_method(Class_ImageList, "append", ImageList_append, 1);
509
+ rb_define_method(Class_ImageList, "average", ImageList_average, 0);
510
+ rb_define_method(Class_ImageList, "coalesce", ImageList_coalesce, 0);
511
+ rb_define_method(Class_ImageList, "composite_layers", ImageList_composite_layers, -1);
512
+ rb_define_method(Class_ImageList, "deconstruct", ImageList_deconstruct, 0);
513
+ rb_define_method(Class_ImageList, "display", ImageList_display, 0);
514
+ rb_define_method(Class_ImageList, "flatten_images", ImageList_flatten_images, 0);
515
+ rb_define_method(Class_ImageList, "fx", ImageList_fx, -1);
516
+ rb_define_method(Class_ImageList, "map", ImageList_map, -1);
517
+ rb_define_method(Class_ImageList, "montage", ImageList_montage, 0);
518
+ rb_define_method(Class_ImageList, "morph", ImageList_morph, 1);
519
+ rb_define_method(Class_ImageList, "mosaic", ImageList_mosaic, 0);
520
+ rb_define_method(Class_ImageList, "optimize_layers", ImageList_optimize_layers, 1);
521
+ rb_define_method(Class_ImageList, "quantize", ImageList_quantize, -1);
522
+ rb_define_method(Class_ImageList, "to_blob", ImageList_to_blob, 0);
523
+ rb_define_method(Class_ImageList, "write", ImageList_write, 1);
524
+
525
+ /*-----------------------------------------------------------------------*/
526
+ /* Class Magick::Draw methods */
527
+ /*-----------------------------------------------------------------------*/
528
+
529
+ Class_Draw = rb_define_class_under(Module_Magick, "Draw", rb_cObject);
530
+ rb_define_alloc_func(Class_Draw, Draw_alloc);
531
+
532
+ DCL_ATTR_WRITER(Draw, affine)
533
+ DCL_ATTR_WRITER(Draw, align)
534
+ DCL_ATTR_WRITER(Draw, decorate)
535
+ DCL_ATTR_WRITER(Draw, density)
536
+ DCL_ATTR_WRITER(Draw, encoding)
537
+ DCL_ATTR_WRITER(Draw, fill)
538
+ DCL_ATTR_WRITER(Draw, fill_pattern)
539
+ DCL_ATTR_WRITER(Draw, font)
540
+ DCL_ATTR_WRITER(Draw, font_family)
541
+ DCL_ATTR_WRITER(Draw, font_stretch)
542
+ DCL_ATTR_WRITER(Draw, font_style)
543
+ DCL_ATTR_WRITER(Draw, font_weight)
544
+ DCL_ATTR_WRITER(Draw, gravity)
545
+ DCL_ATTR_WRITER(Draw, interline_spacing)
546
+ DCL_ATTR_WRITER(Draw, interword_spacing)
547
+ DCL_ATTR_WRITER(Draw, kerning)
548
+ DCL_ATTR_WRITER(Draw, pointsize)
549
+ DCL_ATTR_WRITER(Draw, rotation)
550
+ DCL_ATTR_WRITER(Draw, stroke)
551
+ DCL_ATTR_WRITER(Draw, stroke_pattern)
552
+ DCL_ATTR_WRITER(Draw, stroke_width)
553
+ DCL_ATTR_WRITER(Draw, text_antialias)
554
+ DCL_ATTR_WRITER(Draw, tile)
555
+ DCL_ATTR_WRITER(Draw, undercolor)
556
+
557
+ rb_define_method(Class_Draw, "annotate", Draw_annotate, 6);
558
+ rb_define_method(Class_Draw, "clone", Draw_clone, 0);
559
+ rb_define_method(Class_Draw, "composite", Draw_composite, -1);
560
+ rb_define_method(Class_Draw, "draw", Draw_draw, 1);
561
+ rb_define_method(Class_Draw, "dup", Draw_dup, 0);
562
+ rb_define_method(Class_Draw, "get_type_metrics", Draw_get_type_metrics, -1);
563
+ rb_define_method(Class_Draw, "get_multiline_type_metrics", Draw_get_multiline_type_metrics, -1);
564
+ rb_define_method(Class_Draw, "initialize", Draw_initialize, 0);
565
+ rb_define_method(Class_Draw, "initialize_copy", Draw_init_copy, 1);
566
+ rb_define_method(Class_Draw, "inspect", Draw_inspect, 0);
567
+ rb_define_method(Class_Draw, "marshal_dump", Draw_marshal_dump, 0);
568
+ rb_define_method(Class_Draw, "marshal_load", Draw_marshal_load, 1);
569
+ rb_define_method(Class_Draw, "primitive", Draw_primitive, 1);
570
+
571
+ /*-----------------------------------------------------------------------*/
572
+ /* Class Magick::DrawOptions is identical to Magick::Draw but with */
573
+ /* only the attribute writer methods. This is the object that is passed */
574
+ /* to the block associated with the Draw.new method call. */
575
+ /*-----------------------------------------------------------------------*/
576
+
577
+ Class_DrawOptions = rb_define_class_under(Class_Image, "DrawOptions", rb_cObject);
578
+
579
+ rb_define_alloc_func(Class_DrawOptions, DrawOptions_alloc);
580
+
581
+ rb_define_method(Class_DrawOptions, "initialize", DrawOptions_initialize, 0);
582
+
583
+ SHARE_ATTR_WRITER(DrawOptions, Draw, affine)
584
+ SHARE_ATTR_WRITER(DrawOptions, Draw, align)
585
+ SHARE_ATTR_WRITER(DrawOptions, Draw, decorate)
586
+ SHARE_ATTR_WRITER(DrawOptions, Draw, density)
587
+ SHARE_ATTR_WRITER(DrawOptions, Draw, encoding)
588
+ SHARE_ATTR_WRITER(DrawOptions, Draw, fill)
589
+ SHARE_ATTR_WRITER(DrawOptions, Draw, fill_pattern)
590
+ SHARE_ATTR_WRITER(DrawOptions, Draw, font)
591
+ SHARE_ATTR_WRITER(DrawOptions, Draw, font_family)
592
+ SHARE_ATTR_WRITER(DrawOptions, Draw, font_stretch)
593
+ SHARE_ATTR_WRITER(DrawOptions, Draw, font_style)
594
+ SHARE_ATTR_WRITER(DrawOptions, Draw, font_weight)
595
+ SHARE_ATTR_WRITER(DrawOptions, Draw, gravity)
596
+ SHARE_ATTR_WRITER(DrawOptions, Draw, pointsize)
597
+ SHARE_ATTR_WRITER(DrawOptions, Draw, rotation)
598
+ SHARE_ATTR_WRITER(DrawOptions, Draw, stroke)
599
+ SHARE_ATTR_WRITER(DrawOptions, Draw, stroke_pattern)
600
+ SHARE_ATTR_WRITER(DrawOptions, Draw, stroke_width)
601
+ SHARE_ATTR_WRITER(DrawOptions, Draw, text_antialias)
602
+ SHARE_ATTR_WRITER(DrawOptions, Draw, tile)
603
+ SHARE_ATTR_WRITER(DrawOptions, Draw, undercolor)
604
+
605
+ /*-----------------------------------------------------------------------*/
606
+ /* Class Magick::Pixel */
607
+ /*-----------------------------------------------------------------------*/
608
+
609
+ Class_Pixel = rb_define_class_under(Module_Magick, "Pixel", rb_cObject);
610
+
611
+ // include Observable in Pixel for Image::View class
612
+ (void) rb_require("observer");
613
+ observable = rb_const_get(rb_cObject, rb_intern("Observable"));
614
+ rb_include_module(Class_Pixel, observable);
615
+
616
+ // include Comparable
617
+ rb_include_module(Class_Pixel, rb_mComparable);
618
+
619
+ // Magick::Pixel has 4 constructors: "new" "from_color", "from_hsla",
620
+ // and the deprecated "from_HSL".
621
+ rb_define_alloc_func(Class_Pixel, Pixel_alloc);
622
+ rb_define_singleton_method(Class_Pixel, "from_color", Pixel_from_color, 1);
623
+ rb_define_singleton_method(Class_Pixel, "from_HSL", Pixel_from_HSL, 1);
624
+ rb_define_singleton_method(Class_Pixel, "from_hsla", Pixel_from_hsla, -1);
625
+
626
+ // Define the RGBA attributes
627
+ DCL_ATTR_ACCESSOR(Pixel, red)
628
+ DCL_ATTR_ACCESSOR(Pixel, green)
629
+ DCL_ATTR_ACCESSOR(Pixel, blue)
630
+ DCL_ATTR_ACCESSOR(Pixel, opacity)
631
+
632
+ // Define the CMYK attributes
633
+ DCL_ATTR_ACCESSOR(Pixel, cyan)
634
+ DCL_ATTR_ACCESSOR(Pixel, magenta)
635
+ DCL_ATTR_ACCESSOR(Pixel, yellow)
636
+ DCL_ATTR_ACCESSOR(Pixel, black)
637
+
638
+
639
+ // Define the instance methods
640
+ rb_define_method(Class_Pixel, "<=>", Pixel_spaceship, 1);
641
+ rb_define_method(Class_Pixel, "===", Pixel_case_eq, 1);
642
+ rb_define_method(Class_Pixel, "eql?", Pixel_eql_q, 1);
643
+ rb_define_method(Class_Pixel, "initialize", Pixel_initialize, -1);
644
+ rb_define_method(Class_Pixel, "initialize_copy", Pixel_init_copy, 1);
645
+ rb_define_method(Class_Pixel, "clone", Pixel_clone, 0);
646
+ rb_define_method(Class_Pixel, "dup", Pixel_dup, 0);
647
+ rb_define_method(Class_Pixel, "fcmp", Pixel_fcmp, -1);
648
+ rb_define_method(Class_Pixel, "hash", Pixel_hash, 0);
649
+ rb_define_method(Class_Pixel, "intensity", Pixel_intensity, 0);
650
+ rb_define_method(Class_Pixel, "marshal_dump", Pixel_marshal_dump, 0);
651
+ rb_define_method(Class_Pixel, "marshal_load", Pixel_marshal_load, 1);
652
+ rb_define_method(Class_Pixel, "to_color", Pixel_to_color, -1);
653
+ rb_define_method(Class_Pixel, "to_HSL", Pixel_to_HSL, 0); // deprecated
654
+ rb_define_method(Class_Pixel, "to_hsla", Pixel_to_hsla, 0);
655
+ rb_define_method(Class_Pixel, "to_s", Pixel_to_s, 0);
656
+
657
+ /*-----------------------------------------------------------------------*/
658
+ /* Class Magick::ImageList::Montage methods */
659
+ /*-----------------------------------------------------------------------*/
660
+
661
+ Class_Montage = rb_define_class_under(Class_ImageList, "Montage", rb_cObject);
662
+
663
+ rb_define_alloc_func(Class_Montage, Montage_alloc);
664
+
665
+ rb_define_method(Class_Montage, "initialize", Montage_initialize, 0);
666
+ rb_define_method(Class_Montage, "freeze", rm_no_freeze, 0);
667
+
668
+ // These accessors supply optional arguments for Magick::ImageList::Montage.new
669
+ DCL_ATTR_WRITER(Montage, background_color)
670
+ DCL_ATTR_WRITER(Montage, border_color)
671
+ DCL_ATTR_WRITER(Montage, border_width)
672
+ DCL_ATTR_WRITER(Montage, compose)
673
+ DCL_ATTR_WRITER(Montage, filename)
674
+ DCL_ATTR_WRITER(Montage, fill)
675
+ DCL_ATTR_WRITER(Montage, font)
676
+ DCL_ATTR_WRITER(Montage, frame)
677
+ DCL_ATTR_WRITER(Montage, geometry)
678
+ DCL_ATTR_WRITER(Montage, gravity)
679
+ DCL_ATTR_WRITER(Montage, matte_color)
680
+ DCL_ATTR_WRITER(Montage, pointsize)
681
+ DCL_ATTR_WRITER(Montage, shadow)
682
+ DCL_ATTR_WRITER(Montage, stroke)
683
+ DCL_ATTR_WRITER(Montage, texture)
684
+ DCL_ATTR_WRITER(Montage, tile)
685
+ DCL_ATTR_WRITER(Montage, title)
686
+
687
+ /*-----------------------------------------------------------------------*/
688
+ /* Class Magick::Image::Info */
689
+ /*-----------------------------------------------------------------------*/
690
+
691
+ Class_Info = rb_define_class_under(Class_Image, "Info", rb_cObject);
692
+
693
+ rb_define_alloc_func(Class_Info, Info_alloc);
694
+
695
+ rb_define_method(Class_Info, "initialize", Info_initialize, 0);
696
+ rb_define_method(Class_Info, "channel", Info_channel, -1);
697
+ rb_define_method(Class_Info, "freeze", rm_no_freeze, 0);
698
+ rb_define_method(Class_Info, "define", Info_define, -1);
699
+ rb_define_method(Class_Info, "[]=", Info_aset, -1);
700
+ rb_define_method(Class_Info, "[]", Info_aref, -1);
701
+ rb_define_method(Class_Info, "undefine", Info_undefine, 2);
702
+
703
+ DCL_ATTR_ACCESSOR(Info, antialias)
704
+ DCL_ATTR_ACCESSOR(Info, attenuate)
705
+ DCL_ATTR_ACCESSOR(Info, authenticate)
706
+ DCL_ATTR_ACCESSOR(Info, background_color)
707
+ DCL_ATTR_ACCESSOR(Info, border_color)
708
+ DCL_ATTR_ACCESSOR(Info, caption)
709
+ DCL_ATTR_ACCESSOR(Info, colorspace)
710
+ DCL_ATTR_ACCESSOR(Info, comment)
711
+ DCL_ATTR_ACCESSOR(Info, compression)
712
+ DCL_ATTR_ACCESSOR(Info, delay)
713
+ DCL_ATTR_ACCESSOR(Info, density)
714
+ DCL_ATTR_ACCESSOR(Info, depth)
715
+ DCL_ATTR_ACCESSOR(Info, dispose)
716
+ DCL_ATTR_ACCESSOR(Info, dither)
717
+ DCL_ATTR_ACCESSOR(Info, endian)
718
+ DCL_ATTR_ACCESSOR(Info, extract)
719
+ DCL_ATTR_ACCESSOR(Info, filename)
720
+ DCL_ATTR_ACCESSOR(Info, fill)
721
+ DCL_ATTR_ACCESSOR(Info, font)
722
+ DCL_ATTR_ACCESSOR(Info, format)
723
+ DCL_ATTR_ACCESSOR(Info, fuzz)
724
+ DCL_ATTR_ACCESSOR(Info, gravity)
725
+ DCL_ATTR_ACCESSOR(Info, group)
726
+ DCL_ATTR_ACCESSOR(Info, image_type)
727
+ DCL_ATTR_ACCESSOR(Info, interlace)
728
+ DCL_ATTR_ACCESSOR(Info, label)
729
+ DCL_ATTR_ACCESSOR(Info, matte_color)
730
+ DCL_ATTR_WRITER(Info, monitor)
731
+ DCL_ATTR_ACCESSOR(Info, monochrome)
732
+ DCL_ATTR_ACCESSOR(Info, number_scenes)
733
+ DCL_ATTR_ACCESSOR(Info, orientation)
734
+ DCL_ATTR_ACCESSOR(Info, origin) // new in 6.3.1
735
+ DCL_ATTR_ACCESSOR(Info, page)
736
+ DCL_ATTR_ACCESSOR(Info, pointsize)
737
+ DCL_ATTR_ACCESSOR(Info, quality)
738
+ DCL_ATTR_ACCESSOR(Info, sampling_factor)
739
+ DCL_ATTR_ACCESSOR(Info, scene)
740
+ DCL_ATTR_ACCESSOR(Info, server_name)
741
+ DCL_ATTR_ACCESSOR(Info, size)
742
+ DCL_ATTR_ACCESSOR(Info, stroke)
743
+ DCL_ATTR_ACCESSOR(Info, stroke_width)
744
+ DCL_ATTR_WRITER(Info, texture)
745
+ DCL_ATTR_ACCESSOR(Info, tile_offset)
746
+ DCL_ATTR_ACCESSOR(Info, transparent_color)
747
+ DCL_ATTR_ACCESSOR(Info, undercolor)
748
+ DCL_ATTR_ACCESSOR(Info, units)
749
+ DCL_ATTR_ACCESSOR(Info, view)
750
+
751
+
752
+ /*-----------------------------------------------------------------------*/
753
+ /* Class Magick::Image::PolaroidOptions */
754
+ /*-----------------------------------------------------------------------*/
755
+
756
+ Class_PolaroidOptions = rb_define_class_under(Class_Image, "PolaroidOptions", rb_cObject);
757
+
758
+ rb_define_alloc_func(Class_PolaroidOptions, PolaroidOptions_alloc);
759
+
760
+ rb_define_method(Class_PolaroidOptions, "initialize", PolaroidOptions_initialize, 0);
761
+
762
+ DCL_ATTR_WRITER(PolaroidOptions, shadow_color)
763
+ DCL_ATTR_WRITER(PolaroidOptions, border_color)
764
+ // The other attribute writer methods are implemented by Draw's functions
765
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, align)
766
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, decorate)
767
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, density)
768
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, encoding)
769
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, fill)
770
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, fill_pattern)
771
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, font)
772
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_family)
773
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_stretch)
774
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_style)
775
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_weight)
776
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, gravity)
777
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, pointsize)
778
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke)
779
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke_pattern)
780
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke_width)
781
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, text_antialias)
782
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, undercolor)
783
+
784
+
785
+ /*-----------------------------------------------------------------------*/
786
+ /* Magick::******Fill classes and methods */
787
+ /*-----------------------------------------------------------------------*/
788
+
789
+ // class Magick::GradientFill
790
+ Class_GradientFill = rb_define_class_under(Module_Magick, "GradientFill", rb_cObject);
791
+
792
+ rb_define_alloc_func(Class_GradientFill, GradientFill_alloc);
793
+
794
+ rb_define_method(Class_GradientFill, "initialize", GradientFill_initialize, 6);
795
+ rb_define_method(Class_GradientFill, "fill", GradientFill_fill, 1);
796
+
797
+ // class Magick::TextureFill
798
+ Class_TextureFill = rb_define_class_under(Module_Magick, "TextureFill", rb_cObject);
799
+
800
+ rb_define_alloc_func(Class_TextureFill, TextureFill_alloc);
801
+
802
+ rb_define_method(Class_TextureFill, "initialize", TextureFill_initialize, 1);
803
+ rb_define_method(Class_TextureFill, "fill", TextureFill_fill, 1);
804
+
805
+ /*-----------------------------------------------------------------------*/
806
+ /* Class Magick::ImageMagickError < StandardError */
807
+ /* Class Magick::FatalImageMagickError < StandardError */
808
+ /*-----------------------------------------------------------------------*/
809
+
810
+ Class_ImageMagickError = rb_define_class_under(Module_Magick, "ImageMagickError", rb_eStandardError);
811
+ rb_define_method(Class_ImageMagickError, "initialize", ImageMagickError_initialize, -1);
812
+ rb_define_attr(Class_ImageMagickError, MAGICK_LOC, True, False);
813
+
814
+ Class_FatalImageMagickError = rb_define_class_under(Module_Magick, "FatalImageMagickError", rb_eStandardError);
815
+
816
+
817
+ /*-----------------------------------------------------------------------*/
818
+ /* Class Magick::DestroyedImageError < StandardError */
819
+ /*-----------------------------------------------------------------------*/
820
+ Class_DestroyedImageError = rb_define_class_under(Module_Magick, "DestroyedImageError", rb_eStandardError);
821
+
822
+
823
+ // Miscellaneous fixed-point constants
824
+ DEF_CONST(QuantumRange);
825
+ DEF_CONST(MAGICKCORE_QUANTUM_DEPTH);
826
+ DEF_CONST(OpaqueOpacity);
827
+ DEF_CONST(TransparentOpacity);
828
+
829
+ version_constants();
830
+ features_constant();
831
+
832
+ /*-----------------------------------------------------------------------*/
833
+ /* Class Magick::Enum */
834
+ /*-----------------------------------------------------------------------*/
835
+
836
+ // includes Comparable
837
+ Class_Enum = rb_define_class_under(Module_Magick, "Enum", rb_cObject);
838
+ rb_include_module(Class_Enum, rb_mComparable);
839
+
840
+ rb_define_alloc_func(Class_Enum, Enum_alloc);
841
+
842
+ rb_define_method(Class_Enum, "initialize", Enum_initialize, 2);
843
+ rb_define_method(Class_Enum, "to_s", Enum_to_s, 0);
844
+ rb_define_method(Class_Enum, "to_i", Enum_to_i, 0);
845
+ rb_define_method(Class_Enum, "<=>", Enum_spaceship, 1);
846
+ rb_define_method(Class_Enum, "===", Enum_case_eq, 1);
847
+
848
+ // AlignType constants
849
+ DEF_ENUM(AlignType)
850
+ ENUMERATOR(UndefinedAlign)
851
+ ENUMERATOR(LeftAlign)
852
+ ENUMERATOR(CenterAlign)
853
+ ENUMERATOR(RightAlign)
854
+ END_ENUM
855
+
856
+ // AlphaChannelType constants
857
+ DEF_ENUM(AlphaChannelType)
858
+ ENUMERATOR(UndefinedAlphaChannel)
859
+ ENUMERATOR(ActivateAlphaChannel)
860
+ ENUMERATOR(DeactivateAlphaChannel)
861
+ ENUMERATOR(ResetAlphaChannel) /* deprecated */
862
+ ENUMERATOR(SetAlphaChannel)
863
+ #if defined(HAVE_ENUM_REMOVEALPHACHANNEL)
864
+ ENUMERATOR(RemoveAlphaChannel)
865
+ #endif
866
+ #if defined(HAVE_ENUM_COPYALPHACHANNEL)
867
+ ENUMERATOR(CopyAlphaChannel)
868
+ ENUMERATOR(ExtractAlphaChannel)
869
+ ENUMERATOR(OpaqueAlphaChannel)
870
+ ENUMERATOR(ShapeAlphaChannel)
871
+ ENUMERATOR(TransparentAlphaChannel)
872
+ #endif
873
+ #if defined(HAVE_ENUM_BACKGROUNDALPHACHANNEL)
874
+ ENUMERATOR(BackgroundAlphaChannel)
875
+ #endif
876
+ END_ENUM
877
+
878
+ // AnchorType constants (for Draw#text_anchor - these are not defined by ImageMagick)
879
+ DEF_ENUM(AnchorType)
880
+ ENUMERATOR(StartAnchor)
881
+ ENUMERATOR(MiddleAnchor)
882
+ ENUMERATOR(EndAnchor)
883
+ END_ENUM
884
+
885
+ // ChannelType constants
886
+ DEF_ENUM(ChannelType)
887
+ ENUMERATOR(UndefinedChannel)
888
+ ENUMERATOR(RedChannel)
889
+ ENUMERATOR(CyanChannel)
890
+ ENUMERATOR(GreenChannel)
891
+ ENUMERATOR(MagentaChannel)
892
+ ENUMERATOR(BlueChannel)
893
+ ENUMERATOR(YellowChannel)
894
+ ENUMERATOR(OpacityChannel)
895
+
896
+
897
+ ENUMERATOR(BlackChannel)
898
+ ENUMERATOR(MatteChannel)
899
+ ENUMERATOR(IndexChannel)
900
+ ENUMERATOR(GrayChannel)
901
+ ENUMERATOR(AllChannels)
902
+
903
+ // Define alternate names for ChannelType enums for Image::Info#channel=
904
+ // AlphaChannel == OpacityChannel
905
+ _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("AlphaChannel")), INT2FIX(OpacityChannel));
906
+ rb_define_const(Module_Magick, "AlphaChannel", _enum);
907
+
908
+ // DefaultChannels
909
+ _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("DefaultChannels")), INT2FIX(0xff & ~OpacityChannel));
910
+ rb_define_const(Module_Magick, "DefaultChannels", _enum);
911
+
912
+ // HueChannel == RedChannel
913
+ _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("HueChannel")), INT2FIX(RedChannel));
914
+ rb_define_const(Module_Magick, "HueChannel", _enum);
915
+
916
+ // LuminosityChannel = BlueChannel
917
+ _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("LuminosityChannel")), INT2FIX(BlueChannel));
918
+ rb_define_const(Module_Magick, "LuminosityChannel", _enum);
919
+
920
+ // SaturationChannel = GreenChannel
921
+ _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("SaturationChannel")), INT2FIX(GreenChannel));
922
+ rb_define_const(Module_Magick, "SaturationChannel", _enum);
923
+
924
+
925
+ END_ENUM
926
+
927
+ // ClassType constants
928
+ DEF_ENUM(ClassType)
929
+ ENUMERATOR(UndefinedClass)
930
+ ENUMERATOR(PseudoClass)
931
+ ENUMERATOR(DirectClass)
932
+ END_ENUM
933
+
934
+ // ColorspaceType constants
935
+ DEF_ENUM(ColorspaceType)
936
+ ENUMERATOR(UndefinedColorspace)
937
+ ENUMERATOR(RGBColorspace)
938
+ ENUMERATOR(GRAYColorspace)
939
+ ENUMERATOR(TransparentColorspace)
940
+ ENUMERATOR(OHTAColorspace)
941
+ ENUMERATOR(XYZColorspace)
942
+ ENUMERATOR(YCbCrColorspace)
943
+ ENUMERATOR(YCCColorspace)
944
+ ENUMERATOR(YIQColorspace)
945
+ ENUMERATOR(YPbPrColorspace)
946
+ ENUMERATOR(YUVColorspace)
947
+ ENUMERATOR(CMYKColorspace)
948
+ rb_define_const(Module_Magick, "SRGBColorspace"
949
+ , rm_enum_new(Class_ColorspaceType
950
+ , ID2SYM(rb_intern("SRGBColorspace"))
951
+ , INT2FIX(sRGBColorspace)));
952
+ ENUMERATOR(HSLColorspace)
953
+ ENUMERATOR(HWBColorspace)
954
+ ENUMERATOR(HSBColorspace)
955
+ ENUMERATOR(LabColorspace)
956
+ ENUMERATOR(Rec601LumaColorspace)
957
+ ENUMERATOR(Rec601YCbCrColorspace)
958
+ ENUMERATOR(Rec709LumaColorspace)
959
+ ENUMERATOR(Rec709YCbCrColorspace)
960
+ ENUMERATOR(LogColorspace)
961
+ ENUMERATOR(CMYColorspace)
962
+ END_ENUM
963
+
964
+ // ComplianceType constants are defined as enums but used as bit flags
965
+ DEF_ENUM(ComplianceType)
966
+ ENUMERATOR(UndefinedCompliance)
967
+
968
+ // AllCompliance is 0xffff, not too useful for us!
969
+ rb_define_const(Module_Magick, "AllCompliance"
970
+ , rm_enum_new(Class_ComplianceType
971
+ , ID2SYM(rb_intern("AllCompliance"))
972
+ , INT2FIX(SVGCompliance|X11Compliance|XPMCompliance)));
973
+
974
+ ENUMERATOR(NoCompliance)
975
+ ENUMERATOR(SVGCompliance)
976
+ ENUMERATOR(X11Compliance)
977
+ ENUMERATOR(XPMCompliance)
978
+ END_ENUM
979
+
980
+ // CompositeOperator constants
981
+ DEF_ENUM(CompositeOperator)
982
+ ENUMERATOR(UndefinedCompositeOp)
983
+ ENUMERATOR(NoCompositeOp)
984
+ ENUMERATOR(AddCompositeOp)
985
+ ENUMERATOR(AtopCompositeOp)
986
+ ENUMERATOR(BlendCompositeOp)
987
+ #if defined(HAVE_ENUM_BLURCOMPOSITEOP)
988
+ ENUMERATOR(BlurCompositeOp)
989
+ #endif
990
+ ENUMERATOR(BumpmapCompositeOp)
991
+ ENUMERATOR(ChangeMaskCompositeOp)
992
+ ENUMERATOR(ClearCompositeOp)
993
+ ENUMERATOR(ColorBurnCompositeOp)
994
+ ENUMERATOR(ColorDodgeCompositeOp)
995
+ ENUMERATOR(ColorizeCompositeOp)
996
+ ENUMERATOR(CopyBlackCompositeOp)
997
+ ENUMERATOR(CopyBlueCompositeOp)
998
+ ENUMERATOR(CopyCompositeOp)
999
+ ENUMERATOR(CopyCyanCompositeOp)
1000
+ ENUMERATOR(CopyGreenCompositeOp)
1001
+ ENUMERATOR(CopyMagentaCompositeOp)
1002
+ ENUMERATOR(CopyOpacityCompositeOp)
1003
+ ENUMERATOR(CopyRedCompositeOp)
1004
+ ENUMERATOR(CopyYellowCompositeOp)
1005
+ ENUMERATOR(DarkenCompositeOp)
1006
+ #if defined(HAVE_ENUM_DISTORTCOMPOSITEOP)
1007
+ ENUMERATOR(DistortCompositeOp)
1008
+ #endif
1009
+ ENUMERATOR(DivideCompositeOp)
1010
+ ENUMERATOR(DstAtopCompositeOp)
1011
+ ENUMERATOR(DstCompositeOp)
1012
+ ENUMERATOR(DstInCompositeOp)
1013
+ ENUMERATOR(DstOutCompositeOp)
1014
+ ENUMERATOR(DstOverCompositeOp)
1015
+ ENUMERATOR(DifferenceCompositeOp)
1016
+ ENUMERATOR(DisplaceCompositeOp)
1017
+ ENUMERATOR(DissolveCompositeOp)
1018
+ ENUMERATOR(ExclusionCompositeOp)
1019
+ ENUMERATOR(HardLightCompositeOp)
1020
+ ENUMERATOR(HueCompositeOp)
1021
+ ENUMERATOR(InCompositeOp)
1022
+ ENUMERATOR(LightenCompositeOp)
1023
+ #if defined(HAVE_ENUM_LINEARBURNCOMPOSITEOP)
1024
+ ENUMERATOR(LinearBurnCompositeOp)
1025
+ #endif
1026
+ #if defined(HAVE_ENUM_LINEARDODGECOMPOSITEOP)
1027
+ ENUMERATOR(LinearDodgeCompositeOp)
1028
+ #endif
1029
+ ENUMERATOR(LinearLightCompositeOp)
1030
+ ENUMERATOR(LuminizeCompositeOp)
1031
+ ENUMERATOR(MinusCompositeOp)
1032
+ ENUMERATOR(ModulateCompositeOp)
1033
+ ENUMERATOR(MultiplyCompositeOp)
1034
+ ENUMERATOR(OutCompositeOp)
1035
+ ENUMERATOR(OverCompositeOp)
1036
+ ENUMERATOR(OverlayCompositeOp)
1037
+ #if defined(HAVE_ENUM_PEGTOPLIGHTCOMPOSITEOP)
1038
+ ENUMERATOR(PegtopLightCompositeOp)
1039
+ #endif
1040
+ #if defined(HAVE_ENUM_PINLIGHTCOMPOSITEOP)
1041
+ ENUMERATOR(PinLightCompositeOp)
1042
+ #endif
1043
+ ENUMERATOR(PlusCompositeOp)
1044
+ ENUMERATOR(ReplaceCompositeOp) // synonym for CopyCompositeOp
1045
+ ENUMERATOR(SaturateCompositeOp)
1046
+ ENUMERATOR(ScreenCompositeOp)
1047
+ ENUMERATOR(SoftLightCompositeOp)
1048
+ ENUMERATOR(SrcAtopCompositeOp)
1049
+ ENUMERATOR(SrcCompositeOp)
1050
+ ENUMERATOR(SrcInCompositeOp)
1051
+ ENUMERATOR(SrcOutCompositeOp)
1052
+ ENUMERATOR(SrcOverCompositeOp)
1053
+ ENUMERATOR(SubtractCompositeOp)
1054
+ ENUMERATOR(ThresholdCompositeOp)
1055
+ #if defined(HAVE_ENUM_VIVIDLIGHTCOMPOSITEOP)
1056
+ ENUMERATOR(VividLightCompositeOp)
1057
+ #endif
1058
+ ENUMERATOR(XorCompositeOp)
1059
+ END_ENUM
1060
+
1061
+ // CompressionType constants
1062
+ DEF_ENUM(CompressionType)
1063
+ ENUMERATOR(UndefinedCompression)
1064
+ ENUMERATOR(NoCompression)
1065
+ #if defined(HAVE_ENUM_B44COMPRESSION)
1066
+ ENUMERATOR(B44Compression)
1067
+ #endif
1068
+ #if defined(HAVE_ENUM_B44ACOMPRESSION)
1069
+ ENUMERATOR(B44ACompression)
1070
+ #endif
1071
+ ENUMERATOR(BZipCompression)
1072
+ #if defined(HAVE_ENUM_DXT1COMPRESSION)
1073
+ ENUMERATOR(DXT1Compression)
1074
+ #endif
1075
+ #if defined(HAVE_ENUM_DXT3COMPRESSION)
1076
+ ENUMERATOR(DXT3Compression)
1077
+ #endif
1078
+ #if defined(HAVE_ENUM_DXT5COMPRESSION)
1079
+ ENUMERATOR(DXT5Compression)
1080
+ #endif
1081
+ ENUMERATOR(FaxCompression)
1082
+ ENUMERATOR(Group4Compression)
1083
+ ENUMERATOR(JPEGCompression)
1084
+ ENUMERATOR(JPEG2000Compression)
1085
+ ENUMERATOR(LosslessJPEGCompression)
1086
+ ENUMERATOR(LZWCompression)
1087
+ #if defined(HAVE_ENUM_PIZCOMPRESSION)
1088
+ ENUMERATOR(PizCompression)
1089
+ #endif
1090
+ #if defined(HAVE_ENUM_PXR24COMPRESSION)
1091
+ ENUMERATOR(Pxr24Compression)
1092
+ #endif
1093
+ ENUMERATOR(RLECompression)
1094
+ ENUMERATOR(ZipCompression)
1095
+ #if defined(HAVE_ENUM_ZIPSCOMPRESSION)
1096
+ ENUMERATOR(ZipSCompression)
1097
+ #endif
1098
+ END_ENUM
1099
+
1100
+ // DecorationType constants
1101
+ DEF_ENUM(DecorationType)
1102
+ ENUMERATOR(NoDecoration)
1103
+ ENUMERATOR(UnderlineDecoration)
1104
+ ENUMERATOR(OverlineDecoration)
1105
+ ENUMERATOR(LineThroughDecoration)
1106
+ END_ENUM
1107
+
1108
+ // DisposeType constants
1109
+ DEF_ENUM(DisposeType)
1110
+ ENUMERATOR(UndefinedDispose)
1111
+ ENUMERATOR(BackgroundDispose)
1112
+ ENUMERATOR(NoneDispose)
1113
+ ENUMERATOR(PreviousDispose)
1114
+ END_ENUM
1115
+
1116
+ // DistortImage "method" argument values
1117
+ DEF_ENUM(DistortImageMethod)
1118
+ ENUMERATOR(UndefinedDistortion)
1119
+ ENUMERATOR(AffineDistortion)
1120
+ ENUMERATOR(AffineProjectionDistortion)
1121
+ ENUMERATOR(ArcDistortion)
1122
+ #if defined(HAVE_ENUM_POLARDISTORTION)
1123
+ ENUMERATOR(PolarDistortion)
1124
+ #endif
1125
+ #if defined(HAVE_ENUM_DEPOLARDISTORTION)
1126
+ ENUMERATOR(DePolarDistortion)
1127
+ #endif
1128
+ #if defined(HAVE_ENUM_BARRELDISTORTION)
1129
+ ENUMERATOR(BarrelDistortion)
1130
+ #endif
1131
+ ENUMERATOR(BilinearDistortion)
1132
+ #if defined(HAVE_ENUM_BILINEARFORWARDDISTORTION)
1133
+ ENUMERATOR(BilinearForwardDistortion)
1134
+ #endif
1135
+ #if defined(HAVE_ENUM_BILINEARREVERSEDISTORTION)
1136
+ ENUMERATOR(BilinearReverseDistortion)
1137
+ #endif
1138
+ ENUMERATOR(PerspectiveDistortion)
1139
+ ENUMERATOR(PerspectiveProjectionDistortion)
1140
+ #if defined(HAVE_ENUM_POLYNOMIALDISTORTION)
1141
+ ENUMERATOR(PolynomialDistortion)
1142
+ #endif
1143
+ ENUMERATOR(ScaleRotateTranslateDistortion)
1144
+ #if defined(HAVE_ENUM_SHEPARDSDISTORTION)
1145
+ ENUMERATOR(ShepardsDistortion)
1146
+ #endif
1147
+ #if defined(HAVE_ENUM_BARRELINVERSEDISTORTION)
1148
+ ENUMERATOR(BarrelInverseDistortion)
1149
+ #endif
1150
+ END_ENUM
1151
+
1152
+ #if defined(HAVE_TYPE_DITHERMETHOD)
1153
+ DEF_ENUM(DitherMethod)
1154
+ ENUMERATOR(UndefinedDitherMethod)
1155
+ #if defined(HAVE_ENUM_NODITHERMETHOD)
1156
+ ENUMERATOR(NoDitherMethod)
1157
+ #endif
1158
+ ENUMERATOR(RiemersmaDitherMethod)
1159
+ ENUMERATOR(FloydSteinbergDitherMethod)
1160
+ END_ENUM
1161
+ #endif
1162
+
1163
+ DEF_ENUM(EndianType)
1164
+ ENUMERATOR(UndefinedEndian)
1165
+ ENUMERATOR(LSBEndian)
1166
+ ENUMERATOR(MSBEndian)
1167
+ END_ENUM
1168
+
1169
+ // FilterTypes constants
1170
+ DEF_ENUM(FilterTypes)
1171
+ ENUMERATOR(UndefinedFilter)
1172
+ ENUMERATOR(PointFilter)
1173
+ ENUMERATOR(BoxFilter)
1174
+ ENUMERATOR(TriangleFilter)
1175
+ ENUMERATOR(HermiteFilter)
1176
+ ENUMERATOR(HanningFilter)
1177
+ ENUMERATOR(HammingFilter)
1178
+ ENUMERATOR(BlackmanFilter)
1179
+ ENUMERATOR(GaussianFilter)
1180
+ ENUMERATOR(QuadraticFilter)
1181
+ ENUMERATOR(CubicFilter)
1182
+ ENUMERATOR(CatromFilter)
1183
+ ENUMERATOR(MitchellFilter)
1184
+ ENUMERATOR(LanczosFilter)
1185
+ ENUMERATOR(BesselFilter)
1186
+ ENUMERATOR(SincFilter)
1187
+ #if defined(HAVE_ENUM_KAISERFILTER)
1188
+ ENUMERATOR(KaiserFilter)
1189
+ #endif
1190
+ #if defined(HAVE_ENUM_WELSHFILTER)
1191
+ ENUMERATOR(WelshFilter)
1192
+ #endif
1193
+ #if defined(HAVE_ENUM_PARZENFILTER)
1194
+ ENUMERATOR(ParzenFilter)
1195
+ #endif
1196
+ #if defined(HAVE_ENUM_LAGRANGEFILTER)
1197
+ ENUMERATOR(LagrangeFilter)
1198
+ #endif
1199
+ #if defined(HAVE_ENUM_BOHMANFILTER)
1200
+ ENUMERATOR(BohmanFilter)
1201
+ #endif
1202
+ #if defined(HAVE_ENUM_BARTLETTFILTER)
1203
+ ENUMERATOR(BartlettFilter)
1204
+ #endif
1205
+ END_ENUM
1206
+
1207
+ // GravityType constants
1208
+ DEF_ENUM(GravityType)
1209
+ ENUMERATOR(UndefinedGravity)
1210
+ ENUMERATOR(ForgetGravity)
1211
+ ENUMERATOR(NorthWestGravity)
1212
+ ENUMERATOR(NorthGravity)
1213
+ ENUMERATOR(NorthEastGravity)
1214
+ ENUMERATOR(WestGravity)
1215
+ ENUMERATOR(CenterGravity)
1216
+ ENUMERATOR(EastGravity)
1217
+ ENUMERATOR(SouthWestGravity)
1218
+ ENUMERATOR(SouthGravity)
1219
+ ENUMERATOR(SouthEastGravity)
1220
+ ENUMERATOR(StaticGravity)
1221
+ END_ENUM
1222
+
1223
+ // ImageType constants
1224
+ DEF_ENUM(ImageType)
1225
+ ENUMERATOR(UndefinedType)
1226
+ ENUMERATOR(BilevelType)
1227
+ ENUMERATOR(GrayscaleType)
1228
+ ENUMERATOR(GrayscaleMatteType)
1229
+ ENUMERATOR(PaletteType)
1230
+ ENUMERATOR(PaletteMatteType)
1231
+ ENUMERATOR(TrueColorType)
1232
+ ENUMERATOR(TrueColorMatteType)
1233
+ ENUMERATOR(ColorSeparationType)
1234
+ ENUMERATOR(ColorSeparationMatteType)
1235
+ ENUMERATOR(OptimizeType)
1236
+ ENUMERATOR(PaletteBilevelMatteType)
1237
+ END_ENUM
1238
+
1239
+ // InterlaceType constants
1240
+ DEF_ENUM(InterlaceType)
1241
+ ENUMERATOR(UndefinedInterlace)
1242
+ ENUMERATOR(NoInterlace)
1243
+ ENUMERATOR(LineInterlace)
1244
+ ENUMERATOR(PlaneInterlace)
1245
+ ENUMERATOR(PartitionInterlace)
1246
+ ENUMERATOR(GIFInterlace)
1247
+ ENUMERATOR(JPEGInterlace)
1248
+ ENUMERATOR(PNGInterlace)
1249
+ END_ENUM
1250
+
1251
+ DEF_ENUM(InterpolatePixelMethod)
1252
+ ENUMERATOR(UndefinedInterpolatePixel)
1253
+ ENUMERATOR(AverageInterpolatePixel)
1254
+ ENUMERATOR(BicubicInterpolatePixel)
1255
+ ENUMERATOR(BilinearInterpolatePixel)
1256
+ ENUMERATOR(FilterInterpolatePixel)
1257
+ ENUMERATOR(IntegerInterpolatePixel)
1258
+ ENUMERATOR(MeshInterpolatePixel)
1259
+ ENUMERATOR(NearestNeighborInterpolatePixel)
1260
+ ENUMERATOR(SplineInterpolatePixel)
1261
+ END_ENUM
1262
+
1263
+ #if defined(HAVE_TYPE_MAGICKFUNCTION)
1264
+ DEF_ENUM(MagickFunction)
1265
+ ENUMERATOR(UndefinedFunction)
1266
+ ENUMERATOR(PolynomialFunction)
1267
+ ENUMERATOR(SinusoidFunction)
1268
+ #if defined(HAVE_ENUM_ARCSINFUNCTION)
1269
+ ENUMERATOR(ArcsinFunction)
1270
+ #endif
1271
+ #if defined(HAVE_ENUM_ARCTANFUNCTION)
1272
+ ENUMERATOR(ArctanFunction)
1273
+ #endif
1274
+ END_ENUM
1275
+ #endif
1276
+
1277
+ #if defined(HAVE_TYPE_IMAGELAYERMETHOD)
1278
+ DEF_ENUM(ImageLayerMethod)
1279
+ #else
1280
+ DEF_ENUM(MagickLayerMethod)
1281
+ #endif
1282
+ ENUMERATOR(UndefinedLayer)
1283
+ ENUMERATOR(CompareAnyLayer)
1284
+ ENUMERATOR(CompareClearLayer)
1285
+ ENUMERATOR(CompareOverlayLayer)
1286
+ ENUMERATOR(OptimizeLayer)
1287
+ ENUMERATOR(OptimizePlusLayer)
1288
+ ENUMERATOR(CoalesceLayer)
1289
+ ENUMERATOR(DisposeLayer)
1290
+ ENUMERATOR(OptimizeTransLayer)
1291
+ #if defined(HAVE_ENUM_OPTIMIZEIMAGELAYER)
1292
+ ENUMERATOR(OptimizeImageLayer)
1293
+ #endif
1294
+ ENUMERATOR(RemoveDupsLayer)
1295
+ ENUMERATOR(RemoveZeroLayer)
1296
+ ENUMERATOR(CompositeLayer)
1297
+ #if defined(HAVE_ENUM_MERGELAYER)
1298
+ ENUMERATOR(MergeLayer)
1299
+ #endif
1300
+ #if defined(HAVE_ENUM_MOSAICLAYER)
1301
+ ENUMERATOR(MosaicLayer)
1302
+ #endif
1303
+ #if defined(HAVE_ENUM_FLATTENLAYER)
1304
+ ENUMERATOR(FlattenLayer)
1305
+ #endif
1306
+ #if defined(HAVE_ENUM_TRIMBOUNDSLAYER)
1307
+ ENUMERATOR(TrimBoundsLayer)
1308
+ #endif
1309
+ END_ENUM
1310
+
1311
+ DEF_ENUM(MetricType)
1312
+ ENUMERATOR(UndefinedMetric)
1313
+ ENUMERATOR(AbsoluteErrorMetric)
1314
+ ENUMERATOR(MeanAbsoluteErrorMetric)
1315
+ ENUMERATOR(MeanErrorPerPixelMetric)
1316
+ ENUMERATOR(MeanSquaredErrorMetric)
1317
+ ENUMERATOR(PeakAbsoluteErrorMetric)
1318
+ ENUMERATOR(PeakSignalToNoiseRatioMetric)
1319
+ ENUMERATOR(RootMeanSquaredErrorMetric)
1320
+ END_ENUM
1321
+
1322
+ // NoiseType constants
1323
+ DEF_ENUM(NoiseType)
1324
+ ENUMERATOR(UniformNoise)
1325
+ ENUMERATOR(GaussianNoise)
1326
+ ENUMERATOR(MultiplicativeGaussianNoise)
1327
+ ENUMERATOR(ImpulseNoise)
1328
+ ENUMERATOR(LaplacianNoise)
1329
+ ENUMERATOR(PoissonNoise)
1330
+ ENUMERATOR(RandomNoise)
1331
+ END_ENUM
1332
+
1333
+ // Orientation constants
1334
+ DEF_ENUM(OrientationType)
1335
+ ENUMERATOR(UndefinedOrientation)
1336
+ ENUMERATOR(TopLeftOrientation)
1337
+ ENUMERATOR(TopRightOrientation)
1338
+ ENUMERATOR(BottomRightOrientation)
1339
+ ENUMERATOR(BottomLeftOrientation)
1340
+ ENUMERATOR(LeftTopOrientation)
1341
+ ENUMERATOR(RightTopOrientation)
1342
+ ENUMERATOR(RightBottomOrientation)
1343
+ ENUMERATOR(LeftBottomOrientation)
1344
+ END_ENUM
1345
+
1346
+ // Paint method constants
1347
+ DEF_ENUM(PaintMethod)
1348
+ ENUMERATOR(PointMethod)
1349
+ ENUMERATOR(ReplaceMethod)
1350
+ ENUMERATOR(FloodfillMethod)
1351
+ ENUMERATOR(FillToBorderMethod)
1352
+ ENUMERATOR(ResetMethod)
1353
+ END_ENUM
1354
+
1355
+ // PreviewType
1356
+ DEF_ENUM(PreviewType)
1357
+ ENUMERATOR(UndefinedPreview)
1358
+ ENUMERATOR(RotatePreview)
1359
+ ENUMERATOR(ShearPreview)
1360
+ ENUMERATOR(RollPreview)
1361
+ ENUMERATOR(HuePreview)
1362
+ ENUMERATOR(SaturationPreview)
1363
+ ENUMERATOR(BrightnessPreview)
1364
+ ENUMERATOR(GammaPreview)
1365
+ ENUMERATOR(SpiffPreview)
1366
+ ENUMERATOR(DullPreview)
1367
+ ENUMERATOR(GrayscalePreview)
1368
+ ENUMERATOR(QuantizePreview)
1369
+ ENUMERATOR(DespecklePreview)
1370
+ ENUMERATOR(ReduceNoisePreview)
1371
+ ENUMERATOR(AddNoisePreview)
1372
+ ENUMERATOR(SharpenPreview)
1373
+ ENUMERATOR(BlurPreview)
1374
+ ENUMERATOR(ThresholdPreview)
1375
+ ENUMERATOR(EdgeDetectPreview)
1376
+ ENUMERATOR(SpreadPreview)
1377
+ ENUMERATOR(SolarizePreview)
1378
+ ENUMERATOR(ShadePreview)
1379
+ ENUMERATOR(RaisePreview)
1380
+ ENUMERATOR(SegmentPreview)
1381
+ ENUMERATOR(SwirlPreview)
1382
+ ENUMERATOR(ImplodePreview)
1383
+ ENUMERATOR(WavePreview)
1384
+ ENUMERATOR(OilPaintPreview)
1385
+ ENUMERATOR(CharcoalDrawingPreview)
1386
+ ENUMERATOR(JPEGPreview)
1387
+ END_ENUM
1388
+
1389
+ DEF_ENUM(QuantumExpressionOperator)
1390
+ ENUMERATOR(UndefinedQuantumOperator)
1391
+ ENUMERATOR(AddQuantumOperator)
1392
+ ENUMERATOR(AndQuantumOperator)
1393
+ ENUMERATOR(DivideQuantumOperator)
1394
+ ENUMERATOR(LShiftQuantumOperator)
1395
+ ENUMERATOR(MaxQuantumOperator)
1396
+ ENUMERATOR(MinQuantumOperator)
1397
+ ENUMERATOR(MultiplyQuantumOperator)
1398
+ ENUMERATOR(OrQuantumOperator)
1399
+ ENUMERATOR(RShiftQuantumOperator)
1400
+ ENUMERATOR(SubtractQuantumOperator)
1401
+ ENUMERATOR(XorQuantumOperator)
1402
+ #if defined(HAVE_ENUM_POWEVALUATEOPERATOR)
1403
+ ENUMERATOR(PowQuantumOperator)
1404
+ #endif
1405
+ #if defined(HAVE_ENUM_LOGEVALUATEOPERATOR)
1406
+ ENUMERATOR(LogQuantumOperator)
1407
+ #endif
1408
+ #if defined(HAVE_ENUM_THRESHOLDEVALUATEOPERATOR)
1409
+ ENUMERATOR(ThresholdQuantumOperator)
1410
+ #endif
1411
+ #if defined(HAVE_ENUM_THRESHOLDBLACKEVALUATEOPERATOR)
1412
+ ENUMERATOR(ThresholdBlackQuantumOperator)
1413
+ #endif
1414
+ #if defined(HAVE_ENUM_THRESHOLDWHITEEVALUATEOPERATOR)
1415
+ ENUMERATOR(ThresholdWhiteQuantumOperator)
1416
+ #endif
1417
+ #if defined(HAVE_ENUM_GAUSSIANNOISEEVALUATEOPERATOR)
1418
+ ENUMERATOR(GaussianNoiseQuantumOperator)
1419
+ #endif
1420
+ #if defined(HAVE_ENUM_IMPULSENOISEEVALUATEOPERATOR)
1421
+ ENUMERATOR(ImpulseNoiseQuantumOperator)
1422
+ #endif
1423
+ #if defined(HAVE_ENUM_LAPLACIANNOISEEVALUATEOPERATOR)
1424
+ ENUMERATOR(LaplacianNoiseQuantumOperator)
1425
+ #endif
1426
+ #if defined(HAVE_ENUM_MULTIPLICATIVENOISEEVALUATEOPERATOR)
1427
+ ENUMERATOR(MultiplicativeNoiseQuantumOperator)
1428
+ #endif
1429
+ #if defined(HAVE_ENUM_POISSONNOISEEVALUATEOPERATOR)
1430
+ ENUMERATOR(PoissonNoiseQuantumOperator)
1431
+ #endif
1432
+ #if defined(HAVE_ENUM_UNIFORMNOISEEVALUATEOPERATOR)
1433
+ ENUMERATOR(UniformNoiseQuantumOperator)
1434
+ #endif
1435
+ #if defined(HAVE_ENUM_COSINEEVALUATEOPERATOR)
1436
+ ENUMERATOR(CosineQuantumOperator)
1437
+ #endif
1438
+ #if defined(HAVE_ENUM_SINEEVALUATEOPERATOR)
1439
+ ENUMERATOR(SineQuantumOperator)
1440
+ #endif
1441
+ #if defined(HAVE_ENUM_ADDMODULUSEVALUATEOPERATOR)
1442
+ ENUMERATOR(AddModulusQuantumOperator)
1443
+ #endif
1444
+ END_ENUM
1445
+
1446
+ // RenderingIntent
1447
+ DEF_ENUM(RenderingIntent)
1448
+ ENUMERATOR(UndefinedIntent)
1449
+ ENUMERATOR(SaturationIntent)
1450
+ ENUMERATOR(PerceptualIntent)
1451
+ ENUMERATOR(AbsoluteIntent)
1452
+ ENUMERATOR(RelativeIntent)
1453
+ END_ENUM
1454
+
1455
+ // ResolutionType constants
1456
+ DEF_ENUM(ResolutionType)
1457
+ ENUMERATOR(UndefinedResolution)
1458
+ ENUMERATOR(PixelsPerInchResolution)
1459
+ ENUMERATOR(PixelsPerCentimeterResolution)
1460
+ END_ENUM
1461
+
1462
+ #if defined(HAVE_SPARSECOLORIMAGE)
1463
+ DEF_ENUM(SparseColorMethod)
1464
+ ENUMERATOR(UndefinedColorInterpolate)
1465
+ ENUMERATOR(BarycentricColorInterpolate)
1466
+ ENUMERATOR(BilinearColorInterpolate)
1467
+ //ENUMERATOR(PolynomialColorInterpolate)
1468
+ ENUMERATOR(ShepardsColorInterpolate)
1469
+ ENUMERATOR(VoronoiColorInterpolate)
1470
+ END_ENUM
1471
+ #endif
1472
+
1473
+ // SpreadMethod
1474
+ DEF_ENUM(SpreadMethod)
1475
+ ENUMERATOR(UndefinedSpread)
1476
+ ENUMERATOR(PadSpread)
1477
+ ENUMERATOR(ReflectSpread)
1478
+ ENUMERATOR(RepeatSpread)
1479
+ END_ENUM
1480
+
1481
+ // StorageType
1482
+ DEF_ENUM(StorageType)
1483
+ ENUMERATOR(UndefinedPixel)
1484
+ ENUMERATOR(CharPixel)
1485
+ ENUMERATOR(DoublePixel)
1486
+ ENUMERATOR(FloatPixel)
1487
+ ENUMERATOR(IntegerPixel)
1488
+ ENUMERATOR(LongPixel)
1489
+ ENUMERATOR(QuantumPixel)
1490
+ ENUMERATOR(ShortPixel)
1491
+ END_ENUM
1492
+
1493
+ // StretchType constants
1494
+ DEF_ENUM(StretchType)
1495
+ ENUMERATOR(NormalStretch)
1496
+ ENUMERATOR(UltraCondensedStretch)
1497
+ ENUMERATOR(ExtraCondensedStretch)
1498
+ ENUMERATOR(CondensedStretch)
1499
+ ENUMERATOR(SemiCondensedStretch)
1500
+ ENUMERATOR(SemiExpandedStretch)
1501
+ ENUMERATOR(ExpandedStretch)
1502
+ ENUMERATOR(ExtraExpandedStretch)
1503
+ ENUMERATOR(UltraExpandedStretch)
1504
+ ENUMERATOR(AnyStretch)
1505
+ END_ENUM
1506
+
1507
+ // StyleType constants
1508
+ DEF_ENUM(StyleType)
1509
+ ENUMERATOR(NormalStyle)
1510
+ ENUMERATOR(ItalicStyle)
1511
+ ENUMERATOR(ObliqueStyle)
1512
+ ENUMERATOR(AnyStyle)
1513
+ END_ENUM
1514
+
1515
+ // VirtualPixelMethod
1516
+ DEF_ENUM(VirtualPixelMethod)
1517
+ ENUMERATOR(UndefinedVirtualPixelMethod)
1518
+ ENUMERATOR(EdgeVirtualPixelMethod)
1519
+ ENUMERATOR(MirrorVirtualPixelMethod)
1520
+ ENUMERATOR(TileVirtualPixelMethod)
1521
+ ENUMERATOR(TransparentVirtualPixelMethod)
1522
+ ENUMERATOR(BackgroundVirtualPixelMethod)
1523
+ ENUMERATOR(DitherVirtualPixelMethod)
1524
+ ENUMERATOR(RandomVirtualPixelMethod)
1525
+ ENUMERATOR(ConstantVirtualPixelMethod)
1526
+ ENUMERATOR(MaskVirtualPixelMethod)
1527
+ ENUMERATOR(BlackVirtualPixelMethod)
1528
+ ENUMERATOR(GrayVirtualPixelMethod)
1529
+ ENUMERATOR(WhiteVirtualPixelMethod)
1530
+ #if defined(HAVE_ENUM_HORIZONTALTILEVIRTUALPIXELMETHOD)
1531
+ ENUMERATOR(HorizontalTileVirtualPixelMethod)
1532
+ #endif
1533
+ #if defined(HAVE_ENUM_VERTICALTILEVIRTUALPIXELMETHOD)
1534
+ ENUMERATOR(VerticalTileVirtualPixelMethod)
1535
+ #endif
1536
+ #if defined(HAVE_ENUM_HORIZONTALTILEEDGEVIRTUALPIXELMETHOD)
1537
+ ENUMERATOR(HorizontalTileEdgeVirtualPixelMethod)
1538
+ #endif
1539
+ #if defined(HAVE_ENUM_VERTICALTILEEDGEVIRTUALPIXELMETHOD)
1540
+ ENUMERATOR(VerticalTileEdgeVirtualPixelMethod)
1541
+ #endif
1542
+ #if defined(HAVE_ENUM_CHECKERTILEVIRTUALPIXELMETHOD)
1543
+ ENUMERATOR(CheckerTileVirtualPixelMethod)
1544
+ #endif
1545
+ END_ENUM
1546
+ // WeightType constants
1547
+ DEF_ENUM(WeightType)
1548
+ ENUMERATOR(AnyWeight)
1549
+ ENUMERATOR(NormalWeight)
1550
+ ENUMERATOR(BoldWeight)
1551
+ ENUMERATOR(BolderWeight)
1552
+ ENUMERATOR(LighterWeight)
1553
+ END_ENUM
1554
+
1555
+ /*-----------------------------------------------------------------------*/
1556
+ /* Struct classes */
1557
+ /*-----------------------------------------------------------------------*/
1558
+
1559
+ // Pass NULL as the structure name to keep them from polluting the Struct
1560
+ // namespace. The only way to use these classes is via the Magick:: namespace.
1561
+
1562
+ // Magick::AffineMatrix
1563
+ Class_AffineMatrix = rb_struct_define(NULL, "sx", "rx", "ry", "sy", "tx", "ty", NULL);
1564
+ rb_define_const(Module_Magick, "AffineMatrix", Class_AffineMatrix);
1565
+
1566
+ // Magick::Primary
1567
+ Class_Primary = rb_struct_define(NULL, "x", "y", "z", NULL);
1568
+ rb_define_method(Class_Primary, "to_s", PrimaryInfo_to_s, 0);
1569
+ rb_define_const(Module_Magick, "Primary", Class_Primary);
1570
+
1571
+ // Magick::Chromaticity
1572
+ Class_Chromaticity = rb_struct_define(NULL
1573
+ , "red_primary"
1574
+ , "green_primary"
1575
+ , "blue_primary"
1576
+ , "white_point"
1577
+ , NULL);
1578
+ rb_define_method(Class_Chromaticity, "to_s", ChromaticityInfo_to_s, 0);
1579
+ rb_define_const(Module_Magick, "Chromaticity", Class_Chromaticity);
1580
+
1581
+ // Magick::Color
1582
+ Class_Color = rb_struct_define(NULL, "name", "compliance", "color", NULL);
1583
+ rb_define_method(Class_Color, "to_s", Color_to_s, 0);
1584
+ rb_define_const(Module_Magick, "Color", Class_Color);
1585
+
1586
+ // Magick::Point
1587
+ Class_Point = rb_struct_define(NULL, "x", "y", NULL);
1588
+ rb_define_const(Module_Magick, "Point", Class_Point);
1589
+
1590
+ // Magick::Rectangle
1591
+ Class_Rectangle = rb_struct_define(NULL, "width", "height", "x", "y", NULL);
1592
+ rb_define_method(Class_Rectangle, "to_s", RectangleInfo_to_s, 0);
1593
+ rb_define_const(Module_Magick, "Rectangle", Class_Rectangle);
1594
+
1595
+ // Magick::Segment
1596
+ Class_Segment = rb_struct_define(NULL, "x1", "y1", "x2", "y2", NULL);
1597
+ rb_define_method(Class_Segment, "to_s", SegmentInfo_to_s, 0);
1598
+ rb_define_const(Module_Magick, "Segment", Class_Segment);
1599
+
1600
+ // Magick::Font
1601
+ Class_Font = rb_struct_define(NULL, "name", "description",
1602
+ "family", "style", "stretch", "weight",
1603
+ "encoding", "foundry", "format", NULL);
1604
+ rb_define_method(Class_Font, "to_s", Font_to_s, 0);
1605
+ rb_define_const(Module_Magick, "Font", Class_Font);
1606
+
1607
+ // Magick::TypeMetric
1608
+ Class_TypeMetric = rb_struct_define(NULL, "pixels_per_em", "ascent", "descent",
1609
+ "width", "height", "max_advance", "bounds",
1610
+ "underline_position", "underline_thickness", NULL);
1611
+ rb_define_method(Class_TypeMetric, "to_s", TypeMetric_to_s, 0);
1612
+ rb_define_const(Module_Magick, "TypeMetric", Class_TypeMetric);
1613
+
1614
+
1615
+ /*-----------------------------------------------------------------------*/
1616
+ /* Error handlers */
1617
+ /*-----------------------------------------------------------------------*/
1618
+
1619
+ SetFatalErrorHandler(rm_fatal_error_handler);
1620
+ SetErrorHandler(rm_error_handler);
1621
+ SetWarningHandler(rm_warning_handler);
1622
+
1623
+ RB_GC_GUARD(observable);
1624
+ }
1625
+
1626
+
1627
+
1628
+
1629
+ /**
1630
+ * Ensure the version of ImageMagick we're running with matches the version we
1631
+ * were compiled with.
1632
+ *
1633
+ * No Ruby usage (internal function)
1634
+ *
1635
+ * Notes:
1636
+ * - Bypass the test by defining the constant RMAGICK_BYPASS_VERSION_TEST to
1637
+ * 'true' at the top level, before requiring 'RMagick'
1638
+ */
1639
+ static void
1640
+ test_Magick_version(void)
1641
+ {
1642
+ unsigned long version_number;
1643
+ const char *version_str;
1644
+ int x, n;
1645
+ ID bypass = rb_intern("RMAGICK_BYPASS_VERSION_TEST");
1646
+
1647
+ if (RTEST(rb_const_defined(rb_cObject, bypass)) && RTEST(rb_const_get(rb_cObject, bypass)))
1648
+ {
1649
+ return;
1650
+ }
1651
+
1652
+ version_str = GetMagickVersion(&version_number);
1653
+ if (version_number != MagickLibVersion)
1654
+ {
1655
+ // Extract the string "ImageMagick X.Y.Z"
1656
+ n = 0;
1657
+ for (x = 0; version_str[x] != '\0'; x++)
1658
+ {
1659
+ if (version_str[x] == ' ' && ++n == 2)
1660
+ {
1661
+ break;
1662
+ }
1663
+ }
1664
+
1665
+ rb_raise(rb_eRuntimeError,
1666
+ "This installation of RMagick was configured with %s %s but %.*s is in use.\n" ,
1667
+ MagickPackageName, MagickLibVersionText, x, version_str);
1668
+ }
1669
+
1670
+ }
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+ /**
1677
+ * Create Version, Magick_version, and Version_long constants.
1678
+ *
1679
+ * No Ruby usage (internal function)
1680
+ */
1681
+ static void
1682
+ version_constants(void)
1683
+ {
1684
+ const char *mgk_version;
1685
+ VALUE str;
1686
+ char long_version[1000];
1687
+
1688
+ mgk_version = GetMagickVersion(NULL);
1689
+
1690
+ str = rb_str_new2(mgk_version);
1691
+ rb_obj_freeze(str);
1692
+ rb_define_const(Module_Magick, "Magick_version", str);
1693
+
1694
+ str = rb_str_new2(Q(RMAGICK_VERSION_STRING));
1695
+ rb_obj_freeze(str);
1696
+ rb_define_const(Module_Magick, "Version", str);
1697
+
1698
+ sprintf(long_version,
1699
+ "This is %s ($Date: 2009/12/20 02:33:33 $) Copyright (C) 2009 by Timothy P. Hunter\n"
1700
+ "Built with %s\n"
1701
+ "Built for %s\n"
1702
+ "Web page: http://rmagick.rubyforge.org\n"
1703
+ "Email: rmagick@rubyforge.org\n",
1704
+ Q(RMAGICK_VERSION_STRING), mgk_version, Q(RUBY_VERSION_STRING));
1705
+
1706
+ str = rb_str_new2(long_version);
1707
+ rb_obj_freeze(str);
1708
+ rb_define_const(Module_Magick, "Long_version", str);
1709
+
1710
+ RB_GC_GUARD(str);
1711
+ }
1712
+
1713
+
1714
+ /**
1715
+ * Create Features constant.
1716
+ *
1717
+ * No Ruby usage (internal function)
1718
+ */
1719
+ static void
1720
+ features_constant(void)
1721
+ {
1722
+ VALUE features;
1723
+
1724
+ #if defined(HAVE_GETMAGICKFEATURES)
1725
+ // 6.5.7 - latest (7.0.0)
1726
+ features = rb_str_new2(GetMagickFeatures());
1727
+ #elif defined(MagickFeatures)
1728
+ // 6.5.7 - latest (7.0.0)
1729
+ features = rb_str_new2(MagickFeatures);
1730
+ #elif defined(MagickSupport)
1731
+ // 6.5.5 - 6.5.6
1732
+ features = rb_str_new2(MagickSupport);
1733
+ #else
1734
+ features = rb_str_new("unknown", 7);
1735
+ #endif
1736
+
1737
+ rb_obj_freeze(features);
1738
+ rb_define_const(Module_Magick, "Magick_features", features);
1739
+
1740
+ RB_GC_GUARD(features);
1741
+ }