rmagick 2.16.0 → 5.1.0

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

Potentially problematic release.


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

Files changed (405) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +63 -0
  3. data/.devcontainer/Dockerfile +14 -0
  4. data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
  5. data/.devcontainer/devcontainer.json +11 -0
  6. data/.devcontainer/setup-repo.sh +10 -0
  7. data/.devcontainer/setup-user.sh +45 -0
  8. data/.editorconfig +3 -0
  9. data/.github/ISSUE_TEMPLATE.md +17 -0
  10. data/.github/workflows/ci.yml +79 -0
  11. data/.gitignore +5 -1
  12. data/.rspec +1 -0
  13. data/.rubocop.yml +37 -340
  14. data/.rubocop_todo.yml +448 -0
  15. data/.yardopts +5 -0
  16. data/CHANGELOG.md +435 -0
  17. data/CODE_OF_CONDUCT.md +122 -7
  18. data/CONTRIBUTING.md +37 -6
  19. data/Gemfile +0 -6
  20. data/README.md +317 -0
  21. data/Rakefile +37 -35
  22. data/before_install_linux.sh +65 -28
  23. data/before_install_osx.sh +58 -2
  24. data/ext/RMagick/extconf.rb +286 -393
  25. data/ext/RMagick/rmagick.c +106 -111
  26. data/ext/RMagick/rmagick.h +235 -331
  27. data/ext/RMagick/rmagick_gvl.h +224 -0
  28. data/ext/RMagick/rmdraw.c +484 -842
  29. data/ext/RMagick/rmenum.c +316 -755
  30. data/ext/RMagick/rmfill.c +281 -191
  31. data/ext/RMagick/rmilist.c +450 -455
  32. data/ext/RMagick/rmimage.c +6247 -5289
  33. data/ext/RMagick/rminfo.c +721 -894
  34. data/ext/RMagick/rmkinfo.c +228 -0
  35. data/ext/RMagick/rmmain.c +727 -519
  36. data/ext/RMagick/rmmontage.c +127 -172
  37. data/ext/RMagick/rmpixel.c +638 -431
  38. data/ext/RMagick/rmstruct.c +102 -282
  39. data/ext/RMagick/rmutil.c +450 -363
  40. data/lib/rmagick/version.rb +5 -4
  41. data/lib/rmagick.rb +2 -0
  42. data/lib/rmagick_internal.rb +349 -413
  43. data/lib/rvg/clippath.rb +3 -4
  44. data/lib/rvg/container.rb +30 -22
  45. data/lib/rvg/deep_equal.rb +11 -11
  46. data/lib/rvg/describable.rb +2 -2
  47. data/lib/rvg/embellishable.rb +63 -68
  48. data/lib/rvg/misc.rb +136 -139
  49. data/lib/rvg/paint.rb +2 -1
  50. data/lib/rvg/pathdata.rb +7 -8
  51. data/lib/rvg/rvg.rb +47 -46
  52. data/lib/rvg/stretchable.rb +22 -28
  53. data/lib/rvg/stylable.rb +12 -10
  54. data/lib/rvg/text.rb +169 -165
  55. data/lib/rvg/transformable.rb +17 -16
  56. data/lib/rvg/units.rb +5 -5
  57. data/rmagick.gemspec +16 -39
  58. metadata +118 -395
  59. data/.hound.yml +0 -2
  60. data/.simplecov +0 -27
  61. data/.travis.yml +0 -74
  62. data/Doxyfile +0 -1514
  63. data/README.textile +0 -251
  64. data/deprecated/RMagick.rb +0 -6
  65. data/doc/.cvsignore +0 -1
  66. data/doc/comtasks.html +0 -287
  67. data/doc/constants.html +0 -1581
  68. data/doc/css/doc.css +0 -299
  69. data/doc/css/popup.css +0 -34
  70. data/doc/css/ref.css +0 -67
  71. data/doc/draw.html +0 -3272
  72. data/doc/ex/InitialCoords.rb +0 -22
  73. data/doc/ex/NewCoordSys.rb +0 -30
  74. data/doc/ex/OrigCoordSys.rb +0 -16
  75. data/doc/ex/PreserveAspectRatio.rb +0 -204
  76. data/doc/ex/RotateScale.rb +0 -36
  77. data/doc/ex/Skew.rb +0 -38
  78. data/doc/ex/Use01.rb +0 -15
  79. data/doc/ex/Use02.rb +0 -20
  80. data/doc/ex/Use03.rb +0 -16
  81. data/doc/ex/ViewBox.rb +0 -31
  82. data/doc/ex/adaptive_threshold.rb +0 -9
  83. data/doc/ex/add_noise.rb +0 -16
  84. data/doc/ex/affine.rb +0 -48
  85. data/doc/ex/affine_transform.rb +0 -20
  86. data/doc/ex/arc.rb +0 -49
  87. data/doc/ex/arcpath.rb +0 -32
  88. data/doc/ex/arcs01.rb +0 -28
  89. data/doc/ex/arcs02.rb +0 -59
  90. data/doc/ex/average.rb +0 -15
  91. data/doc/ex/axes.rb +0 -64
  92. data/doc/ex/baseline_shift01.rb +0 -17
  93. data/doc/ex/bilevel_channel.rb +0 -8
  94. data/doc/ex/blur_image.rb +0 -12
  95. data/doc/ex/border.rb +0 -10
  96. data/doc/ex/bounding_box.rb +0 -42
  97. data/doc/ex/cbezier1.rb +0 -41
  98. data/doc/ex/cbezier2.rb +0 -41
  99. data/doc/ex/cbezier3.rb +0 -41
  100. data/doc/ex/cbezier4.rb +0 -42
  101. data/doc/ex/cbezier5.rb +0 -42
  102. data/doc/ex/cbezier6.rb +0 -53
  103. data/doc/ex/channel.rb +0 -25
  104. data/doc/ex/charcoal.rb +0 -12
  105. data/doc/ex/chop.rb +0 -29
  106. data/doc/ex/circle.rb +0 -33
  107. data/doc/ex/circle01.rb +0 -16
  108. data/doc/ex/clip_path.rb +0 -60
  109. data/doc/ex/coalesce.rb +0 -57
  110. data/doc/ex/color_fill_to_border.rb +0 -29
  111. data/doc/ex/color_floodfill.rb +0 -28
  112. data/doc/ex/color_histogram.rb +0 -47
  113. data/doc/ex/color_reset.rb +0 -11
  114. data/doc/ex/colorize.rb +0 -16
  115. data/doc/ex/colors.rb +0 -64
  116. data/doc/ex/compose_mask.rb +0 -22
  117. data/doc/ex/composite.rb +0 -133
  118. data/doc/ex/composite_layers.rb +0 -53
  119. data/doc/ex/composite_tiled.rb +0 -21
  120. data/doc/ex/contrast.rb +0 -36
  121. data/doc/ex/crop.rb +0 -31
  122. data/doc/ex/crop_with_gravity.rb +0 -42
  123. data/doc/ex/cubic01.rb +0 -43
  124. data/doc/ex/cubic02.rb +0 -91
  125. data/doc/ex/cycle_colormap.rb +0 -21
  126. data/doc/ex/dissolve.rb +0 -12
  127. data/doc/ex/drawcomp.rb +0 -42
  128. data/doc/ex/drop_shadow.rb +0 -60
  129. data/doc/ex/edge.rb +0 -11
  130. data/doc/ex/ellipse.rb +0 -45
  131. data/doc/ex/ellipse01.rb +0 -21
  132. data/doc/ex/emboss.rb +0 -11
  133. data/doc/ex/enhance.rb +0 -28
  134. data/doc/ex/equalize.rb +0 -11
  135. data/doc/ex/evenodd.rb +0 -42
  136. data/doc/ex/fill_pattern.rb +0 -23
  137. data/doc/ex/flatten_images.rb +0 -36
  138. data/doc/ex/flip.rb +0 -11
  139. data/doc/ex/flop.rb +0 -11
  140. data/doc/ex/font_styles.rb +0 -32
  141. data/doc/ex/fonts.rb +0 -20
  142. data/doc/ex/frame.rb +0 -12
  143. data/doc/ex/gaussian_blur.rb +0 -11
  144. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  145. data/doc/ex/get_pixels.rb +0 -47
  146. data/doc/ex/get_type_metrics.rb +0 -141
  147. data/doc/ex/gradientfill.rb +0 -27
  148. data/doc/ex/grav.rb +0 -45
  149. data/doc/ex/gravity.rb +0 -80
  150. data/doc/ex/group.rb +0 -26
  151. data/doc/ex/hatchfill.rb +0 -27
  152. data/doc/ex/image.rb +0 -44
  153. data/doc/ex/images/Apple.miff +0 -0
  154. data/doc/ex/images/Ballerina.jpg +0 -0
  155. data/doc/ex/images/Ballerina3.jpg +0 -0
  156. data/doc/ex/images/Button_0.gif +0 -0
  157. data/doc/ex/images/Button_1.gif +0 -0
  158. data/doc/ex/images/Button_2.gif +0 -0
  159. data/doc/ex/images/Button_3.gif +0 -0
  160. data/doc/ex/images/Button_4.gif +0 -0
  161. data/doc/ex/images/Button_5.gif +0 -0
  162. data/doc/ex/images/Button_6.gif +0 -0
  163. data/doc/ex/images/Button_7.gif +0 -0
  164. data/doc/ex/images/Button_8.gif +0 -0
  165. data/doc/ex/images/Button_9.gif +0 -0
  166. data/doc/ex/images/Button_A.gif +0 -0
  167. data/doc/ex/images/Button_B.gif +0 -0
  168. data/doc/ex/images/Button_C.gif +0 -0
  169. data/doc/ex/images/Button_D.gif +0 -0
  170. data/doc/ex/images/Button_E.gif +0 -0
  171. data/doc/ex/images/Button_F.gif +0 -0
  172. data/doc/ex/images/Button_G.gif +0 -0
  173. data/doc/ex/images/Button_H.gif +0 -0
  174. data/doc/ex/images/Button_I.gif +0 -0
  175. data/doc/ex/images/Button_J.gif +0 -0
  176. data/doc/ex/images/Button_K.gif +0 -0
  177. data/doc/ex/images/Button_L.gif +0 -0
  178. data/doc/ex/images/Button_M.gif +0 -0
  179. data/doc/ex/images/Button_N.gif +0 -0
  180. data/doc/ex/images/Button_O.gif +0 -0
  181. data/doc/ex/images/Button_P.gif +0 -0
  182. data/doc/ex/images/Button_Q.gif +0 -0
  183. data/doc/ex/images/Button_R.gif +0 -0
  184. data/doc/ex/images/Button_S.gif +0 -0
  185. data/doc/ex/images/Button_T.gif +0 -0
  186. data/doc/ex/images/Button_U.gif +0 -0
  187. data/doc/ex/images/Button_V.gif +0 -0
  188. data/doc/ex/images/Button_W.gif +0 -0
  189. data/doc/ex/images/Button_X.gif +0 -0
  190. data/doc/ex/images/Button_Y.gif +0 -0
  191. data/doc/ex/images/Button_Z.gif +0 -0
  192. data/doc/ex/images/Cheetah.jpg +0 -0
  193. data/doc/ex/images/Coffee.wmf +0 -0
  194. data/doc/ex/images/Flower_Hat.jpg +0 -0
  195. data/doc/ex/images/Gold_Statue.jpg +0 -0
  196. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  197. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  198. data/doc/ex/images/Leaf.miff +0 -0
  199. data/doc/ex/images/No.wmf +0 -0
  200. data/doc/ex/images/Polynesia.jpg +0 -0
  201. data/doc/ex/images/Red_Rocks.jpg +0 -0
  202. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  203. data/doc/ex/images/Shorts.jpg +0 -0
  204. data/doc/ex/images/Snake.wmf +0 -0
  205. data/doc/ex/images/Violin.jpg +0 -0
  206. data/doc/ex/images/Yellow_Rose.miff +0 -0
  207. data/doc/ex/images/big-duck.gif +0 -0
  208. data/doc/ex/images/duck.gif +0 -0
  209. data/doc/ex/images/duck0.gif +0 -0
  210. data/doc/ex/images/duck1.gif +0 -0
  211. data/doc/ex/images/duck10.gif +0 -0
  212. data/doc/ex/images/duck11.gif +0 -0
  213. data/doc/ex/images/duck12.gif +0 -0
  214. data/doc/ex/images/duck13.gif +0 -0
  215. data/doc/ex/images/duck14.gif +0 -0
  216. data/doc/ex/images/duck15.gif +0 -0
  217. data/doc/ex/images/duck2.gif +0 -0
  218. data/doc/ex/images/duck3.gif +0 -0
  219. data/doc/ex/images/duck4.gif +0 -0
  220. data/doc/ex/images/duck5.gif +0 -0
  221. data/doc/ex/images/duck6.gif +0 -0
  222. data/doc/ex/images/duck7.gif +0 -0
  223. data/doc/ex/images/duck8.gif +0 -0
  224. data/doc/ex/images/duck9.gif +0 -0
  225. data/doc/ex/images/graydient230x6.gif +0 -0
  226. data/doc/ex/images/image_with_profile.jpg +0 -0
  227. data/doc/ex/images/logo400x83.gif +0 -0
  228. data/doc/ex/images/model.miff +0 -0
  229. data/doc/ex/images/notimplemented.gif +0 -0
  230. data/doc/ex/images/smile.miff +0 -0
  231. data/doc/ex/images/spin.gif +0 -0
  232. data/doc/ex/implode.rb +0 -34
  233. data/doc/ex/level.rb +0 -11
  234. data/doc/ex/level_colors.rb +0 -11
  235. data/doc/ex/line.rb +0 -41
  236. data/doc/ex/line01.rb +0 -21
  237. data/doc/ex/mask.rb +0 -35
  238. data/doc/ex/matte_fill_to_border.rb +0 -39
  239. data/doc/ex/matte_floodfill.rb +0 -32
  240. data/doc/ex/matte_replace.rb +0 -39
  241. data/doc/ex/median_filter.rb +0 -28
  242. data/doc/ex/modulate.rb +0 -11
  243. data/doc/ex/mono.rb +0 -23
  244. data/doc/ex/morph.rb +0 -25
  245. data/doc/ex/mosaic.rb +0 -35
  246. data/doc/ex/motion_blur.rb +0 -11
  247. data/doc/ex/negate.rb +0 -11
  248. data/doc/ex/negate_channel.rb +0 -9
  249. data/doc/ex/nested_rvg.rb +0 -21
  250. data/doc/ex/nonzero.rb +0 -42
  251. data/doc/ex/normalize.rb +0 -11
  252. data/doc/ex/oil_paint.rb +0 -11
  253. data/doc/ex/opacity.rb +0 -37
  254. data/doc/ex/ordered_dither.rb +0 -11
  255. data/doc/ex/path.rb +0 -63
  256. data/doc/ex/pattern1.rb +0 -25
  257. data/doc/ex/pattern2.rb +0 -26
  258. data/doc/ex/polaroid.rb +0 -27
  259. data/doc/ex/polygon.rb +0 -23
  260. data/doc/ex/polygon01.rb +0 -21
  261. data/doc/ex/polyline.rb +0 -22
  262. data/doc/ex/polyline01.rb +0 -21
  263. data/doc/ex/posterize.rb +0 -8
  264. data/doc/ex/preview.rb +0 -8
  265. data/doc/ex/qbezierpath.rb +0 -52
  266. data/doc/ex/quad01.rb +0 -34
  267. data/doc/ex/quantize-m.rb +0 -25
  268. data/doc/ex/radial_blur.rb +0 -9
  269. data/doc/ex/raise.rb +0 -8
  270. data/doc/ex/random_threshold_channel.rb +0 -13
  271. data/doc/ex/rect01.rb +0 -14
  272. data/doc/ex/rect02.rb +0 -20
  273. data/doc/ex/rectangle.rb +0 -34
  274. data/doc/ex/reduce_noise.rb +0 -28
  275. data/doc/ex/remap.rb +0 -11
  276. data/doc/ex/remap_images.rb +0 -19
  277. data/doc/ex/resize_to_fill.rb +0 -8
  278. data/doc/ex/resize_to_fit.rb +0 -8
  279. data/doc/ex/roll.rb +0 -9
  280. data/doc/ex/rotate.rb +0 -44
  281. data/doc/ex/rotate_f.rb +0 -14
  282. data/doc/ex/roundrect.rb +0 -33
  283. data/doc/ex/rubyname.rb +0 -30
  284. data/doc/ex/rvg_clippath.rb +0 -12
  285. data/doc/ex/rvg_linecap.rb +0 -42
  286. data/doc/ex/rvg_linejoin.rb +0 -40
  287. data/doc/ex/rvg_opacity.rb +0 -18
  288. data/doc/ex/rvg_pattern.rb +0 -26
  289. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  290. data/doc/ex/segment.rb +0 -11
  291. data/doc/ex/sepiatone.rb +0 -7
  292. data/doc/ex/shade.rb +0 -11
  293. data/doc/ex/shadow.rb +0 -30
  294. data/doc/ex/shave.rb +0 -15
  295. data/doc/ex/shear.rb +0 -10
  296. data/doc/ex/sketch.rb +0 -17
  297. data/doc/ex/skewx.rb +0 -51
  298. data/doc/ex/skewy.rb +0 -47
  299. data/doc/ex/smile.rb +0 -125
  300. data/doc/ex/solarize.rb +0 -11
  301. data/doc/ex/sparse_color.rb +0 -54
  302. data/doc/ex/splice.rb +0 -8
  303. data/doc/ex/spread.rb +0 -11
  304. data/doc/ex/stegano.rb +0 -55
  305. data/doc/ex/stroke_dasharray.rb +0 -42
  306. data/doc/ex/stroke_fill.rb +0 -10
  307. data/doc/ex/stroke_linecap.rb +0 -44
  308. data/doc/ex/stroke_linejoin.rb +0 -48
  309. data/doc/ex/stroke_width.rb +0 -49
  310. data/doc/ex/swirl.rb +0 -17
  311. data/doc/ex/text.rb +0 -37
  312. data/doc/ex/text01.rb +0 -16
  313. data/doc/ex/text_align.rb +0 -36
  314. data/doc/ex/text_antialias.rb +0 -37
  315. data/doc/ex/text_styles.rb +0 -19
  316. data/doc/ex/text_undercolor.rb +0 -28
  317. data/doc/ex/texture_fill_to_border.rb +0 -34
  318. data/doc/ex/texture_floodfill.rb +0 -32
  319. data/doc/ex/texturefill.rb +0 -24
  320. data/doc/ex/threshold.rb +0 -13
  321. data/doc/ex/to_blob.rb +0 -13
  322. data/doc/ex/translate.rb +0 -39
  323. data/doc/ex/transparent.rb +0 -38
  324. data/doc/ex/transpose.rb +0 -9
  325. data/doc/ex/transverse.rb +0 -9
  326. data/doc/ex/tref01.rb +0 -24
  327. data/doc/ex/triangle01.rb +0 -15
  328. data/doc/ex/trim.rb +0 -23
  329. data/doc/ex/tspan01.rb +0 -17
  330. data/doc/ex/tspan02.rb +0 -17
  331. data/doc/ex/tspan03.rb +0 -19
  332. data/doc/ex/unsharp_mask.rb +0 -28
  333. data/doc/ex/viewex.rb +0 -33
  334. data/doc/ex/vignette.rb +0 -12
  335. data/doc/ex/watermark.rb +0 -27
  336. data/doc/ex/wave.rb +0 -9
  337. data/doc/ex/wet_floor.rb +0 -58
  338. data/doc/ex/writing_mode01.rb +0 -26
  339. data/doc/ex/writing_mode02.rb +0 -26
  340. data/doc/ilist.html +0 -2056
  341. data/doc/image1.html +0 -4680
  342. data/doc/image2.html +0 -3665
  343. data/doc/image3.html +0 -4522
  344. data/doc/imageattrs.html +0 -1638
  345. data/doc/imusage.html +0 -514
  346. data/doc/index.html +0 -416
  347. data/doc/info.html +0 -1499
  348. data/doc/magick.html +0 -565
  349. data/doc/optequiv.html +0 -2435
  350. data/doc/rvg.html +0 -975
  351. data/doc/rvgclip.html +0 -248
  352. data/doc/rvggroup.html +0 -305
  353. data/doc/rvgimage.html +0 -289
  354. data/doc/rvgpattern.html +0 -475
  355. data/doc/rvgshape.html +0 -406
  356. data/doc/rvgstyle.html +0 -270
  357. data/doc/rvgtext.html +0 -465
  358. data/doc/rvgtspan.html +0 -238
  359. data/doc/rvgtut.html +0 -530
  360. data/doc/rvguse.html +0 -145
  361. data/doc/rvgxform.html +0 -294
  362. data/doc/scripts/doc.js +0 -22
  363. data/doc/scripts/stripeTables.js +0 -23
  364. data/doc/struct.html +0 -1339
  365. data/doc/usage.html +0 -1621
  366. data/examples/constitute.rb +0 -7
  367. data/examples/crop_with_gravity.rb +0 -42
  368. data/examples/demo.rb +0 -324
  369. data/examples/describe.rb +0 -43
  370. data/examples/find_similar_region.rb +0 -34
  371. data/examples/histogram.rb +0 -321
  372. data/examples/identify.rb +0 -185
  373. data/examples/image_opacity.rb +0 -29
  374. data/examples/import_export.rb +0 -31
  375. data/examples/pattern_fill.rb +0 -38
  376. data/examples/rotating_text.rb +0 -44
  377. data/examples/spinner.rb +0 -49
  378. data/examples/thumbnail.rb +0 -64
  379. data/examples/vignette.rb +0 -78
  380. data/spec/rmagick/ImageList1_spec.rb +0 -24
  381. data/spec/rmagick/draw_spec.rb +0 -156
  382. data/spec/rmagick/image/blue_shift_spec.rb +0 -16
  383. data/spec/rmagick/image/composite_spec.rb +0 -140
  384. data/spec/rmagick/image/constitute_spec.rb +0 -15
  385. data/spec/rmagick/image/dispatch_spec.rb +0 -18
  386. data/spec/rmagick/image/from_blob_spec.rb +0 -14
  387. data/spec/rmagick/image/ping_spec.rb +0 -14
  388. data/spec/rmagick/image/properties_spec.rb +0 -29
  389. data/spec/spec_helper.rb +0 -4
  390. data/test/Image1.rb +0 -565
  391. data/test/Image2.rb +0 -1304
  392. data/test/Image3.rb +0 -1030
  393. data/test/ImageList1.rb +0 -806
  394. data/test/ImageList2.rb +0 -385
  395. data/test/Image_attributes.rb +0 -697
  396. data/test/Import_Export.rb +0 -121
  397. data/test/Info.rb +0 -345
  398. data/test/Magick.rb +0 -321
  399. data/test/Pixel.rb +0 -116
  400. data/test/Preview.rb +0 -57
  401. data/test/cmyk.icm +0 -0
  402. data/test/srgb.icm +0 -0
  403. data/test/test_all_basic.rb +0 -38
  404. data/test/tmpnam_test.rb +0 -50
  405. data/wercker.yml +0 -10
