rdp-rmagick 0.0.0

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