rmagick-windows 2.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,401 @@
1
+ /**************************************************************************//**
2
+ * Contains Magick module methods.
3
+ *
4
+ * Copyright © 2002 - 2009 by Timothy P. Hunter
5
+ *
6
+ * Changes since Nov. 2009 copyright © by Benjamin Thomas and Omer Bar-or
7
+ *
8
+ * @file rmagick.c
9
+ * @version $Id: rmagick.c,v 1.4 2009/12/20 02:33:32 baror Exp $
10
+ * @author Tim Hunter
11
+ ******************************************************************************/
12
+
13
+ #include "rmagick.h"
14
+
15
+
16
+
17
+
18
+ /**
19
+ * If called with the optional block, iterates over the colors, otherwise
20
+ * returns an array of Magick::Color objects.
21
+ *
22
+ * Ruby usage:
23
+ * - @verbatim Magick::colors @endverbatim
24
+ * - @verbatim Magick::colors { |colorinfo| } @endverbatim
25
+ *
26
+ * Notes:
27
+ * - There are 3 implementations.
28
+ *
29
+ * @param class the class on which the method is run.
30
+ * @return either the input class (if a block was given) or the array of colors.
31
+ */
32
+ VALUE
33
+ Magick_colors(VALUE class)
34
+ {
35
+ const ColorInfo **color_info_list;
36
+ size_t number_colors, x;
37
+ VALUE ary;
38
+ ExceptionInfo *exception;
39
+
40
+ exception = AcquireExceptionInfo();
41
+
42
+ color_info_list = GetColorInfoList("*", &number_colors, exception);
43
+ CHECK_EXCEPTION()
44
+ (void) DestroyExceptionInfo(exception);
45
+
46
+
47
+ if (rb_block_given_p())
48
+ {
49
+ for (x = 0; x < number_colors; x++)
50
+ {
51
+ (void) rb_yield(Import_ColorInfo(color_info_list[x]));
52
+ }
53
+ magick_free((void *)color_info_list);
54
+ return class;
55
+ }
56
+ else
57
+ {
58
+ ary = rb_ary_new2((long) number_colors);
59
+ for (x = 0; x < number_colors; x++)
60
+ {
61
+ (void) rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
62
+ }
63
+
64
+ magick_free((void *)color_info_list);
65
+ RB_GC_GUARD(ary);
66
+ return ary;
67
+ }
68
+ }
69
+
70
+
71
+ /**
72
+ * If called with the optional block, iterates over the fonts, otherwise returns
73
+ * an array of Magick::Font objects.
74
+ *
75
+ * Ruby usage:
76
+ * - @verbatim Magick::fonts @endverbatim
77
+ * - @verbatim Magick::fonts { |fontinfo| } @endverbatim
78
+ *
79
+ * @param class the class on which the method is run.
80
+ * @return either the input class (if a block was given) or the array of fonts.
81
+ */
82
+ VALUE
83
+ Magick_fonts(VALUE class)
84
+ {
85
+ const TypeInfo **type_info;
86
+ size_t number_types, x;
87
+ VALUE ary;
88
+ ExceptionInfo *exception;
89
+
90
+ exception = AcquireExceptionInfo();
91
+ type_info = GetTypeInfoList("*", &number_types, exception);
92
+ CHECK_EXCEPTION()
93
+ (void) DestroyExceptionInfo(exception);
94
+
95
+ if (rb_block_given_p())
96
+ {
97
+ for (x = 0; x < number_types; x++)
98
+ {
99
+ (void) rb_yield(Import_TypeInfo((const TypeInfo *)type_info[x]));
100
+ }
101
+ magick_free((void *)type_info);
102
+ return class;
103
+ }
104
+ else
105
+ {
106
+ ary = rb_ary_new2((long)number_types);
107
+ for (x = 0; x < number_types; x++)
108
+ {
109
+ (void) rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
110
+ }
111
+ magick_free((void *)type_info);
112
+ RB_GC_GUARD(ary);
113
+ return ary;
114
+ }
115
+
116
+ }
117
+
118
+
119
+ /**
120
+ * Build the @@formats hash. The hash keys are image formats. The hash values
121
+ * specify the format "mode string", i.e. a description of what ImageMagick can
122
+ * do with that format. The mode string is in the form "BRWA", where
123
+ * - "B" is "*" if the format has native blob support, or " " otherwise.
124
+ * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
125
+ * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
126
+ * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
127
+ *
128
+ * No Ruby usage (internal function)
129
+ *
130
+ * @param magick_info a MagickInfo object.
131
+ * @return the formats hash.
132
+ */
133
+ static VALUE
134
+ MagickInfo_to_format(const MagickInfo *magick_info)
135
+ {
136
+ char mode[4];
137
+
138
+ mode[0] = magick_info->blob_support ? '*': ' ';
139
+ mode[1] = magick_info->decoder ? 'r' : '-';
140
+ mode[2] = magick_info->encoder ? 'w' : '-';
141
+ mode[3] = magick_info->encoder && magick_info->adjoin ? '+' : '-';
142
+
143
+ return rb_str_new(mode, sizeof(mode));
144
+ }
145
+
146
+
147
+ /**
148
+ * Build the @@formats hash. The hash keys are image formats. The hash values
149
+ * specify the format "mode string", i.e. a description of what ImageMagick can
150
+ * do with that format. The mode string is in the form "BRWA", where
151
+ * - "B" is "*" if the format has native blob support, or " " otherwise.
152
+ * - "R" is "r" if ImageMagick can read that format, or "-" otherwise.
153
+ * - "W" is "w" if ImageMagick can write that format, or "-" otherwise.
154
+ * - "A" is "+" if the format supports multi-image files, or "-" otherwise.
155
+ *
156
+ * Ruby usage:
157
+ * - @verbatim Magick.init_formats @endverbatim
158
+ *
159
+ * Notes:
160
+ * - Only called once.
161
+ * - There are 3 implementations.
162
+ *
163
+ * @param class the class on which the method is run.
164
+ * @return the formats hash.
165
+ * @see MagickInfo_to_format
166
+ */
167
+ VALUE
168
+ Magick_init_formats(VALUE class)
169
+ {
170
+ const MagickInfo **magick_info;
171
+ size_t number_formats, x;
172
+ VALUE formats;
173
+ ExceptionInfo *exception;
174
+
175
+ class = class; // defeat "never referenced" message from icc
176
+ formats = rb_hash_new();
177
+
178
+ // IM 6.1.3 added an exception argument to GetMagickInfoList
179
+ exception = AcquireExceptionInfo();
180
+ magick_info = GetMagickInfoList("*", &number_formats, exception);
181
+ CHECK_EXCEPTION()
182
+ (void) DestroyExceptionInfo(exception);
183
+
184
+
185
+ for (x = 0; x < number_formats; x++)
186
+ {
187
+ (void) rb_hash_aset(formats
188
+ , rb_str_new2(magick_info[x]->name)
189
+ , MagickInfo_to_format((const MagickInfo *)magick_info[x]));
190
+ }
191
+ RB_GC_GUARD(formats);
192
+ return formats;
193
+ }
194
+
195
+
196
+ /**
197
+ * Get/set resource limits. If a limit is specified the old limit is set to the
198
+ * new value. Either way the current/old limit is returned.
199
+ *
200
+ * Ruby usage:
201
+ * - @verbatim Magick.limit_resource(resource) @endverbatim
202
+ * - @verbatim Magick.limit_resource(resource, limit) @endverbatim
203
+ *
204
+ * @param argc number of input arguments.
205
+ * @param argv array of input arguments.
206
+ * @param class the class on which the method is run.
207
+ * @return the current/old limit.
208
+ */
209
+ VALUE
210
+ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
211
+ {
212
+ VALUE resource, limit;
213
+ ResourceType res = UndefinedResource;
214
+ char *str;
215
+ ID id;
216
+ unsigned long cur_limit;
217
+
218
+ rb_scan_args(argc, argv, "11", &resource, &limit);
219
+
220
+ switch (TYPE(resource))
221
+ {
222
+ case T_NIL:
223
+ return class;
224
+
225
+ case T_SYMBOL:
226
+ id = (ID)SYM2ID(resource);
227
+ if (id == rb_intern("area"))
228
+ {
229
+ res = AreaResource;
230
+ }
231
+ else if (id == rb_intern("memory"))
232
+ {
233
+ res = MemoryResource;
234
+ }
235
+ else if (id == rb_intern("map"))
236
+ {
237
+ res = MapResource;
238
+ }
239
+ else if (id == rb_intern("disk"))
240
+ {
241
+ res = DiskResource;
242
+ }
243
+ else if (id == rb_intern("file"))
244
+ {
245
+ res = FileResource;
246
+ }
247
+ else
248
+ {
249
+ rb_raise(rb_eArgError, "unknown resource: `:%s'", rb_id2name(id));
250
+ }
251
+ break;
252
+
253
+ default:
254
+ str = StringValuePtr(resource);
255
+ if (*str == '\0')
256
+ {
257
+ return class;
258
+ }
259
+ else if (rm_strcasecmp("area", str) == 0)
260
+ {
261
+ res = AreaResource;
262
+ }
263
+ else if (rm_strcasecmp("memory", str) == 0)
264
+ {
265
+ res = MemoryResource;
266
+ }
267
+ else if (rm_strcasecmp("map", str) == 0)
268
+ {
269
+ res = MapResource;
270
+ }
271
+ else if (rm_strcasecmp("disk", str) == 0)
272
+ {
273
+ res = DiskResource;
274
+ }
275
+ else if (rm_strcasecmp("file", str) == 0)
276
+ {
277
+ res = FileResource;
278
+ }
279
+ else
280
+ {
281
+ rb_raise(rb_eArgError, "unknown resource: `%s'", str);
282
+ }
283
+ break;
284
+ }
285
+
286
+ RB_GC_GUARD(resource);
287
+
288
+ cur_limit = GetMagickResourceLimit(res);
289
+
290
+ if (argc > 1)
291
+ {
292
+ (void) SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
293
+ }
294
+
295
+ RB_GC_GUARD(limit);
296
+
297
+ return ULONG2NUM(cur_limit);
298
+ }
299
+
300
+
301
+ /**
302
+ * Set the amount of free memory allocated for the pixel cache. Once this
303
+ * threshold is exceeded, all subsequent pixels cache operations are to/from
304
+ * disk.
305
+ *
306
+ * Ruby usage:
307
+ * - @verbatim Magick.set_cache_threshold(megabytes) @endverbatim
308
+ *
309
+ * Notes:
310
+ * - singleton method
311
+ *
312
+ * @param class the class on which the method is run.
313
+ * @param threshold the number of megabytes to set.
314
+ * @return the class.
315
+ */
316
+ VALUE
317
+ Magick_set_cache_threshold(VALUE class, VALUE threshold)
318
+ {
319
+ unsigned long thrshld = NUM2ULONG(threshold);
320
+ (void) SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
321
+ (void) SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
322
+ return class;
323
+ }
324
+
325
+
326
+ /**
327
+ * Set the log event mask.
328
+ *
329
+ * Ruby usage:
330
+ * - @verbatim Magick.set_log_event_mask(event) @endverbatim
331
+ * - @verbatim Magick.set_log_event_mask(event,...) @endverbatim
332
+ *
333
+ * Notes:
334
+ * - "event" is one of
335
+ * - "all"
336
+ * - "annotate"
337
+ * - "blob"
338
+ * - "cache"
339
+ * - "coder"
340
+ * - "configure"
341
+ * - "deprecate"
342
+ * - "locale"
343
+ * - "none"
344
+ * - "render"
345
+ * - "transform"
346
+ * - "user"
347
+ * - "x11"
348
+ * - Multiple events can be specified.
349
+ * - Event names may be capitalized.
350
+ *
351
+ * @param argc number of input arguments.
352
+ * @param argv array of input arguments.
353
+ * @param class the class on which the method is run.
354
+ * @return the class.
355
+ */
356
+ VALUE
357
+ Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
358
+ {
359
+ int x;
360
+
361
+ if (argc == 0)
362
+ {
363
+ rb_raise(rb_eArgError, "wrong number of arguments (at least 1 required)");
364
+ }
365
+ for (x = 0; x < argc; x++)
366
+ {
367
+ (void) SetLogEventMask(StringValuePtr(argv[x]));
368
+ }
369
+ return class;
370
+ }
371
+
372
+ /**
373
+ * Set the format for log messages.
374
+ *
375
+ * Ruby usage:
376
+ * - @verbatim Magick.set_log_format(format) @endverbatim
377
+ *
378
+ * Notes:
379
+ * - Format is a string containing one or more of:
380
+ * - %t - current time
381
+ * - %r - elapsed time
382
+ * - %u - user time
383
+ * - %p - pid
384
+ * - %m - module (source file name)
385
+ * - %f - function name
386
+ * - %l - line number
387
+ * - %d - event domain (one of the events listed above)
388
+ * - %e - event name
389
+ * - Plus other characters, including \\n, etc.
390
+ *
391
+ * @param class the class on which the method is run.
392
+ * @param format the format to set.
393
+ * @return the class.
394
+ */
395
+ VALUE
396
+ Magick_set_log_format(VALUE class, VALUE format)
397
+ {
398
+ SetLogFormat(StringValuePtr(format));
399
+ return class;
400
+ }
401
+
@@ -0,0 +1,1287 @@
1
+ /**************************************************************************//**
2
+ * RMagick declarations and definitions.
3
+ *
4
+ * Copyright &copy; 2002 - 2009 by Timothy P. Hunter
5
+ *
6
+ * Changes since Nov. 2009 copyright &copy; by Benjamin Thomas and Omer Bar-or
7
+ *
8
+ * @file rmagick.h
9
+ * @version $Id: rmagick.h,v 1.282 2010/02/16 06:50:28 baror Exp $
10
+ * @author Tim Hunter
11
+ ******************************************************************************/
12
+
13
+ #ifndef _RMAGICK_H_
14
+ #define _RMAGICK_H_
15
+
16
+ //! Suppress warnings about deprecated functions on Windows
17
+ #define _CRT_SECURE_NO_DEPRECATE 1
18
+
19
+ #include <assert.h>
20
+ #include <stdio.h>
21
+ #include <ctype.h>
22
+ #if defined(HAVE_STDINT_H)
23
+ #include <stdint.h>
24
+ #endif
25
+ #include <stdlib.h>
26
+ #include <math.h>
27
+ #include <time.h>
28
+ #if defined(HAVE_SYS_TYPES_H)
29
+ #include <sys/types.h>
30
+ #endif
31
+ #include "ruby.h"
32
+ #include "ruby/io.h"
33
+
34
+
35
+ // Undef Ruby's versions of these symbols
36
+ #undef PACKAGE_VERSION
37
+ #undef PACKAGE_NAME
38
+ #undef PACKAGE_STRING
39
+ #undef PACKAGE_BUGREPORT
40
+ #undef PACKAGE_TARNAME
41
+ #undef WORDS_BIGENDIAN
42
+
43
+ #include "magick/MagickCore.h"
44
+ #include "magick/magick-config.h"
45
+
46
+ // Undef ImageMagick's versions of these symbols
47
+ #undef PACKAGE_STRING
48
+
49
+
50
+ #include "extconf.h"
51
+
52
+
53
+ //! For quoting preprocessor symbols
54
+ #define Q2(q) #q
55
+ //! For quoting preprocessor symbols
56
+ #define Q(q) Q2(q)
57
+
58
+
59
+ //! Trace new image creation in bang methods
60
+ #define UPDATE_DATA_PTR(_obj_, _new_) \
61
+ do { (void) rm_trace_creation(_new_);\
62
+ DATA_PTR(_obj_) = (void *)(_new_);\
63
+ } while(0)
64
+
65
+
66
+ // Handle Quantum <-> Ruby Numeric object conversion
67
+ #if (MAGICKCORE_QUANTUM_DEPTH == 8 || MAGICKCORE_QUANTUM_DEPTH == 16)
68
+ #define QUANTUM2NUM(q) INT2FIX((q)) /**< Quantum -> Ruby Numeric conversion */
69
+ #define NUM2QUANTUM(n) (Quantum)NUM2UINT((n)) /**< Quantum <- Ruby Numeric conversion */
70
+ #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
71
+ #define QUANTUM2NUM(q) UINT2NUM((q)) /**< Quantum -> Ruby Numeric conversion */
72
+ #define NUM2QUANTUM(n) (Quantum)NUM2UINT((n)) /**< Quntum <- Ruby Numeric conversion */
73
+ #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
74
+ #define QUANTUM2NUM(q) ULL2NUM((q)) /**< Quantum -> Ruby Numeric conversion */
75
+ #define NUM2QUANTUM(n) (Quantum)NUM2ULL((n)) /**< Quntum <- Ruby Numeric conversion */
76
+ #else
77
+ #error Specified MAGICKCORE_QUANTUM_DEPTH is not supported.
78
+ #endif
79
+ //! Convert user-supplied objects to Quantum
80
+ #define APP2QUANTUM(n) rm_app2quantum((n))
81
+
82
+ //! degrees to radians conversion
83
+ #undef DegreesToRadians // defined in ImageMagick.h in 6.0.2
84
+ #define DegreesToRadians(x) ((x)*3.14159265358979323846/180.0)
85
+
86
+ //! pixel intensity calculation
87
+ #define PIXEL_INTENSITY(q) ((Quantum)(0.299*(q)->red + 0.587*(q)->green + 0.114*(q)->blue + 0.5))
88
+
89
+ //! find maximum of longs
90
+ #define LMAX(a,b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
91
+ //! find maximum of floats
92
+ #define FMAX(a,b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
93
+ //! find minimum of floats
94
+ #define FMIN(a,b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
95
+
96
+ #define RMAGICK_PI 3.14159265358979 /**< pi */
97
+
98
+ //! round to Quantum
99
+ #define ROUND_TO_QUANTUM(value) ((Quantum) ((value) > (Quantum)QuantumRange ? QuantumRange : (value) + 0.5))
100
+
101
+
102
+ // Ruby 1.9.0 changed the name to rb_frame_this_func
103
+ #if defined(HAVE_RB_FRAME_THIS_FUNC)
104
+ #define THIS_FUNC() rb_frame_this_func() /**< get the Ruby function being called */
105
+ #else
106
+ #define THIS_FUNC() rb_frame_last_func() /**< get the Ruby function being called */
107
+ #endif
108
+
109
+ // GetReadFile doesn't exist in Ruby 1.9.0
110
+ #if !defined(GetReadFile)
111
+ #define GetReadFile(fptr) rb_io_stdio_file(fptr) /**< Ruby read file pointer */
112
+ #define GetWriteFile(fptr) rb_io_stdio_file(fptr) /**< Ruby write file pointer */
113
+ #endif
114
+
115
+ // rb_io_t replaces OpenFile in Ruby 1.9.0
116
+ #if defined(HAVE_RB_IO_T)
117
+ #undef OpenFile
118
+ #define OpenFile rb_io_t /**< Ruby open file */
119
+ #endif
120
+
121
+ //! Convert a C string to a Ruby symbol. Used in marshal_dump/marshal_load methods
122
+ #define CSTR2SYM(s) ID2SYM(rb_intern(s))
123
+ //! Convert a C string to a Ruby String, or nil if the ptr is NULL
124
+ #define MAGICK_STRING_TO_OBJ(f) (f) ? rb_str_new2(f) : Qnil
125
+ /**
126
+ * Copy the C string in a Ruby String object to ImageMagick memory, or set the
127
+ * pointer to NULL if the object is nil.
128
+ */
129
+ #define OBJ_TO_MAGICK_STRING(f, obj) \
130
+ if ((obj) != Qnil)\
131
+ magick_clone_string(&f, RSTRING_PTR(obj));\
132
+ else\
133
+ f = NULL;
134
+
135
+
136
+ /** ImageMagick 6.5.7 replaced DestroyConstitute with
137
+ * ConstituteComponentTerminus. Both have the same signature.
138
+ */
139
+ #if defined(HAVE_CONSTITUTECOMPONENTTERMINUS)
140
+ #define DestroyConstitute(void) ConstituteComponentTerminus(void)
141
+ #endif
142
+
143
+ /** ImageMagick 6.5.9 replaced MagickLibSubversion with
144
+ * MagickLibAddendum.
145
+ */
146
+ #if defined(HAVE_MAGICKLIBADDENDUM)
147
+ #define MagickLibSubversion MagickLibAddendum
148
+ #endif
149
+
150
+ /** IM 6.4.1 replaced AllocateImage with AcquireImage.
151
+ * Both have the same signature.
152
+ */
153
+ #if !defined(HAVE_ACQUIREIMAGE)
154
+ #define AcquireImage(info) AllocateImage(info)
155
+ #endif
156
+
157
+ // ImageLayerMethod replaced MagickLayerMethod starting with 6.3.6
158
+ #if defined(HAVE_TYPE_IMAGELAYERMETHOD)
159
+ #define LAYERMETHODTYPE ImageLayerMethod /**< layer method */
160
+ #define CLASS_LAYERMETHODTYPE Class_ImageLayerMethod /**< layer method class */
161
+ #define LAYERMETHODTYPE_NAME ImageLayerMethod_name /**< layer method name */
162
+ #define LAYERMETHODTYPE_NEW ImageLayerMethod_new /**< new layer method */
163
+ #else
164
+ #define LAYERMETHODTYPE MagickLayerMethod /**< layer method */
165
+ #define CLASS_LAYERMETHODTYPE Class_MagickLayerMethod /**< layer method class */
166
+ #define LAYERMETHODTYPE_NAME MagickLayerMethod_name /**< layer method name */
167
+ #define LAYERMETHODTYPE_NEW MagickLayerMethod_new /**< new layer method */
168
+ #endif
169
+
170
+
171
+ typedef ImageInfo Info; /**< Make type name match class name */
172
+ typedef PixelPacket Pixel; /**< Make type name match class name */
173
+
174
+ //! Montage
175
+ typedef struct
176
+ {
177
+ CompositeOperator compose; /**< compose operator */
178
+ MontageInfo *info; /**< montage info */
179
+ } Montage;
180
+
181
+ // Draw
182
+ //! tmp filename linked list
183
+ struct TmpFile_Name
184
+ {
185
+ struct TmpFile_Name *next; /**< the next tmp filename */
186
+ char name[1]; /**< expandable char array for this filename */
187
+ };
188
+
189
+ //! Draw class.
190
+ typedef struct
191
+ {
192
+ DrawInfo *info; /**< the DrawInfo struct */
193
+ VALUE primitives; /**< the primitive string */
194
+ struct TmpFile_Name *tmpfile_ary; /**< the tmp filenames */
195
+ PixelPacket shadow_color; /**< PolaroidOptions#shadow_color */
196
+ } Draw; // make the type match the class name
197
+
198
+ // Enum
199
+ //! enumerator over Magick ids
200
+ typedef struct
201
+ {
202
+ ID id; /**< the Magick id */
203
+ int val; /**< its value */
204
+ } MagickEnum;
205
+
206
+ #undef False // defined in deprecate.h in 6.0.2
207
+ #undef True // defined in deprecate.h in 6.0.2
208
+ //! generic boolean
209
+ typedef enum
210
+ {
211
+ False = 0, /**< false */
212
+ True = 1 /**< true */
213
+ } rm_boolean;
214
+
215
+ //! enumerator over weight types
216
+ typedef enum {
217
+ AnyWeight, /**< any */
218
+ NormalWeight, /**< normal */
219
+ BoldWeight, /**< bold */
220
+ BolderWeight, /**< bolder */
221
+ LighterWeight /**< lighter */
222
+ } WeightType;
223
+
224
+ //! Draw#text_anchor AnchorType argument
225
+ typedef enum {
226
+ StartAnchor = 1, /**< start */
227
+ MiddleAnchor = 2, /**< midle */
228
+ EndAnchor = 3 /**< end */
229
+ } AnchorType;
230
+
231
+
232
+ //! dumped image
233
+ typedef struct
234
+ {
235
+ unsigned char id; /**< Dumped image id = 0xd1 */
236
+ unsigned char mj; /**< Major format number = 1 */
237
+ unsigned char mi; /**< Minor format number = 0 */
238
+ unsigned char len; /**< Length of image magick string */
239
+ char magick[MaxTextExtent]; /**< magick string */
240
+ } DumpedImage;
241
+
242
+ #define DUMPED_IMAGE_ID 0xd1 /**< ID of Dumped image id */
243
+ #define DUMPED_IMAGE_MAJOR_VERS 1 /**< Dumped image major version */
244
+ #define DUMPED_IMAGE_MINOR_VERS 0 /**< Dumped image minor version */
245
+
246
+ #define MAGICK_LOC "magick_location" /**< instance variable name in ImageMagickError class */
247
+
248
+ #define MAX_GEOM_STR 51 /**< max length of a geometry string */
249
+
250
+ //! Quantum expression adapter.
251
+ /**
252
+ * Both ImageMagick and GraphicsMagick define an enum type for quantum-level
253
+ * expressions, but they're different types. The QuantumExpressionOperator
254
+ * type is an adapter type that can be mapped to either one.
255
+ */
256
+ typedef enum _QuantumExpressionOperator
257
+ {
258
+ UndefinedQuantumOperator, /**< undefined */
259
+ AddQuantumOperator, /**< add */
260
+ AndQuantumOperator, /**< and */
261
+ DivideQuantumOperator, /**< divide */
262
+ LShiftQuantumOperator, /**< lshift */
263
+ MaxQuantumOperator, /**< max */
264
+ MinQuantumOperator, /**< min */
265
+ MultiplyQuantumOperator, /**< multiply */
266
+ OrQuantumOperator, /**< or */
267
+ RShiftQuantumOperator, /**< rshift */
268
+ SubtractQuantumOperator, /**< subtract */
269
+ XorQuantumOperator, /**< xor */
270
+ #if defined(HAVE_ENUM_POWEVALUATEOPERATOR)
271
+ PowQuantumOperator, /**< pow */
272
+ #endif
273
+ #if defined(HAVE_ENUM_LOGEVALUATEOPERATOR)
274
+ LogQuantumOperator, /**< log */
275
+ #endif
276
+ #if defined(HAVE_ENUM_THRESHOLDEVALUATEOPERATOR)
277
+ ThresholdQuantumOperator, /**< threshold */
278
+ #endif
279
+ #if defined(HAVE_ENUM_THRESHOLDBLACKEVALUATEOPERATOR)
280
+ ThresholdBlackQuantumOperator, /**< threshold black */
281
+ #endif
282
+ #if defined(HAVE_ENUM_THRESHOLDWHITEEVALUATEOPERATOR)
283
+ ThresholdWhiteQuantumOperator, /**< threshold white */
284
+ #endif
285
+ #if defined(HAVE_ENUM_GAUSSIANNOISEEVALUATEOPERATOR)
286
+ GaussianNoiseQuantumOperator, /**< gaussian noise */
287
+ #endif
288
+ #if defined(HAVE_ENUM_IMPULSENOISEEVALUATEOPERATOR)
289
+ ImpulseNoiseQuantumOperator, /**< impulse noise */
290
+ #endif
291
+ #if defined(HAVE_ENUM_LAPLACIANNOISEEVALUATEOPERATOR)
292
+ LaplacianNoiseQuantumOperator, /**< laplacian noise */
293
+ #endif
294
+ #if defined(HAVE_ENUM_MULTIPLICATIVENOISEEVALUATEOPERATOR)
295
+ MultiplicativeNoiseQuantumOperator, /**< multiplicative noise */
296
+ #endif
297
+ #if defined(HAVE_ENUM_POISSONNOISEEVALUATEOPERATOR)
298
+ PoissonNoiseQuantumOperator, /**< poisson noise */
299
+ #endif
300
+ #if defined(HAVE_ENUM_UNIFORMNOISEEVALUATEOPERATOR)
301
+ UniformNoiseQuantumOperator, /**< uniform noise */
302
+ #endif
303
+ #if defined(HAVE_ENUM_COSINEEVALUATEOPERATOR)
304
+ CosineQuantumOperator, /**< cosine */
305
+ #endif
306
+ #if defined(HAVE_ENUM_SINEEVALUATEOPERATOR)
307
+ SineQuantumOperator, /**< sine */
308
+ #endif
309
+ #if defined(HAVE_ENUM_ADDMODULUSEVALUATEOPERATOR)
310
+ AddModulusQuantumOperator /**< add modulus */
311
+ #endif
312
+ } QuantumExpressionOperator ;
313
+
314
+
315
+ /** This implements the "omitted storage class model" for external variables.
316
+ * (Ref: Harbison & Steele.) The rmmain.c file defines MAIN, which causes
317
+ * the single defining declarations to be generated. No other source files
318
+ * define MAIN and therefore generate referencing declarations.
319
+ */
320
+ #undef EXTERN
321
+ #if defined(MAIN)
322
+ #define EXTERN
323
+ #else
324
+ #define EXTERN extern
325
+ #endif
326
+
327
+ /*
328
+ * RMagick Module and Class VALUEs
329
+ */
330
+ EXTERN VALUE Module_Magick;
331
+ EXTERN VALUE Class_ImageList;
332
+ EXTERN VALUE Class_Info;
333
+ EXTERN VALUE Class_Draw;
334
+ EXTERN VALUE Class_DrawOptions;
335
+ EXTERN VALUE Class_Image;
336
+ EXTERN VALUE Class_Montage;
337
+ EXTERN VALUE Class_ImageMagickError;
338
+ EXTERN VALUE Class_FatalImageMagickError;
339
+ EXTERN VALUE Class_DestroyedImageError;
340
+ EXTERN VALUE Class_GradientFill;
341
+ EXTERN VALUE Class_TextureFill;
342
+ EXTERN VALUE Class_AffineMatrix;
343
+ EXTERN VALUE Class_Chromaticity;
344
+ EXTERN VALUE Class_Color;
345
+ EXTERN VALUE Class_Font;
346
+ EXTERN VALUE Class_Geometry;
347
+ EXTERN VALUE Class_GeometryValue; // Defined in RMagick.rb
348
+ EXTERN VALUE Class_Pixel;
349
+ EXTERN VALUE Class_Point;
350
+ EXTERN VALUE Class_PolaroidOptions;
351
+ EXTERN VALUE Class_Primary;
352
+ EXTERN VALUE Class_Rectangle;
353
+ EXTERN VALUE Class_Segment;
354
+ EXTERN VALUE Class_TypeMetric;
355
+ EXTERN VALUE Class_MetricType;
356
+ EXTERN VALUE Class_QuantumExpressionOperator;
357
+
358
+ // Enum classes
359
+ EXTERN VALUE Class_Enum;
360
+ EXTERN VALUE Class_AlignType;
361
+ EXTERN VALUE Class_AlphaChannelType;
362
+ EXTERN VALUE Class_AnchorType;
363
+ EXTERN VALUE Class_ChannelType;
364
+ EXTERN VALUE Class_ClassType;
365
+ EXTERN VALUE Class_ColorspaceType;
366
+ EXTERN VALUE Class_ComplianceType;
367
+ EXTERN VALUE Class_CompositeOperator;
368
+ EXTERN VALUE Class_CompressionType;
369
+ EXTERN VALUE Class_DecorationType;
370
+ EXTERN VALUE Class_DisposeType;
371
+ EXTERN VALUE Class_DistortImageMethod;
372
+ #if defined(HAVE_TYPE_DITHERMETHOD)
373
+ EXTERN VALUE Class_DitherMethod;
374
+ #endif
375
+ EXTERN VALUE Class_EndianType;
376
+ EXTERN VALUE Class_FilterTypes;
377
+ EXTERN VALUE Class_GravityType;
378
+ EXTERN VALUE Class_ImageType;
379
+ EXTERN VALUE Class_InterlaceType;
380
+ EXTERN VALUE Class_InterpolatePixelMethod;
381
+ EXTERN VALUE CLASS_LAYERMETHODTYPE;
382
+ EXTERN VALUE Class_MagickFunction;
383
+ EXTERN VALUE Class_NoiseType;
384
+ EXTERN VALUE Class_OrientationType;
385
+ EXTERN VALUE Class_PaintMethod;
386
+ EXTERN VALUE Class_PreviewType;
387
+ EXTERN VALUE Class_RenderingIntent;
388
+ EXTERN VALUE Class_ResolutionType;
389
+ #if defined(HAVE_SPARSECOLORIMAGE)
390
+ EXTERN VALUE Class_SparseColorMethod;
391
+ #endif
392
+ EXTERN VALUE Class_SpreadMethod;
393
+ EXTERN VALUE Class_StorageType;
394
+ EXTERN VALUE Class_StretchType;
395
+ EXTERN VALUE Class_StyleType;
396
+ EXTERN VALUE Class_WeightType;
397
+ EXTERN VALUE Class_VirtualPixelMethod;
398
+
399
+ /**
400
+ * Commonly-used IDs
401
+ */
402
+ EXTERN ID rm_ID_trace_proc; /**< "@trace_proc" */
403
+ EXTERN ID rm_ID_call; /**< "call" */
404
+ EXTERN ID rm_ID_changed; /**< "changed" */
405
+ EXTERN ID rm_ID_cur_image; /**< "cur_image" */
406
+ EXTERN ID rm_ID_dup; /**< "dup" */
407
+ EXTERN ID rm_ID_fill; /**< "fill" */
408
+ EXTERN ID rm_ID_flag; /**< "flag" */
409
+ EXTERN ID rm_ID_from_s; /**< "from_s" */
410
+ EXTERN ID rm_ID_Geometry; /**< "Geometry" */
411
+ EXTERN ID rm_ID_GeometryValue; /**< "GeometryValue" */
412
+ EXTERN ID rm_ID_has_key_q; /**< "has_key?" */
413
+ EXTERN ID rm_ID_height; /**< "height" */
414
+ EXTERN ID rm_ID_initialize_copy; /**< "initialize_copy" */
415
+ EXTERN ID rm_ID_length; /**< "length" */
416
+ EXTERN ID rm_ID_notify_observers; /**< "notify_observers" */
417
+ EXTERN ID rm_ID_new; /**< "new" */
418
+ EXTERN ID rm_ID_push; /**< "push" */
419
+ EXTERN ID rm_ID_spaceship; /**< "<=>" */
420
+ EXTERN ID rm_ID_to_i; /**< "to_i" */
421
+ EXTERN ID rm_ID_to_s; /**< "to_s" */
422
+ EXTERN ID rm_ID_values; /**< "values" */
423
+ EXTERN ID rm_ID_width; /**< "width" */
424
+ EXTERN ID rm_ID_x; /**< "x" */
425
+ EXTERN ID rm_ID_y; /**< "y" */
426
+
427
+ #if !defined(min)
428
+ #define min(a,b) ((a)<(b)?(a):(b)) /**< min of two values */
429
+ #endif
430
+ #if !defined(max)
431
+ #define max(a,b) ((a)>(b)?(a):(b)) /**< max of two values */
432
+ #endif
433
+
434
+ /**
435
+ Handle warnings & errors
436
+ */
437
+ //! Handle warnings & errors
438
+ #define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError);
439
+
440
+
441
+ /*
442
+ Call rb_define_method for an attribute accessor method
443
+ */
444
+ //! attribute reader
445
+ #define DCL_ATTR_READER(class, attr) \
446
+ rb_define_method(Class_##class, #attr, class##_##attr, 0);
447
+ //! attribute writer
448
+ #define DCL_ATTR_WRITER(class, attr) \
449
+ rb_define_method(Class_##class, #attr "=", class##_##attr##_eq, 1);
450
+ //! attribute accessor
451
+ #define DCL_ATTR_ACCESSOR(class, attr) \
452
+ DCL_ATTR_READER(class, attr) \
453
+ DCL_ATTR_WRITER(class, attr)
454
+ //! Borrow another class' attribute writer definition
455
+ #define SHARE_ATTR_WRITER(to, from, attr) \
456
+ rb_define_method(Class_##to, #attr "=", from##_##attr##_eq, 1);
457
+
458
+ /*
459
+ Define simple attribute accessor methods (boolean, int, string, and double types)
460
+ */
461
+ #define C_bool_to_R_bool(attr) (attr) ? Qtrue : Qfalse /**< C boolean -> Ruby boolean */
462
+ #define R_bool_to_C_bool(attr) RTEST(attr) /**< C boolean <- Ruby boolean */
463
+ #define C_int_to_R_int(attr) INT2FIX(attr) /**< C int -> Ruby int */
464
+ #define R_int_to_C_int(attr) NUM2INT(attr) /**< C int <- Ruby int */
465
+ #define C_long_to_R_long(attr) INT2NUM(attr) /**< C long -> Ruby long */
466
+ #define R_long_to_C_long(attr) NUM2LONG(attr) /**< C long <- Ruby long */
467
+ #define C_ulong_to_R_ulong(attr) UINT2NUM(attr) /**< C unsigned long -> Ruby unsigned long */
468
+ #define R_ulong_to_C_ulong(attr) NUM2ULONG(attr) /**< C unsigned long <- Ruby unsigned long */
469
+ #define C_str_to_R_str(attr) attr ? rb_str_new2(attr) : Qnil /**< C string -> Ruby string */
470
+ #define C_dbl_to_R_dbl(attr) rb_float_new(attr) /**< C double -> Ruby double */
471
+ #define R_dbl_to_C_dbl(attr) NUM2DBL(attr) /**< C double <- Ruby double */
472
+
473
+ //! define attribute reader
474
+ #define DEF_ATTR_READER(class, attr, type) \
475
+ VALUE class##_##attr(VALUE self)\
476
+ {\
477
+ class *ptr;\
478
+ if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
479
+ (void) rm_check_destroyed(self); \
480
+ }\
481
+ Data_Get_Struct(self, class, ptr);\
482
+ return C_##type##_to_R_##type(ptr->attr);\
483
+ }
484
+
485
+ //! define attribute reader when attribute name is different from the field name
486
+ #define DEF_ATTR_READERF(class, attr, field, type) \
487
+ VALUE class##_##attr(VALUE self)\
488
+ {\
489
+ class *ptr;\
490
+ (void) rm_check_destroyed(self); \
491
+ Data_Get_Struct(self, class, ptr);\
492
+ return C_##type##_to_R_##type(ptr->field);\
493
+ }
494
+
495
+ //! define attribute writer
496
+ #define DEF_ATTR_WRITER(class, attr, type) \
497
+ VALUE class##_##attr##_eq(VALUE self, VALUE val)\
498
+ {\
499
+ class *ptr;\
500
+ if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
501
+ (void) rm_check_destroyed(self); \
502
+ }\
503
+ rb_check_frozen(self);\
504
+ Data_Get_Struct(self, class, ptr);\
505
+ ptr->attr = R_##type##_to_C_##type(val);\
506
+ return self;\
507
+ }
508
+
509
+ //! define attribute accessor
510
+ #define DEF_ATTR_ACCESSOR(class, attr, type)\
511
+ DEF_ATTR_READER(class, attr, type)\
512
+ DEF_ATTR_WRITER(class, attr, type)
513
+
514
+ /*
515
+ * Declare attribute accessors
516
+ */
517
+ //! declare attribute reader
518
+ #define ATTR_READER(class, attr) \
519
+ extern VALUE class##_##attr(VALUE);
520
+ //! declare attribute writer
521
+ #define ATTR_WRITER(class, attr) \
522
+ extern VALUE class##_##attr##_eq(VALUE, VALUE);
523
+ //! declare attribute accessor
524
+ #define ATTR_ACCESSOR(class, attr) \
525
+ ATTR_READER(class, attr)\
526
+ ATTR_WRITER(class, attr)
527
+
528
+ /*
529
+ * Define functions to get/set attributes in Image::Info that
530
+ * use the Get/SetImageOption API.
531
+ */
532
+ //! Option attribute reader. For Image::Info.
533
+ #define OPTION_ATTR_READER(opt, key) \
534
+ VALUE Info_##opt(VALUE self)\
535
+ {\
536
+ return get_option(self, #key);\
537
+ }
538
+ //! Option attribute writer. For Image::Info.
539
+ #define OPTION_ATTR_WRITER(opt, key) \
540
+ VALUE Info_##opt##_eq(VALUE self, VALUE string)\
541
+ {\
542
+ return set_option(self, #key, string);\
543
+ }
544
+ //! Option attribute accessor. For Image::Info.
545
+ #define OPTION_ATTR_ACCESSOR(opt, key)\
546
+ OPTION_ATTR_READER(opt, key)\
547
+ OPTION_ATTR_WRITER(opt, key)
548
+
549
+
550
+ /*
551
+ * Declare Pixel channel attribute writers
552
+ */
553
+ //! Pixel channel attribute writer.
554
+ #define DEF_PIXEL_CHANNEL_WRITER(_channel_) \
555
+ extern VALUE \
556
+ Pixel_##_channel_##_eq(VALUE self, VALUE v) \
557
+ { \
558
+ Pixel *pixel; \
559
+ \
560
+ rb_check_frozen(self); \
561
+ Data_Get_Struct(self, Pixel, pixel); \
562
+ pixel->_channel_ = APP2QUANTUM(v); \
563
+ (void) rb_funcall(self, rm_ID_changed, 0); \
564
+ (void) rb_funcall(self, rm_ID_notify_observers, 1, self); \
565
+ return QUANTUM2NUM((pixel->_channel_)); \
566
+ }
567
+
568
+
569
+ /*
570
+ * Declare Pixel CMYK channel attribute accessors
571
+ */
572
+ //! Pixel CMYK channel attribute accessor.
573
+ #define DEF_PIXEL_CMYK_CHANNEL_ACCESSOR(_cmyk_channel_, _rgb_channel_) \
574
+ extern VALUE \
575
+ Pixel_##_cmyk_channel_##_eq(VALUE self, VALUE v) \
576
+ { \
577
+ Pixel *pixel; \
578
+ \
579
+ rb_check_frozen(self); \
580
+ Data_Get_Struct(self, Pixel, pixel); \
581
+ pixel->_rgb_channel_ = APP2QUANTUM(v); \
582
+ (void) rb_funcall(self, rm_ID_changed, 0); \
583
+ (void) rb_funcall(self, rm_ID_notify_observers, 1, self); \
584
+ return QUANTUM2NUM(pixel->_rgb_channel_); \
585
+ } \
586
+ \
587
+ extern VALUE \
588
+ Pixel_##_cmyk_channel_(VALUE self) \
589
+ { \
590
+ Pixel *pixel; \
591
+ \
592
+ Data_Get_Struct(self, Pixel, pixel); \
593
+ return INT2NUM(pixel->_rgb_channel_); \
594
+ }
595
+
596
+
597
+ /*
598
+ * Enum constants - define a subclass of Enum for the specified enumeration.
599
+ * Define an instance of the subclass for each member in the enumeration.
600
+ * Initialize each instance with its name and value.
601
+ */
602
+ //! define Ruby enum
603
+ #define DEF_ENUM(tag) {\
604
+ VALUE _cls, _enum;\
605
+ _cls = Class_##tag = rm_define_enum_type(#tag);
606
+
607
+ //! define Ruby enumerator elements
608
+ #define ENUMERATOR(val)\
609
+ _enum = rm_enum_new(_cls, ID2SYM(rb_intern(#val)), INT2NUM(val));\
610
+ rb_define_const(Module_Magick, #val, _enum);
611
+ //! end of an enumerator
612
+ #define END_ENUM }
613
+
614
+ //! Define a Magick module constant
615
+ #if MAGICKCORE_QUANTUM_DEPTH == 64
616
+ #define DEF_CONST(constant) rb_define_const(Module_Magick, #constant, ULL2NUM(constant))
617
+ #else // MAGICKCORE_QUANTUM_DEPTH == 8, 16, 32
618
+ #define DEF_CONST(constant) rb_define_const(Module_Magick, #constant, UINT2NUM(constant))
619
+ #endif
620
+
621
+
622
+ //! Convert a Ruby enum constant back to a C enum member.
623
+ #define VALUE_TO_ENUM(value, e, type) \
624
+ do {\
625
+ MagickEnum *magick_enum;\
626
+ if (CLASS_OF(value) != Class_##type)\
627
+ rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s"\
628
+ , rb_class2name(Class_##type),rb_class2name(CLASS_OF(value)));\
629
+ Data_Get_Struct(value, MagickEnum, magick_enum);\
630
+ e = (type)(magick_enum->val);\
631
+ } while(0)
632
+
633
+ //! create case statement, mapping enum to its name
634
+ #define ENUM_TO_NAME(_enum) case _enum: return #_enum;
635
+
636
+
637
+ // Method, external function declarations. These declarations are
638
+ // grouped by the source file in which the methods are defined.
639
+
640
+ // We don't need any "extern/no extern" stuff here. An external function
641
+ // declaration can refer to a function defined in another source file or
642
+ // the same source file.
643
+
644
+
645
+ // rmmain.c
646
+ extern void Init_RMagick2(void);
647
+
648
+
649
+ // rmagick.c
650
+ extern VALUE Magick_colors(VALUE);
651
+ extern VALUE Magick_fonts(VALUE);
652
+ extern VALUE Magick_init_formats(VALUE);
653
+ extern VALUE Magick_limit_resource(int, VALUE *, VALUE);
654
+ extern VALUE Magick_set_cache_threshold(VALUE, VALUE);
655
+ extern VALUE Magick_set_log_event_mask(int, VALUE *, VALUE);
656
+ extern VALUE Magick_set_log_format(VALUE, VALUE);
657
+
658
+ // rmdraw.c
659
+ ATTR_WRITER(Draw, affine)
660
+ ATTR_WRITER(Draw, align)
661
+ ATTR_WRITER(Draw, border_color)
662
+ ATTR_WRITER(Draw, decorate)
663
+ ATTR_WRITER(Draw, density)
664
+ ATTR_WRITER(Draw, encoding)
665
+ ATTR_WRITER(Draw, fill)
666
+ ATTR_WRITER(Draw, fill_pattern)
667
+ ATTR_WRITER(Draw, font)
668
+ ATTR_WRITER(Draw, font_family)
669
+ ATTR_WRITER(Draw, font_stretch)
670
+ ATTR_WRITER(Draw, font_style)
671
+ ATTR_WRITER(Draw, font_weight)
672
+ ATTR_WRITER(Draw, gravity)
673
+ ATTR_WRITER(Draw, interline_spacing)
674
+ ATTR_WRITER(Draw, interword_spacing)
675
+ ATTR_WRITER(Draw, kerning)
676
+ ATTR_WRITER(Draw, pointsize)
677
+ ATTR_WRITER(Draw, rotation)
678
+ ATTR_WRITER(Draw, stroke)
679
+ ATTR_WRITER(Draw, stroke_pattern)
680
+ ATTR_WRITER(Draw, stroke_width)
681
+ ATTR_WRITER(Draw, text_antialias)
682
+ ATTR_WRITER(Draw, tile)
683
+ ATTR_WRITER(Draw, undercolor)
684
+ extern VALUE Draw_alloc(VALUE);
685
+ extern VALUE Draw_annotate(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
686
+ extern VALUE Draw_clone(VALUE);
687
+ extern VALUE Draw_composite(int, VALUE *, VALUE);
688
+ extern VALUE Draw_draw(VALUE, VALUE);
689
+ extern VALUE Draw_dup(VALUE);
690
+ extern VALUE Draw_get_multiline_type_metrics(int, VALUE *, VALUE);
691
+ extern VALUE Draw_get_type_metrics(int, VALUE *, VALUE);
692
+ extern VALUE Draw_init_copy(VALUE, VALUE);
693
+ extern VALUE Draw_initialize(VALUE);
694
+ extern VALUE Draw_inspect(VALUE);
695
+ extern VALUE Draw_marshal_dump(VALUE);
696
+ extern VALUE Draw_marshal_load(VALUE, VALUE);
697
+ extern VALUE Draw_primitive(VALUE, VALUE);
698
+ extern VALUE DrawOptions_alloc(VALUE);
699
+ extern VALUE DrawOptions_initialize(VALUE);
700
+
701
+
702
+ extern VALUE PolaroidOptions_alloc(VALUE);
703
+ extern VALUE PolaroidOptions_initialize(VALUE);
704
+ extern VALUE rm_polaroid_new(void);
705
+ ATTR_WRITER(PolaroidOptions, shadow_color);
706
+ ATTR_WRITER(PolaroidOptions, border_color);
707
+
708
+
709
+ // rmmontage.c
710
+ ATTR_WRITER(Montage, background_color)
711
+ ATTR_WRITER(Montage, border_color)
712
+ ATTR_WRITER(Montage, border_width)
713
+ ATTR_WRITER(Montage, compose)
714
+ ATTR_WRITER(Montage, filename)
715
+ ATTR_WRITER(Montage, fill)
716
+ ATTR_WRITER(Montage, font)
717
+ ATTR_WRITER(Montage, frame)
718
+ ATTR_WRITER(Montage, geometry)
719
+ ATTR_WRITER(Montage, gravity)
720
+ ATTR_WRITER(Montage, matte_color)
721
+ ATTR_WRITER(Montage, pointsize)
722
+ ATTR_WRITER(Montage, shadow)
723
+ ATTR_WRITER(Montage, stroke)
724
+ ATTR_WRITER(Montage, texture)
725
+ ATTR_WRITER(Montage, tile)
726
+ ATTR_WRITER(Montage, title)
727
+ extern VALUE Montage_initialize(VALUE);
728
+ extern VALUE Montage_alloc(VALUE);
729
+ extern VALUE rm_montage_new(void);
730
+
731
+
732
+ // rmilist.c
733
+ extern VALUE ImageList_animate(int, VALUE *, VALUE);
734
+ extern VALUE ImageList_append(VALUE, VALUE);
735
+ extern VALUE ImageList_average(VALUE);
736
+ extern VALUE ImageList_coalesce(VALUE);
737
+ extern VALUE ImageList_composite_layers(int, VALUE *, VALUE);
738
+ extern VALUE ImageList_deconstruct(VALUE);
739
+ extern VALUE ImageList_display(VALUE);
740
+ extern VALUE ImageList_flatten_images(VALUE);
741
+ extern VALUE ImageList_fx(int, VALUE *, VALUE);
742
+ extern VALUE ImageList_map(int, VALUE *, VALUE);
743
+ extern VALUE ImageList_montage(VALUE);
744
+ extern VALUE ImageList_morph(VALUE, VALUE);
745
+ extern VALUE ImageList_mosaic(VALUE);
746
+ extern VALUE ImageList_optimize_layers(VALUE, VALUE);
747
+ extern VALUE ImageList_quantize(int, VALUE*, VALUE);
748
+ extern VALUE ImageList_remap(int, VALUE *, VALUE);
749
+ extern VALUE ImageList_to_blob(VALUE);
750
+ extern VALUE ImageList_write(VALUE, VALUE);
751
+
752
+ extern VALUE rm_imagelist_from_images(Image *);
753
+
754
+
755
+ // rminfo.c
756
+ ATTR_ACCESSOR(Info, antialias)
757
+ ATTR_ACCESSOR(Info, attenuate)
758
+ ATTR_ACCESSOR(Info, authenticate)
759
+ ATTR_ACCESSOR(Info, background_color)
760
+ ATTR_ACCESSOR(Info, border_color)
761
+ ATTR_ACCESSOR(Info, caption)
762
+ ATTR_ACCESSOR(Info, colorspace)
763
+ ATTR_ACCESSOR(Info, comment)
764
+ ATTR_ACCESSOR(Info, compression)
765
+ ATTR_ACCESSOR(Info, delay)
766
+ ATTR_ACCESSOR(Info, density)
767
+ ATTR_ACCESSOR(Info, depth)
768
+ ATTR_ACCESSOR(Info, dispose)
769
+ ATTR_ACCESSOR(Info, dither)
770
+ ATTR_ACCESSOR(Info, encoding)
771
+ ATTR_ACCESSOR(Info, endian)
772
+ ATTR_ACCESSOR(Info, extract)
773
+ ATTR_ACCESSOR(Info, filename)
774
+ ATTR_ACCESSOR(Info, fill)
775
+ ATTR_ACCESSOR(Info, font)
776
+ ATTR_ACCESSOR(Info, format)
777
+ ATTR_ACCESSOR(Info, fuzz)
778
+ ATTR_ACCESSOR(Info, gravity)
779
+ ATTR_ACCESSOR(Info, group)
780
+ ATTR_ACCESSOR(Info, image_type)
781
+ ATTR_ACCESSOR(Info, interlace)
782
+ ATTR_ACCESSOR(Info, label)
783
+ ATTR_ACCESSOR(Info, matte_color)
784
+ ATTR_WRITER(Info, monitor)
785
+ ATTR_ACCESSOR(Info, monochrome)
786
+ ATTR_ACCESSOR(Info, number_scenes)
787
+ ATTR_ACCESSOR(Info, orientation)
788
+ ATTR_ACCESSOR(Info, origin)
789
+ ATTR_ACCESSOR(Info, page)
790
+ ATTR_ACCESSOR(Info, pen)
791
+ // ATTR_ACCESSOR(Info, ping) obsolete
792
+ ATTR_ACCESSOR(Info, pointsize)
793
+ ATTR_ACCESSOR(Info, quality)
794
+ ATTR_ACCESSOR(Info, sampling_factor)
795
+ ATTR_ACCESSOR(Info, scene)
796
+ ATTR_ACCESSOR(Info, server_name)
797
+ ATTR_ACCESSOR(Info, size)
798
+ ATTR_ACCESSOR(Info, stroke)
799
+ ATTR_ACCESSOR(Info, stroke_width)
800
+ ATTR_WRITER(Info, texture)
801
+ ATTR_ACCESSOR(Info, tile_offset)
802
+ ATTR_ACCESSOR(Info, transparent_color)
803
+ ATTR_ACCESSOR(Info, undercolor)
804
+ ATTR_ACCESSOR(Info, units)
805
+ ATTR_ACCESSOR(Info, view)
806
+ //ATTR_ACCESSOR(Info, verbose)
807
+
808
+ extern VALUE Info_alloc(VALUE);
809
+
810
+ extern VALUE Info_define(int, VALUE *, VALUE);
811
+ extern VALUE Info_aset(int, VALUE *, VALUE);
812
+ extern VALUE Info_aref(int, VALUE *, VALUE);
813
+ extern VALUE Info_channel(int, VALUE *, VALUE);
814
+ extern VALUE Info_undefine(VALUE, VALUE, VALUE);
815
+ extern VALUE Info_initialize(VALUE);
816
+ extern VALUE rm_info_new(void);
817
+ extern DisposeType rm_dispose_to_enum(const char *);
818
+ extern GravityType rm_gravity_to_enum(const char *);
819
+
820
+ // rmimage.c
821
+ ATTR_WRITER(Image, alpha)
822
+ ATTR_ACCESSOR(Image, background_color)
823
+ ATTR_READER(Image, base_columns)
824
+ ATTR_READER(Image, base_filename)
825
+ ATTR_READER(Image, base_rows)
826
+ ATTR_ACCESSOR(Image, bias)
827
+ ATTR_ACCESSOR(Image, black_point_compensation)
828
+ ATTR_ACCESSOR(Image, blur)
829
+ ATTR_ACCESSOR(Image, border_color)
830
+ ATTR_READER(Image, bounding_box)
831
+ ATTR_ACCESSOR(Image, chromaticity)
832
+ ATTR_ACCESSOR(Image, class_type)
833
+ ATTR_ACCESSOR(Image, color_profile)
834
+ ATTR_READER(Image, colors)
835
+ ATTR_ACCESSOR(Image, colorspace)
836
+ ATTR_READER(Image, columns)
837
+ ATTR_ACCESSOR(Image, compose)
838
+ ATTR_ACCESSOR(Image, compression)
839
+ ATTR_ACCESSOR(Image, delay)
840
+ ATTR_ACCESSOR(Image, density)
841
+ ATTR_READER(Image, depth)
842
+ ATTR_READER(Image, directory)
843
+ ATTR_ACCESSOR(Image, dispose)
844
+ ATTR_ACCESSOR(Image, endian)
845
+ ATTR_ACCESSOR(Image, extract_info)
846
+ ATTR_READER(Image, filename)
847
+ ATTR_READER(Image, filesize)
848
+ ATTR_ACCESSOR(Image, filter)
849
+ ATTR_ACCESSOR(Image, format)
850
+ ATTR_ACCESSOR(Image, fuzz)
851
+ ATTR_ACCESSOR(Image, gamma)
852
+ ATTR_ACCESSOR(Image, geometry)
853
+ ATTR_ACCESSOR(Image, gravity)
854
+ ATTR_ACCESSOR(Image, image_type)
855
+ ATTR_ACCESSOR(Image, interlace)
856
+ ATTR_ACCESSOR(Image, iptc_profile)
857
+ ATTR_ACCESSOR(Image, iterations)
858
+ ATTR_WRITER(Image, mask)
859
+ ATTR_ACCESSOR(Image, matte)
860
+ ATTR_ACCESSOR(Image, matte_color)
861
+ ATTR_READER(Image, mean_error_per_pixel)
862
+ ATTR_READER(Image, mime_type)
863
+ ATTR_WRITER(Image, monitor)
864
+ ATTR_READER(Image, montage)
865
+ ATTR_READER(Image, normalized_mean_error)
866
+ ATTR_READER(Image, normalized_maximum_error)
867
+ ATTR_READER(Image, number_colors)
868
+ ATTR_ACCESSOR(Image, offset)
869
+ ATTR_WRITER(Image, opacity)
870
+ ATTR_ACCESSOR(Image, orientation)
871
+ ATTR_ACCESSOR(Image, page)
872
+ ATTR_ACCESSOR(Image, pixel_interpolation_method)
873
+ ATTR_READER(Image, quality)
874
+ ATTR_READER(Image, quantum_depth)
875
+ ATTR_ACCESSOR(Image, rendering_intent)
876
+ ATTR_READER(Image, rows)
877
+ ATTR_READER(Image, scene)
878
+ ATTR_ACCESSOR(Image, start_loop)
879
+ ATTR_ACCESSOR(Image, ticks_per_second)
880
+ ATTR_READER(Image, total_colors)
881
+ ATTR_READER(Image, total_ink_density)
882
+ ATTR_ACCESSOR(Image, transparent_color)
883
+ ATTR_ACCESSOR(Image, units)
884
+ ATTR_ACCESSOR(Image, virtual_pixel_method)
885
+ ATTR_ACCESSOR(Image, x_resolution)
886
+ ATTR_ACCESSOR(Image, y_resolution)
887
+
888
+ extern ChannelType extract_channels(int *, VALUE *);
889
+ extern void raise_ChannelType_error(VALUE);
890
+ extern void add_format_prefix(Info *, VALUE);
891
+
892
+ extern VALUE Image_alloc(VALUE);
893
+ extern VALUE Image_initialize(int, VALUE *, VALUE);
894
+ extern VALUE Image_adaptive_blur(int, VALUE *, VALUE);
895
+ extern VALUE Image_adaptive_blur_channel(int, VALUE *, VALUE);
896
+ extern VALUE Image_adaptive_resize(int, VALUE *, VALUE);
897
+ extern VALUE Image_adaptive_sharpen(int, VALUE *, VALUE);
898
+ extern VALUE Image_adaptive_sharpen_channel(int, VALUE *, VALUE);
899
+ extern VALUE Image_adaptive_threshold(int, VALUE *, VALUE);
900
+ extern VALUE Image_add_compose_mask(VALUE, VALUE);
901
+ extern VALUE Image_add_noise(VALUE, VALUE);
902
+ extern VALUE Image_add_noise_channel(int, VALUE *, VALUE);
903
+ extern VALUE Image_add_profile(VALUE, VALUE);
904
+ extern VALUE Image_affine_transform(VALUE, VALUE);
905
+ extern VALUE Image_alpha(int, VALUE *, VALUE);
906
+ extern VALUE Image_alpha_q(VALUE);
907
+ extern VALUE Image_aref(VALUE, VALUE);
908
+ extern VALUE Image_aset(VALUE, VALUE, VALUE);
909
+ extern VALUE Image_auto_gamma_channel(int, VALUE *, VALUE);
910
+ extern VALUE Image_auto_level_channel(int, VALUE *, VALUE);
911
+ extern VALUE Image_auto_orient(VALUE);
912
+ extern VALUE Image_auto_orient_bang(VALUE);
913
+ extern VALUE Image_properties(VALUE);
914
+ extern VALUE Image_bilevel_channel(int, VALUE *, VALUE);
915
+ extern VALUE Image_black_threshold(int, VALUE *, VALUE);
916
+ extern VALUE Image_blend(int, VALUE *, VALUE);
917
+ extern VALUE Image_blue_shift(int, VALUE *, VALUE);
918
+ extern VALUE Image_blur_image(int, VALUE *, VALUE);
919
+ extern VALUE Image_blur_channel(int, VALUE *, VALUE);
920
+ extern VALUE Image_border(VALUE, VALUE, VALUE, VALUE);
921
+ extern VALUE Image_border_bang(VALUE, VALUE, VALUE, VALUE);
922
+ extern VALUE Image_capture(int, VALUE *, VALUE);
923
+ extern VALUE Image_change_geometry(VALUE, VALUE);
924
+ extern VALUE Image_changed_q(VALUE);
925
+ extern VALUE Image_channel(VALUE, VALUE);
926
+ extern VALUE Image_check_destroyed(VALUE);
927
+ extern VALUE Image_compare_channel(int, VALUE *, VALUE);
928
+ extern VALUE Image_channel_depth(int, VALUE *, VALUE);
929
+ extern VALUE Image_channel_extrema(int, VALUE *, VALUE);
930
+ extern VALUE Image_channel_mean(int, VALUE *, VALUE);
931
+ extern VALUE Image_charcoal(int, VALUE *, VALUE);
932
+ extern VALUE Image_chop(VALUE, VALUE, VALUE, VALUE, VALUE);
933
+ extern VALUE Image_clone(VALUE);
934
+ extern VALUE Image_clut_channel(int, VALUE *, VALUE);
935
+ extern VALUE Image_color_flood_fill(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
936
+ extern VALUE Image_color_histogram(VALUE);
937
+ extern VALUE Image_colorize(int, VALUE *, VALUE);
938
+ extern VALUE Image_colormap(int, VALUE *, VALUE);
939
+ extern VALUE Image_combine(int, VALUE *, VALUE);
940
+ extern VALUE Image_composite(int, VALUE *, VALUE);
941
+ extern VALUE Image_composite_affine(VALUE, VALUE, VALUE);
942
+ extern VALUE Image_composite_bang(int, VALUE *, VALUE);
943
+ extern VALUE Image_composite_channel(int, VALUE *, VALUE);
944
+ extern VALUE Image_composite_channel_bang(int, VALUE *, VALUE);
945
+ extern VALUE Image_composite_mathematics(int, VALUE *, VALUE);
946
+ extern VALUE Image_composite_tiled(int, VALUE *, VALUE);
947
+ extern VALUE Image_composite_tiled_bang(int, VALUE *, VALUE);
948
+ extern VALUE Image_compress_colormap_bang(VALUE);
949
+ extern VALUE Image_constitute(VALUE, VALUE, VALUE, VALUE, VALUE);
950
+ extern VALUE Image_contrast(int, VALUE *, VALUE);
951
+ extern VALUE Image_contrast_stretch_channel(int, VALUE *, VALUE);
952
+ extern VALUE Image_convolve(VALUE, VALUE, VALUE);
953
+ extern VALUE Image_convolve_channel(int, VALUE *, VALUE);
954
+ extern VALUE Image_copy(VALUE);
955
+ extern VALUE Image_crop(int, VALUE *, VALUE);
956
+ extern VALUE Image_crop_bang(int, VALUE *, VALUE);
957
+ extern VALUE Image_cycle_colormap(VALUE, VALUE);
958
+ extern VALUE Image_decipher(VALUE, VALUE);
959
+ extern VALUE Image_define(VALUE, VALUE, VALUE);
960
+ extern VALUE Image_delete_profile(VALUE, VALUE);
961
+ extern VALUE Image_delete_compose_mask(VALUE);
962
+ extern VALUE Image_deskew(int, VALUE *, VALUE);
963
+ extern VALUE Image_despeckle(VALUE);
964
+ extern VALUE Image_destroy_bang(VALUE);
965
+ extern VALUE Image_destroyed_q(VALUE);
966
+ extern VALUE Image_difference(VALUE, VALUE);
967
+ extern VALUE Image_dispatch(int, VALUE *, VALUE);
968
+ extern VALUE Image_displace(int, VALUE *, VALUE);
969
+ extern VALUE Image_display(VALUE);
970
+ extern VALUE Image_dissolve(int, VALUE *, VALUE);
971
+ extern VALUE Image_distort(int, VALUE *, VALUE);
972
+ extern VALUE Image_distortion_channel(int, VALUE *, VALUE);
973
+ extern VALUE Image__dump(VALUE, VALUE);
974
+ extern VALUE Image_dup(VALUE);
975
+ extern VALUE Image_each_profile(VALUE);
976
+ extern VALUE Image_edge(int, VALUE *, VALUE);
977
+ extern VALUE Image_emboss(int, VALUE *, VALUE);
978
+ extern VALUE Image_encipher(VALUE, VALUE);
979
+ extern VALUE Image_enhance(VALUE);
980
+ extern VALUE Image_equalize(VALUE);
981
+ extern VALUE Image_equalize_channel(int, VALUE *, VALUE);
982
+ extern VALUE Image_erase_bang(VALUE);
983
+ extern VALUE Image_excerpt(VALUE, VALUE, VALUE, VALUE, VALUE);
984
+ extern VALUE Image_excerpt_bang(VALUE, VALUE, VALUE, VALUE, VALUE);
985
+ extern VALUE Image_export_pixels(int, VALUE *, VALUE);
986
+ extern VALUE Image_export_pixels_to_str(int, VALUE *, VALUE);
987
+ extern VALUE Image_extent(int, VALUE *, VALUE);
988
+ extern VALUE Image_find_similar_region(int, VALUE *, VALUE);
989
+ extern VALUE Image_flip(VALUE);
990
+ extern VALUE Image_flip_bang(VALUE);
991
+ extern VALUE Image_flop(VALUE);
992
+ extern VALUE Image_flop_bang(VALUE);
993
+ extern VALUE Image_frame(int, VALUE *, VALUE);
994
+ extern VALUE Image_from_blob(VALUE, VALUE);
995
+ extern VALUE Image_function_channel(int, VALUE *, VALUE);
996
+ extern VALUE Image_gamma_channel(int, VALUE *, VALUE);
997
+ extern VALUE Image_gamma_correct(int, VALUE *, VALUE);
998
+ extern VALUE Image_gaussian_blur(int, VALUE *, VALUE);
999
+ extern VALUE Image_gaussian_blur_channel(int, VALUE *, VALUE);
1000
+ extern VALUE Image_get_pixels(VALUE, VALUE, VALUE, VALUE, VALUE);
1001
+ extern VALUE Image_gray_q(VALUE);
1002
+ extern VALUE Image_histogram_q(VALUE);
1003
+ extern VALUE Image_implode(int, VALUE *, VALUE);
1004
+ extern VALUE Image_import_pixels(int, VALUE *, VALUE);
1005
+ extern VALUE Image_init_copy(VALUE, VALUE);
1006
+ extern VALUE Image_inspect(VALUE);
1007
+ extern VALUE Image_level2(int, VALUE *, VALUE);
1008
+ extern VALUE Image_level_channel(int, VALUE *, VALUE);
1009
+ extern VALUE Image_level_colors(int, VALUE *, VALUE);
1010
+ extern VALUE Image_levelize_channel(int, VALUE *, VALUE);
1011
+ extern VALUE Image_linear_stretch(int, VALUE *, VALUE);
1012
+ extern VALUE Image_liquid_rescale(int, VALUE *, VALUE);
1013
+ extern VALUE Image__load(VALUE, VALUE);
1014
+ extern VALUE Image_magnify(VALUE);
1015
+ extern VALUE Image_magnify_bang(VALUE);
1016
+ extern VALUE Image_map(int, VALUE *, VALUE);
1017
+ extern VALUE Image_marshal_dump(VALUE);
1018
+ extern VALUE Image_marshal_load(VALUE, VALUE);
1019
+ extern VALUE Image_mask(int, VALUE *, VALUE);
1020
+ extern VALUE Image_matte_flood_fill(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
1021
+ extern VALUE Image_median_filter(int, VALUE *, VALUE);
1022
+ extern VALUE Image_minify(VALUE);
1023
+ extern VALUE Image_minify_bang(VALUE);
1024
+ extern VALUE Image_modulate(int, VALUE *, VALUE);
1025
+ extern VALUE Image_monochrome_q(VALUE);
1026
+ extern VALUE Image_motion_blur(int, VALUE *, VALUE);
1027
+ extern VALUE Image_negate(int, VALUE *, VALUE);
1028
+ extern VALUE Image_negate_channel(int, VALUE *, VALUE);
1029
+ extern VALUE Image_normalize(VALUE);
1030
+ extern VALUE Image_normalize_channel(int, VALUE *, VALUE);
1031
+ extern VALUE Image_oil_paint(int, VALUE *, VALUE);
1032
+ extern VALUE Image_opaque(VALUE, VALUE, VALUE);
1033
+ extern VALUE Image_opaque_channel(int, VALUE *, VALUE);
1034
+ extern VALUE Image_opaque_q(VALUE);
1035
+ extern VALUE Image_ordered_dither(int, VALUE *, VALUE);
1036
+ extern VALUE Image_paint_transparent(int, VALUE *, VALUE);
1037
+ extern VALUE Image_palette_q(VALUE);
1038
+ extern VALUE Image_ping(VALUE, VALUE);
1039
+ extern VALUE Image_pixel_color(int, VALUE *, VALUE);
1040
+ extern VALUE Image_polaroid(int, VALUE *, VALUE);
1041
+ extern VALUE Image_posterize(int, VALUE *, VALUE);
1042
+ extern VALUE Image_preview(VALUE, VALUE);
1043
+ extern VALUE Image_profile_bang(VALUE, VALUE, VALUE);
1044
+ extern VALUE Image_quantize(int, VALUE *, VALUE);
1045
+ extern VALUE Image_quantization_error(VALUE);
1046
+ extern VALUE Image_quantum_operator(int, VALUE *, VALUE);
1047
+ extern VALUE Image_radial_blur(VALUE, VALUE);
1048
+ extern VALUE Image_radial_blur_channel(int, VALUE *, VALUE);
1049
+ extern VALUE Image_raise(int, VALUE *, VALUE);
1050
+ extern VALUE Image_random_threshold_channel(int, VALUE *, VALUE);
1051
+ extern VALUE Image_read(VALUE, VALUE);
1052
+ extern VALUE Image_read_inline(VALUE, VALUE);
1053
+ extern VALUE Image_recolor(VALUE, VALUE);
1054
+ extern VALUE Image_reduce_noise(VALUE, VALUE);
1055
+ extern VALUE Image_remap(int, VALUE *, VALUE);
1056
+ extern VALUE Image_resample(int, VALUE *, VALUE);
1057
+ extern VALUE Image_resample_bang(int, VALUE *, VALUE);
1058
+ extern VALUE Image_resize(int, VALUE *, VALUE);
1059
+ extern VALUE Image_resize_bang(int, VALUE *, VALUE);
1060
+ extern VALUE Image_roll(VALUE, VALUE, VALUE);
1061
+ extern VALUE Image_rotate(int, VALUE *, VALUE);
1062
+ extern VALUE Image_rotate_bang(int, VALUE *, VALUE);
1063
+ extern VALUE Image_sample(int, VALUE *, VALUE);
1064
+ extern VALUE Image_sample_bang(int, VALUE *, VALUE);
1065
+ extern VALUE Image_scale(int, VALUE *, VALUE);
1066
+ extern VALUE Image_scale_bang(int, VALUE *, VALUE);
1067
+ extern VALUE Image_selective_blur_channel(int, VALUE *, VALUE);
1068
+ extern VALUE Image_segment(int, VALUE *, VALUE);
1069
+ extern VALUE Image_separate(int, VALUE *, VALUE);
1070
+ extern VALUE Image_sepiatone(int, VALUE *, VALUE);
1071
+ extern VALUE Image_set_channel_depth(VALUE, VALUE, VALUE);
1072
+ extern VALUE Image_shade(int, VALUE *, VALUE);
1073
+ extern VALUE Image_shadow(int, VALUE *, VALUE);
1074
+ extern VALUE Image_sharpen(int, VALUE *, VALUE);
1075
+ extern VALUE Image_sharpen_channel(int, VALUE *, VALUE);
1076
+ extern VALUE Image_shave(VALUE, VALUE, VALUE);
1077
+ extern VALUE Image_shave_bang(VALUE, VALUE, VALUE);
1078
+ extern VALUE Image_shear(VALUE, VALUE, VALUE);
1079
+ extern VALUE Image_sigmoidal_contrast_channel(int, VALUE *, VALUE);
1080
+ extern VALUE Image_signature(VALUE);
1081
+ extern VALUE Image_sketch(int, VALUE *, VALUE);
1082
+ extern VALUE Image_solarize(int, VALUE *, VALUE);
1083
+ extern VALUE Image_spaceship(VALUE, VALUE);
1084
+ extern VALUE Image_sparse_color(int, VALUE *, VALUE);
1085
+ extern VALUE Image_splice(int, VALUE *, VALUE);
1086
+ extern VALUE Image_spread(int, VALUE *, VALUE);
1087
+ extern VALUE Image_stegano(VALUE, VALUE, VALUE);
1088
+ extern VALUE Image_stereo(VALUE, VALUE);
1089
+ extern VALUE Image_store_pixels(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
1090
+ extern VALUE Image_strip_bang(VALUE);
1091
+ extern VALUE Image_swirl(VALUE, VALUE);
1092
+ extern VALUE Image_sync_profiles(VALUE);
1093
+ extern VALUE Image_texture_flood_fill(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
1094
+ extern VALUE Image_threshold(VALUE, VALUE);
1095
+ extern VALUE Image_thumbnail(int, VALUE *, VALUE);
1096
+ extern VALUE Image_thumbnail_bang(int, VALUE *, VALUE);
1097
+ extern VALUE Image_tint(int, VALUE *, VALUE);
1098
+ extern VALUE Image_to_blob(VALUE);
1099
+ extern VALUE Image_to_color(VALUE, VALUE);
1100
+ extern VALUE Image_transparent(int, VALUE *, VALUE);
1101
+ extern VALUE Image_transparent_chroma(int, VALUE *, VALUE);
1102
+ extern VALUE Image_transpose(VALUE);
1103
+ extern VALUE Image_transpose_bang(VALUE);
1104
+ extern VALUE Image_transverse(VALUE);
1105
+ extern VALUE Image_transverse_bang(VALUE);
1106
+ extern VALUE Image_trim(int, VALUE *, VALUE);
1107
+ extern VALUE Image_trim_bang(int, VALUE *, VALUE);
1108
+ extern VALUE Image_undefine(VALUE, VALUE);
1109
+ extern VALUE Image_unique_colors(VALUE);
1110
+ extern VALUE Image_unsharp_mask(int, VALUE *, VALUE);
1111
+ extern VALUE Image_unsharp_mask_channel(int, VALUE *, VALUE);
1112
+ extern VALUE Image_vignette(int, VALUE *, VALUE);
1113
+ extern VALUE Image_watermark(int, VALUE *, VALUE);
1114
+ extern VALUE Image_wave(int, VALUE *, VALUE);
1115
+ extern VALUE Image_wet_floor(int, VALUE *, VALUE);
1116
+ extern VALUE Image_white_threshold(int, VALUE *, VALUE);
1117
+ extern VALUE Image_write(VALUE, VALUE);
1118
+
1119
+ extern VALUE rm_image_new(Image *);
1120
+ extern void rm_image_destroy(void *);
1121
+ extern void rm_trace_creation(Image *);
1122
+
1123
+
1124
+ // rmfill.c
1125
+ extern VALUE GradientFill_alloc(VALUE);
1126
+ extern VALUE GradientFill_initialize(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
1127
+ extern VALUE GradientFill_fill(VALUE, VALUE);
1128
+
1129
+ extern VALUE TextureFill_alloc(VALUE);
1130
+ extern VALUE TextureFill_initialize(VALUE, VALUE);
1131
+ extern VALUE TextureFill_fill(VALUE, VALUE);
1132
+
1133
+
1134
+ // rmpixel.c
1135
+
1136
+
1137
+ ATTR_ACCESSOR(Pixel, red)
1138
+ ATTR_ACCESSOR(Pixel, green)
1139
+ ATTR_ACCESSOR(Pixel, blue)
1140
+ ATTR_ACCESSOR(Pixel, opacity)
1141
+ ATTR_ACCESSOR(Pixel, cyan)
1142
+ ATTR_ACCESSOR(Pixel, magenta)
1143
+ ATTR_ACCESSOR(Pixel, yellow)
1144
+ ATTR_ACCESSOR(Pixel, black)
1145
+ extern void destroy_Pixel(Pixel *);
1146
+ extern VALUE Pixel_alloc(VALUE);
1147
+ extern VALUE Pixel_case_eq(VALUE, VALUE);
1148
+ extern VALUE Pixel_clone(VALUE);
1149
+ extern VALUE Pixel_dup(VALUE);
1150
+ extern VALUE Pixel_eql_q(VALUE, VALUE);
1151
+ extern VALUE Pixel_fcmp(int, VALUE *, VALUE);
1152
+ extern VALUE Pixel_from_color(VALUE, VALUE);
1153
+ extern VALUE Pixel_from_HSL(VALUE, VALUE);
1154
+ extern VALUE Pixel_from_hsla(int, VALUE *, VALUE);
1155
+ extern VALUE Pixel_hash(VALUE);
1156
+ extern VALUE Pixel_initialize(int, VALUE *, VALUE);
1157
+ extern VALUE Pixel_init_copy(VALUE, VALUE);
1158
+ extern VALUE Pixel_intensity(VALUE);
1159
+ extern VALUE Pixel_marshal_dump(VALUE);
1160
+ extern VALUE Pixel_marshal_load(VALUE, VALUE);
1161
+ extern VALUE Pixel_spaceship(VALUE, VALUE);
1162
+ extern VALUE Pixel_to_color(int, VALUE *, VALUE);
1163
+ extern VALUE Pixel_to_HSL(VALUE);
1164
+ extern VALUE Pixel_to_hsla(VALUE);
1165
+ extern VALUE Pixel_to_s(VALUE);
1166
+
1167
+
1168
+ // rmenum.c
1169
+ extern VALUE Enum_alloc(VALUE);
1170
+ extern VALUE Enum_initialize(VALUE, VALUE, VALUE);
1171
+ extern VALUE Enum_to_s(VALUE);
1172
+ extern VALUE Enum_to_i(VALUE);
1173
+ extern VALUE Enum_spaceship(VALUE, VALUE);
1174
+ extern VALUE Enum_case_eq(VALUE, VALUE);
1175
+ extern VALUE Enum_type_initialize(VALUE, VALUE, VALUE);
1176
+ extern VALUE Enum_type_each(VALUE);
1177
+ extern VALUE rm_enum_new(VALUE, VALUE, VALUE);
1178
+
1179
+
1180
+ // rmstruct.c
1181
+ extern VALUE ChromaticityInfo_to_s(VALUE);
1182
+ extern VALUE ChromaticityInfo_new(ChromaticityInfo *);
1183
+ extern void Color_to_PixelPacket(PixelPacket *, VALUE);
1184
+ extern void Color_to_MagickPixelPacket(Image *, MagickPixelPacket *, VALUE);
1185
+ extern VALUE Color_to_s(VALUE);
1186
+ extern VALUE Import_ColorInfo(const ColorInfo *);
1187
+ extern VALUE ClassType_new(ClassType);
1188
+ extern VALUE ColorspaceType_new(ColorspaceType);
1189
+ extern VALUE CompositeOperator_new(CompositeOperator);
1190
+ extern VALUE CompressionType_new(CompressionType);
1191
+ extern VALUE DisposeType_new(DisposeType);
1192
+ extern VALUE EndianType_new(EndianType);
1193
+ extern VALUE FilterTypes_new(FilterTypes);
1194
+ extern VALUE GravityType_new(GravityType);
1195
+ extern VALUE Font_to_s(VALUE);
1196
+ extern VALUE ImageType_new(ImageType);
1197
+ extern VALUE InterlaceType_new(InterlaceType);
1198
+ extern VALUE Pixel_from_MagickPixelPacket(const MagickPixelPacket *);
1199
+ extern VALUE Pixel_from_PixelPacket(const PixelPacket *);
1200
+ extern void Export_PointInfo(PointInfo *, VALUE);
1201
+ extern VALUE Import_PointInfo(PointInfo *);
1202
+ extern VALUE PrimaryInfo_to_s(VALUE);
1203
+ extern VALUE Import_PrimaryInfo(PrimaryInfo *);
1204
+ extern VALUE RectangleInfo_to_s(VALUE);
1205
+ extern VALUE Import_RectangleInfo(RectangleInfo *);
1206
+ extern VALUE RenderingIntent_new(RenderingIntent);
1207
+ extern VALUE ResolutionType_new(ResolutionType);
1208
+ extern VALUE SegmentInfo_to_s(VALUE);
1209
+ extern VALUE Import_SegmentInfo(SegmentInfo *);
1210
+ extern void Export_AffineMatrix(AffineMatrix *, VALUE);
1211
+ extern VALUE Import_AffineMatrix(AffineMatrix *);
1212
+ extern void Export_ChromaticityInfo(ChromaticityInfo *, VALUE);
1213
+ extern void Export_ColorInfo(ColorInfo *, VALUE);
1214
+ extern VALUE InterpolatePixelMethod_new(InterpolatePixelMethod);
1215
+ extern VALUE OrientationType_new(OrientationType);
1216
+ extern void Export_PrimaryInfo(PrimaryInfo *, VALUE);
1217
+ extern void Export_RectangleInfo(RectangleInfo *, VALUE);
1218
+ extern void Export_SegmentInfo(SegmentInfo *, VALUE);
1219
+ extern void Font_to_TypeInfo(TypeInfo *, VALUE);
1220
+ extern void Export_TypeMetric(TypeMetric *, VALUE);
1221
+ extern VALUE Import_TypeInfo(const TypeInfo *);
1222
+ extern VALUE TypeMetric_to_s(VALUE);
1223
+ extern void Export_TypeInfo(TypeInfo *, VALUE);
1224
+ extern VALUE Import_TypeMetric(TypeMetric *);
1225
+ extern const char *StorageType_name(StorageType);
1226
+ extern VALUE VirtualPixelMethod_new(VirtualPixelMethod);
1227
+ extern VALUE LAYERMETHODTYPE_NEW(LAYERMETHODTYPE);
1228
+
1229
+
1230
+ // rmutil.c
1231
+ extern VALUE ImageMagickError_initialize(int, VALUE *, VALUE);
1232
+ extern void *magick_malloc(const size_t);
1233
+ extern void *magick_safe_malloc(const size_t, const size_t);
1234
+ extern void magick_free(void *);
1235
+ extern void *magick_realloc(void *, const size_t);
1236
+ extern void *magick_safe_realloc(void *, const size_t, const size_t);
1237
+ extern void magick_clone_string(char **, const char *);
1238
+ extern VALUE rm_cur_image(VALUE);
1239
+ extern VALUE rm_pixelpacket_to_color_name(Image *, PixelPacket *);
1240
+ extern VALUE rm_pixelpacket_to_color_name_info(Info *, PixelPacket *);
1241
+ extern VALUE rm_no_freeze(VALUE);
1242
+ extern int rm_strcasecmp(const char *, const char *);
1243
+ extern int rm_strncasecmp(const char *, const char *, size_t);
1244
+ extern void rm_check_ary_len(VALUE, long);
1245
+ extern Image *rm_check_destroyed(VALUE);
1246
+ extern Image *rm_check_frozen(VALUE);
1247
+ extern VALUE rm_to_s(VALUE);
1248
+ extern char *rm_str2cstr(VALUE, long *);
1249
+ extern int rm_check_num2dbl(VALUE);
1250
+ extern double rm_fuzz_to_dbl(VALUE);
1251
+ extern Quantum rm_app2quantum(VALUE);
1252
+ extern double rm_percentage(VALUE,double);
1253
+ extern double rm_str_to_pct(VALUE);
1254
+ extern VALUE rm_define_enum_type(const char *);
1255
+ extern void rm_write_temp_image(Image *, char *);
1256
+ extern void rm_delete_temp_image(char *);
1257
+ extern void rm_not_implemented(void);
1258
+ extern void rm_attr_write(VALUE, VALUE);
1259
+ extern void rm_get_geometry(VALUE, long *, long *, unsigned long *, unsigned long *, int *);
1260
+ extern const char *rm_get_property(const Image *, const char *);
1261
+ extern MagickBooleanType rm_set_property(Image *, const char *, const char *);
1262
+ extern void rm_set_user_artifact(Image *, Info *);
1263
+ void rm_set_magick_pixel_packet(Pixel *, MagickPixelPacket *);
1264
+ extern void rm_sync_image_options(Image *, Info *);
1265
+ extern void rm_split(Image *);
1266
+ extern void rm_magick_error(const char *, const char *);
1267
+
1268
+ //! whether to retain on errors
1269
+ typedef enum
1270
+ {
1271
+ RetainOnError = 0, /**< retain on error */
1272
+ DestroyOnError = 1 /**< do not retain on error */
1273
+ } ErrorRetention;
1274
+
1275
+ extern void rm_check_image_exception(Image *, ErrorRetention);
1276
+ extern void rm_check_exception(ExceptionInfo *, Image *, ErrorRetention);
1277
+ extern void rm_ensure_result(Image *);
1278
+ extern Image *rm_clone_image(Image *);
1279
+ extern MagickBooleanType rm_progress_monitor(const char *, const MagickOffsetType, const MagickSizeType, void *);
1280
+ extern VALUE rm_exif_by_entry(Image *);
1281
+ extern VALUE rm_exif_by_number(Image *);
1282
+ extern void rm_get_optional_arguments(VALUE);
1283
+ extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *);
1284
+ extern void rm_error_handler(const ExceptionType, const char *, const char *);
1285
+ extern void rm_warning_handler(const ExceptionType, const char *, const char *);
1286
+ #endif
1287
+