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,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
+