@@ -0,0 +1,228 @@
1
+ /************************************************************************//**
2
+ * KernelInfo class definitions for RMagick.
3
+ *
4
+ * Copyright © RMagick Project
5
+ *
6
+ * @file rmkinfo.c
7
+ * @version $Id: rmkinfo.c,v 1.0 2011/11/29 15:33:14 naquad Exp $
8
+ * @author Naquad
9
+ ****************************************************************************/
10
+
11
+ #include "rmagick.h"
12
+
13
+ static void rm_kernel_info_destroy(void *kernel);
14
+ static size_t rm_kernel_info_memsize(const void *ptr);
15
+
16
+ const rb_data_type_t rm_kernel_info_data_type = {
17
+ "Magick::KernelInfo",
18
+ { NULL, rm_kernel_info_destroy, rm_kernel_info_memsize, },
19
+ 0, 0,
20
+ RUBY_TYPED_FROZEN_SHAREABLE,
21
+ };
22
+
23
+ /* UnityAddKernelInfo() was private function until IM 6.9 */
24
+ MagickExport void UnityAddKernelInfo(KernelInfo *kernel, const double scale);
25
+ /* ScaleKernelInfo() was private function until IM 6.9 */
26
+ MagickExport void ScaleKernelInfo(KernelInfo *kernel, const double scaling_factor, const GeometryFlags normalize_flags);
27
+
28
+ DEFINE_GVL_VOID_STUB2(UnityAddKernelInfo, KernelInfo *, const double);
29
+ DEFINE_GVL_VOID_STUB3(ScaleKernelInfo, KernelInfo *, const double, const GeometryFlags);
30
+ DEFINE_GVL_VOID_STUB2(ScaleGeometryKernelInfo, KernelInfo *, const char *);
31
+
32
+
33
+ /**
34
+ * If there's a kernel info, delete it before destroying the KernelInfo
35
+ *
36
+ * No Ruby usage (internal function)
37
+ *
38
+ * @param kernel pointer to the KernelInfo object associated with instance
39
+ */
40
+
41
+ static void
42
+ rm_kernel_info_destroy(void *kernel)
43
+ {
44
+ if (kernel)
45
+ DestroyKernelInfo((KernelInfo*)kernel);
46
+ }
47
+
48
+ /**
49
+ * Get KernelInfo object size.
50
+ *
51
+ * No Ruby usage (internal function)
52
+ *
53
+ * @param ptr pointer to the KernelInfo object
54
+ */
55
+ static size_t
56
+ rm_kernel_info_memsize(const void *ptr)
57
+ {
58
+ return sizeof(KernelInfo);
59
+ }
60
+
61
+ /**
62
+ * Create a KernelInfo object.
63
+ *
64
+ * @return [Magick::KernelInfo] a new KernelInfo object
65
+ */
66
+ VALUE
67
+ KernelInfo_alloc(VALUE class)
68
+ {
69
+ return TypedData_Wrap_Struct(class, &rm_kernel_info_data_type, NULL);
70
+ }
71
+
72
+ /**
73
+ * KernelInfo object constructor
74
+ *
75
+ * @param kernel_string [String] kernel info string representation to be parsed
76
+ * @return [Magick::KernelInfo] self
77
+ */
78
+ VALUE
79
+ KernelInfo_initialize(VALUE self, VALUE kernel_string)
80
+ {
81
+ KernelInfo *kernel;
82
+ #if defined(IMAGEMAGICK_7)
83
+ ExceptionInfo *exception;
84
+ #endif
85
+
86
+ Check_Type(kernel_string, T_STRING);
87
+
88
+ #if defined(IMAGEMAGICK_7)
89
+ exception = AcquireExceptionInfo();
90
+ kernel = AcquireKernelInfo(StringValueCStr(kernel_string), exception);
91
+ if (rm_should_raise_exception(exception, DestroyExceptionRetention))
92
+ {
93
+ if (kernel != (KernelInfo *) NULL)
94
+ {
95
+ DestroyKernelInfo(kernel);
96
+ }
97
+ rm_raise_exception(exception);
98
+ }
99
+ #else
100
+ kernel = AcquireKernelInfo(StringValueCStr(kernel_string));
101
+ #endif
102
+
103
+ if (!kernel)
104
+ {
105
+ rb_raise(rb_eRuntimeError, "failed to parse kernel string");
106
+ }
107
+
108
+ DATA_PTR(self) = kernel;
109
+
110
+ return self;
111
+ }
112
+
113
+
114
+ /**
115
+ * Adds a given amount of the 'Unity' Convolution Kernel to the given pre-scaled and normalized Kernel.
116
+ *
117
+ * @param scale [Numeric] scale to add
118
+ */
119
+ VALUE
120
+ KernelInfo_unity_add(VALUE self, VALUE scale)
121
+ {
122
+ if (!FIXNUM_P(scale))
123
+ Check_Type(scale, T_FLOAT);
124
+
125
+ GVL_STRUCT_TYPE(UnityAddKernelInfo) args = { (KernelInfo*)DATA_PTR(self), NUM2DBL(scale) };
126
+ CALL_FUNC_WITHOUT_GVL(GVL_FUNC(UnityAddKernelInfo), &args);
127
+ return Qnil;
128
+ }
129
+
130
+
131
+ /**
132
+ * Scales the given kernel list by the given amount, with or without normalization
133
+ * of the sum of the kernel values (as per given flags).
134
+ *
135
+ * @param scale [Numeric] scale to use
136
+ * @param flags [Magick::GeometryFlags] one of Magick::NormalizeValue, Magick::CorrelateNormalizeValue,
137
+ * and/or Magick::PercentValue
138
+ */
139
+ VALUE
140
+ KernelInfo_scale(VALUE self, VALUE scale, VALUE flags)
141
+ {
142
+ GeometryFlags geoflags;
143
+
144
+ if (!FIXNUM_P(scale))
145
+ Check_Type(scale, T_FLOAT);
146
+
147
+ if (rb_obj_is_instance_of(flags, Class_GeometryFlags))
148
+ VALUE_TO_ENUM(flags, geoflags, GeometryFlags);
149
+ else
150
+ rb_raise(rb_eArgError, "expected Integer or Magick::GeometryFlags to specify flags");
151
+
152
+ GVL_STRUCT_TYPE(ScaleKernelInfo) args = { (KernelInfo*)DATA_PTR(self), NUM2DBL(scale), geoflags };
153
+ CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ScaleKernelInfo), &args);
154
+ return Qnil;
155
+ }
156
+
157
+ /**
158
+ * Takes a geometry argument string, typically provided as a +-set option:convolve:scale {geometry}+ user setting,
159
+ * and modifies the kernel according to the parsed arguments of that setting.
160
+ *
161
+ * @param geometry [String] geometry string to parse and apply
162
+ */
163
+ VALUE
164
+ KernelInfo_scale_geometry(VALUE self, VALUE geometry)
165
+ {
166
+ Check_Type(geometry, T_STRING);
167
+ GVL_STRUCT_TYPE(ScaleGeometryKernelInfo) args = { (KernelInfo*)DATA_PTR(self), StringValueCStr(geometry) };
168
+ CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ScaleGeometryKernelInfo), &args);
169
+ return Qnil;
170
+ }
171
+
172
+ /**
173
+ * Creates a new clone of the object so that its can be modified without effecting the original.
174
+ *
175
+ * @return [Magick::KernelInfo] new KernelInfo object
176
+ */
177
+ VALUE
178
+ KernelInfo_clone(VALUE self)
179
+ {
180
+ KernelInfo *kernel = CloneKernelInfo((KernelInfo*)DATA_PTR(self));
181
+ return TypedData_Wrap_Struct(Class_KernelInfo, &rm_kernel_info_data_type, kernel);
182
+ }
183
+
184
+ /**
185
+ * Create new instance of KernelInfo with one of the 'named' built-in types of
186
+ * kernels used for special purposes such as gaussian blurring, skeleton
187
+ * pruning, and edge distance determination.
188
+ *
189
+ * @param what [Magick::KernelInfoType] kernel one of Magick::KernelInfoType enums
190
+ * @param geometry [String] geometry to pass to default kernel
191
+ * @return [Magick::KernelInfo] a new KernelInfo object
192
+ */
193
+ VALUE
194
+ KernelInfo_builtin(VALUE self, VALUE what, VALUE geometry)
195
+ {
196
+ KernelInfo *kernel;
197
+ KernelInfoType kernel_type;
198
+ GeometryInfo info;
199
+ #if defined(IMAGEMAGICK_7)
200
+ ExceptionInfo *exception;
201
+ #endif
202
+
203
+ Check_Type(geometry, T_STRING);
204
+ VALUE_TO_ENUM(what, kernel_type, KernelInfoType);
205
+ ParseGeometry(StringValueCStr(geometry), &info);
206
+
207
+ #if defined(IMAGEMAGICK_7)
208
+ exception = AcquireExceptionInfo();
209
+ kernel = AcquireKernelBuiltIn(kernel_type, &info, exception);
210
+ if (rm_should_raise_exception(exception, DestroyExceptionRetention))
211
+ {
212
+ if (kernel != (KernelInfo *) NULL)
213
+ {
214
+ DestroyKernelInfo(kernel);
215
+ }
216
+ rm_raise_exception(exception);
217
+ }
218
+ #else
219
+ kernel = AcquireKernelBuiltIn(kernel_type, &info);
220
+ #endif
221
+
222
+ if (!kernel)
223
+ {
224
+ rb_raise(rb_eRuntimeError, "failed to acquire builtin kernel");
225
+ }
226
+
227
+ return TypedData_Wrap_Struct(self, &rm_kernel_info_data_type, kernel);
228
+ }