rmagick 4.1.0.rc2 → 4.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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +63 -0
- data/.editorconfig +3 -0
- data/.github/workflows/ci.yml +148 -0
- data/.gitignore +3 -1
- data/.rspec +1 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +80 -270
- data/.yardopts +5 -0
- data/CHANGELOG.md +63 -0
- data/CONTRIBUTING.md +14 -10
- data/README.md +292 -0
- data/Rakefile +16 -22
- data/before_install_linux.sh +22 -32
- data/before_install_osx.sh +56 -2
- data/ext/RMagick/extconf.rb +100 -94
- data/ext/RMagick/rmagick.c +77 -104
- data/ext/RMagick/rmagick.h +74 -70
- data/ext/RMagick/rmdraw.c +261 -444
- data/ext/RMagick/rmenum.c +96 -113
- data/ext/RMagick/rmfill.c +46 -77
- data/ext/RMagick/rmilist.c +136 -244
- data/ext/RMagick/rmimage.c +3395 -4166
- data/ext/RMagick/rminfo.c +531 -737
- data/ext/RMagick/rmkinfo.c +21 -87
- data/ext/RMagick/rmmain.c +405 -245
- data/ext/RMagick/rmmontage.c +60 -126
- data/ext/RMagick/rmpixel.c +401 -345
- data/ext/RMagick/rmstruct.c +62 -88
- data/ext/RMagick/rmutil.c +112 -218
- data/lib/rmagick/version.rb +1 -1
- data/lib/rmagick_internal.rb +128 -77
- data/lib/rvg/clippath.rb +2 -1
- data/lib/rvg/container.rb +10 -5
- data/lib/rvg/describable.rb +1 -1
- data/lib/rvg/embellishable.rb +5 -4
- data/lib/rvg/misc.rb +15 -12
- data/lib/rvg/paint.rb +2 -1
- data/lib/rvg/pathdata.rb +12 -11
- data/lib/rvg/rvg.rb +8 -4
- data/lib/rvg/stylable.rb +9 -7
- data/lib/rvg/text.rb +11 -6
- data/lib/rvg/transformable.rb +3 -2
- data/lib/rvg/units.rb +1 -1
- data/rmagick.gemspec +7 -6
- metadata +31 -421
- data/.appveyor.yml +0 -57
- data/.circleci/config.yml +0 -56
- data/.ruby-version +0 -1
- data/.simplecov +0 -27
- data/.travis.yml +0 -64
- data/Doxyfile +0 -1514
- data/README.textile +0 -259
- data/benchmarks/memory/README.md +0 -50
- data/benchmarks/memory/image_new.rb +0 -8
- data/benchmarks/memory/rmagick.gnuplot +0 -16
- data/doc/.cvsignore +0 -1
- data/doc/comtasks.html +0 -287
- data/doc/constants.html +0 -1581
- data/doc/css/doc.css +0 -299
- data/doc/css/popup.css +0 -34
- data/doc/css/ref.css +0 -67
- data/doc/draw.html +0 -3272
- data/doc/ex/InitialCoords.rb +0 -22
- data/doc/ex/NewCoordSys.rb +0 -30
- data/doc/ex/OrigCoordSys.rb +0 -16
- data/doc/ex/PreserveAspectRatio.rb +0 -204
- data/doc/ex/RotateScale.rb +0 -36
- data/doc/ex/Skew.rb +0 -38
- data/doc/ex/Use01.rb +0 -15
- data/doc/ex/Use02.rb +0 -20
- data/doc/ex/Use03.rb +0 -16
- data/doc/ex/ViewBox.rb +0 -31
- data/doc/ex/adaptive_threshold.rb +0 -9
- data/doc/ex/add_noise.rb +0 -16
- data/doc/ex/affine.rb +0 -48
- data/doc/ex/affine_transform.rb +0 -20
- data/doc/ex/arc.rb +0 -49
- data/doc/ex/arcpath.rb +0 -32
- data/doc/ex/arcs01.rb +0 -28
- data/doc/ex/arcs02.rb +0 -59
- data/doc/ex/average.rb +0 -15
- data/doc/ex/axes.rb +0 -64
- data/doc/ex/baseline_shift01.rb +0 -17
- data/doc/ex/bilevel_channel.rb +0 -8
- data/doc/ex/blur_image.rb +0 -12
- data/doc/ex/border.rb +0 -10
- data/doc/ex/bounding_box.rb +0 -42
- data/doc/ex/cbezier1.rb +0 -41
- data/doc/ex/cbezier2.rb +0 -41
- data/doc/ex/cbezier3.rb +0 -41
- data/doc/ex/cbezier4.rb +0 -42
- data/doc/ex/cbezier5.rb +0 -42
- data/doc/ex/cbezier6.rb +0 -53
- data/doc/ex/channel.rb +0 -25
- data/doc/ex/charcoal.rb +0 -12
- data/doc/ex/chop.rb +0 -29
- data/doc/ex/circle.rb +0 -33
- data/doc/ex/circle01.rb +0 -16
- data/doc/ex/clip_path.rb +0 -60
- data/doc/ex/coalesce.rb +0 -57
- data/doc/ex/color_fill_to_border.rb +0 -29
- data/doc/ex/color_floodfill.rb +0 -28
- data/doc/ex/color_histogram.rb +0 -47
- data/doc/ex/color_reset.rb +0 -11
- data/doc/ex/colorize.rb +0 -16
- data/doc/ex/colors.rb +0 -64
- data/doc/ex/compose_mask.rb +0 -22
- data/doc/ex/composite.rb +0 -133
- data/doc/ex/composite_layers.rb +0 -52
- data/doc/ex/composite_tiled.rb +0 -21
- data/doc/ex/contrast.rb +0 -36
- data/doc/ex/crop.rb +0 -31
- data/doc/ex/crop_with_gravity.rb +0 -42
- data/doc/ex/cubic01.rb +0 -43
- data/doc/ex/cubic02.rb +0 -91
- data/doc/ex/cycle_colormap.rb +0 -21
- data/doc/ex/dissolve.rb +0 -12
- data/doc/ex/drawcomp.rb +0 -41
- data/doc/ex/drop_shadow.rb +0 -60
- data/doc/ex/edge.rb +0 -11
- data/doc/ex/ellipse.rb +0 -45
- data/doc/ex/ellipse01.rb +0 -21
- data/doc/ex/emboss.rb +0 -11
- data/doc/ex/enhance.rb +0 -28
- data/doc/ex/equalize.rb +0 -11
- data/doc/ex/evenodd.rb +0 -42
- data/doc/ex/fill_pattern.rb +0 -23
- data/doc/ex/flatten_images.rb +0 -36
- data/doc/ex/flip.rb +0 -11
- data/doc/ex/flop.rb +0 -11
- data/doc/ex/font_styles.rb +0 -32
- data/doc/ex/fonts.rb +0 -16
- data/doc/ex/frame.rb +0 -12
- data/doc/ex/gaussian_blur.rb +0 -11
- data/doc/ex/get_multiline_type_metrics.rb +0 -41
- data/doc/ex/get_pixels.rb +0 -45
- data/doc/ex/get_type_metrics.rb +0 -142
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -45
- data/doc/ex/gravity.rb +0 -78
- data/doc/ex/group.rb +0 -26
- data/doc/ex/hatchfill.rb +0 -27
- data/doc/ex/image.rb +0 -44
- data/doc/ex/images/Apple.miff +0 -0
- data/doc/ex/images/Ballerina.jpg +0 -0
- data/doc/ex/images/Ballerina3.jpg +0 -0
- data/doc/ex/images/Button_0.gif +0 -0
- data/doc/ex/images/Button_1.gif +0 -0
- data/doc/ex/images/Button_2.gif +0 -0
- data/doc/ex/images/Button_3.gif +0 -0
- data/doc/ex/images/Button_4.gif +0 -0
- data/doc/ex/images/Button_5.gif +0 -0
- data/doc/ex/images/Button_6.gif +0 -0
- data/doc/ex/images/Button_7.gif +0 -0
- data/doc/ex/images/Button_8.gif +0 -0
- data/doc/ex/images/Button_9.gif +0 -0
- data/doc/ex/images/Button_A.gif +0 -0
- data/doc/ex/images/Button_B.gif +0 -0
- data/doc/ex/images/Button_C.gif +0 -0
- data/doc/ex/images/Button_D.gif +0 -0
- data/doc/ex/images/Button_E.gif +0 -0
- data/doc/ex/images/Button_F.gif +0 -0
- data/doc/ex/images/Button_G.gif +0 -0
- data/doc/ex/images/Button_H.gif +0 -0
- data/doc/ex/images/Button_I.gif +0 -0
- data/doc/ex/images/Button_J.gif +0 -0
- data/doc/ex/images/Button_K.gif +0 -0
- data/doc/ex/images/Button_L.gif +0 -0
- data/doc/ex/images/Button_M.gif +0 -0
- data/doc/ex/images/Button_N.gif +0 -0
- data/doc/ex/images/Button_O.gif +0 -0
- data/doc/ex/images/Button_P.gif +0 -0
- data/doc/ex/images/Button_Q.gif +0 -0
- data/doc/ex/images/Button_R.gif +0 -0
- data/doc/ex/images/Button_S.gif +0 -0
- data/doc/ex/images/Button_T.gif +0 -0
- data/doc/ex/images/Button_U.gif +0 -0
- data/doc/ex/images/Button_V.gif +0 -0
- data/doc/ex/images/Button_W.gif +0 -0
- data/doc/ex/images/Button_X.gif +0 -0
- data/doc/ex/images/Button_Y.gif +0 -0
- data/doc/ex/images/Button_Z.gif +0 -0
- data/doc/ex/images/Cheetah.jpg +0 -0
- data/doc/ex/images/Coffee.png +0 -0
- data/doc/ex/images/Flower_Hat.jpg +0 -0
- data/doc/ex/images/Gold_Statue.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
- data/doc/ex/images/Leaf.miff +0 -0
- data/doc/ex/images/No.png +0 -0
- data/doc/ex/images/Polynesia.jpg +0 -0
- data/doc/ex/images/Red_Rocks.jpg +0 -0
- data/doc/ex/images/Rocks_On_Beach.miff +0 -0
- data/doc/ex/images/Shorts.jpg +0 -0
- data/doc/ex/images/Snake.png +0 -0
- data/doc/ex/images/Violin.jpg +0 -0
- data/doc/ex/images/Yellow_Rose.miff +0 -0
- data/doc/ex/images/big-duck.gif +0 -0
- data/doc/ex/images/duck.gif +0 -0
- data/doc/ex/images/duck0.gif +0 -0
- data/doc/ex/images/duck1.gif +0 -0
- data/doc/ex/images/duck10.gif +0 -0
- data/doc/ex/images/duck11.gif +0 -0
- data/doc/ex/images/duck12.gif +0 -0
- data/doc/ex/images/duck13.gif +0 -0
- data/doc/ex/images/duck14.gif +0 -0
- data/doc/ex/images/duck15.gif +0 -0
- data/doc/ex/images/duck2.gif +0 -0
- data/doc/ex/images/duck3.gif +0 -0
- data/doc/ex/images/duck4.gif +0 -0
- data/doc/ex/images/duck5.gif +0 -0
- data/doc/ex/images/duck6.gif +0 -0
- data/doc/ex/images/duck7.gif +0 -0
- data/doc/ex/images/duck8.gif +0 -0
- data/doc/ex/images/duck9.gif +0 -0
- data/doc/ex/images/graydient230x6.gif +0 -0
- data/doc/ex/images/image_with_profile.jpg +0 -0
- data/doc/ex/images/logo400x83.gif +0 -0
- data/doc/ex/images/model.miff +0 -0
- data/doc/ex/images/notimplemented.gif +0 -0
- data/doc/ex/images/smile.miff +0 -0
- data/doc/ex/images/spin.gif +0 -0
- data/doc/ex/implode.rb +0 -34
- data/doc/ex/level.rb +0 -11
- data/doc/ex/level_colors.rb +0 -11
- data/doc/ex/line.rb +0 -41
- data/doc/ex/line01.rb +0 -21
- data/doc/ex/mask.rb +0 -35
- data/doc/ex/matte_fill_to_border.rb +0 -39
- data/doc/ex/matte_floodfill.rb +0 -32
- data/doc/ex/matte_replace.rb +0 -39
- data/doc/ex/median_filter.rb +0 -28
- data/doc/ex/modulate.rb +0 -11
- data/doc/ex/mono.rb +0 -23
- data/doc/ex/morph.rb +0 -25
- data/doc/ex/mosaic.rb +0 -37
- data/doc/ex/motion_blur.rb +0 -11
- data/doc/ex/negate.rb +0 -11
- data/doc/ex/negate_channel.rb +0 -9
- data/doc/ex/nested_rvg.rb +0 -21
- data/doc/ex/nonzero.rb +0 -42
- data/doc/ex/normalize.rb +0 -11
- data/doc/ex/oil_paint.rb +0 -11
- data/doc/ex/opacity.rb +0 -37
- data/doc/ex/ordered_dither.rb +0 -11
- data/doc/ex/path.rb +0 -63
- data/doc/ex/pattern1.rb +0 -25
- data/doc/ex/pattern2.rb +0 -26
- data/doc/ex/polaroid.rb +0 -26
- data/doc/ex/polygon.rb +0 -23
- data/doc/ex/polygon01.rb +0 -21
- data/doc/ex/polyline.rb +0 -22
- data/doc/ex/polyline01.rb +0 -21
- data/doc/ex/posterize.rb +0 -8
- data/doc/ex/preview.rb +0 -8
- data/doc/ex/qbezierpath.rb +0 -52
- data/doc/ex/quad01.rb +0 -34
- data/doc/ex/quantize-m.rb +0 -25
- data/doc/ex/radial_blur.rb +0 -9
- data/doc/ex/raise.rb +0 -8
- data/doc/ex/random_threshold_channel.rb +0 -13
- data/doc/ex/rect01.rb +0 -14
- data/doc/ex/rect02.rb +0 -20
- data/doc/ex/rectangle.rb +0 -34
- data/doc/ex/reduce_noise.rb +0 -28
- data/doc/ex/remap.rb +0 -11
- data/doc/ex/remap_images.rb +0 -19
- data/doc/ex/resize_to_fill.rb +0 -8
- data/doc/ex/resize_to_fit.rb +0 -8
- data/doc/ex/roll.rb +0 -9
- data/doc/ex/rotate.rb +0 -44
- data/doc/ex/rotate_f.rb +0 -14
- data/doc/ex/roundrect.rb +0 -33
- data/doc/ex/rubyname.rb +0 -30
- data/doc/ex/rvg_clippath.rb +0 -12
- data/doc/ex/rvg_linecap.rb +0 -42
- data/doc/ex/rvg_linejoin.rb +0 -40
- data/doc/ex/rvg_opacity.rb +0 -18
- data/doc/ex/rvg_pattern.rb +0 -26
- data/doc/ex/rvg_stroke_dasharray.rb +0 -11
- data/doc/ex/segment.rb +0 -11
- data/doc/ex/sepiatone.rb +0 -7
- data/doc/ex/shade.rb +0 -11
- data/doc/ex/shadow.rb +0 -30
- data/doc/ex/shave.rb +0 -15
- data/doc/ex/shear.rb +0 -10
- data/doc/ex/sketch.rb +0 -17
- data/doc/ex/skewx.rb +0 -51
- data/doc/ex/skewy.rb +0 -47
- data/doc/ex/smile.rb +0 -126
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -55
- data/doc/ex/splice.rb +0 -8
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -54
- data/doc/ex/stroke_dasharray.rb +0 -42
- data/doc/ex/stroke_fill.rb +0 -10
- data/doc/ex/stroke_linecap.rb +0 -44
- data/doc/ex/stroke_linejoin.rb +0 -48
- data/doc/ex/stroke_width.rb +0 -49
- data/doc/ex/swirl.rb +0 -17
- data/doc/ex/text.rb +0 -37
- data/doc/ex/text01.rb +0 -16
- data/doc/ex/text_align.rb +0 -36
- data/doc/ex/text_antialias.rb +0 -37
- data/doc/ex/text_styles.rb +0 -19
- data/doc/ex/text_undercolor.rb +0 -28
- data/doc/ex/texture_fill_to_border.rb +0 -34
- data/doc/ex/texture_floodfill.rb +0 -32
- data/doc/ex/texturefill.rb +0 -24
- data/doc/ex/threshold.rb +0 -13
- data/doc/ex/to_blob.rb +0 -13
- data/doc/ex/translate.rb +0 -39
- data/doc/ex/transparent.rb +0 -38
- data/doc/ex/transpose.rb +0 -9
- data/doc/ex/transverse.rb +0 -9
- data/doc/ex/tref01.rb +0 -24
- data/doc/ex/triangle01.rb +0 -15
- data/doc/ex/trim.rb +0 -23
- data/doc/ex/tspan01.rb +0 -17
- data/doc/ex/tspan02.rb +0 -17
- data/doc/ex/tspan03.rb +0 -19
- data/doc/ex/unsharp_mask.rb +0 -28
- data/doc/ex/viewex.rb +0 -33
- data/doc/ex/vignette.rb +0 -12
- data/doc/ex/watermark.rb +0 -27
- data/doc/ex/wave.rb +0 -9
- data/doc/ex/wet_floor.rb +0 -58
- data/doc/ex/writing_mode01.rb +0 -26
- data/doc/ex/writing_mode02.rb +0 -26
- data/doc/ilist.html +0 -2056
- data/doc/image1.html +0 -4680
- data/doc/image2.html +0 -3665
- data/doc/image3.html +0 -4522
- data/doc/imageattrs.html +0 -1638
- data/doc/imusage.html +0 -514
- data/doc/index.html +0 -416
- data/doc/info.html +0 -1499
- data/doc/magick.html +0 -570
- data/doc/optequiv.html +0 -2435
- data/doc/rvg.html +0 -975
- data/doc/rvgclip.html +0 -248
- data/doc/rvggroup.html +0 -305
- data/doc/rvgimage.html +0 -289
- data/doc/rvgpattern.html +0 -475
- data/doc/rvgshape.html +0 -406
- data/doc/rvgstyle.html +0 -270
- data/doc/rvgtext.html +0 -465
- data/doc/rvgtspan.html +0 -238
- data/doc/rvgtut.html +0 -530
- data/doc/rvguse.html +0 -145
- data/doc/rvgxform.html +0 -294
- data/doc/scripts/doc.js +0 -22
- data/doc/scripts/stripeTables.js +0 -23
- data/doc/struct.html +0 -1339
- data/doc/usage.html +0 -1621
- data/examples/constitute.rb +0 -7
- data/examples/crop_with_gravity.rb +0 -43
- data/examples/demo.rb +0 -323
- data/examples/describe.rb +0 -41
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -312
- data/examples/identify.rb +0 -174
- data/examples/image_opacity.rb +0 -28
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -37
- data/examples/rotating_text.rb +0 -45
- data/examples/spinner.rb +0 -49
- data/examples/thumbnail.rb +0 -64
- data/examples/vignette.rb +0 -78
- data/spec/rmagick/ImageList1_spec.rb +0 -24
- data/spec/rmagick/draw_spec.rb +0 -155
- data/spec/rmagick/image/blue_shift_spec.rb +0 -14
- data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
- data/spec/rmagick/image/composite_spec.rb +0 -72
- data/spec/rmagick/image/constitute_spec.rb +0 -13
- data/spec/rmagick/image/dispatch_spec.rb +0 -16
- data/spec/rmagick/image/dissolve_spec.rb +0 -54
- data/spec/rmagick/image/from_blob_spec.rb +0 -12
- data/spec/rmagick/image/ping_spec.rb +0 -12
- data/spec/rmagick/image/properties_spec.rb +0 -27
- data/spec/rmagick/image/read_spec.rb +0 -28
- data/spec/spec_helper.rb +0 -9
- data/spec/support/issue_200/app.rb +0 -8
- data/test/Draw.rb +0 -351
- data/test/Enum.rb +0 -228
- data/test/Fill.rb +0 -93
- data/test/Image1.rb +0 -606
- data/test/Image2.rb +0 -1408
- data/test/Image3.rb +0 -1086
- data/test/ImageList1.rb +0 -858
- data/test/ImageList2.rb +0 -375
- data/test/Image_attributes.rb +0 -635
- data/test/Import_Export.rb +0 -111
- data/test/Info.rb +0 -436
- data/test/KernelInfo.rb +0 -59
- data/test/Magick.rb +0 -311
- data/test/Pixel.rb +0 -259
- data/test/PolaroidOptions.rb +0 -23
- data/test/Preview.rb +0 -26
- data/test/Struct.rb +0 -45
- data/test/appearance/Montage.rb +0 -26
- data/test/appearance/appearance_assertion.rb +0 -13
- data/test/appearance/expected/montage_border_color.jpg +0 -0
- data/test/cmyk.icm +0 -0
- data/test/lib/internal/Draw.rb +0 -811
- data/test/lib/internal/Geometry.rb +0 -98
- data/test/lib/internal/Magick.rb +0 -40
- data/test/srgb.icm +0 -0
- data/test/test_all_basic.rb +0 -49
- data/test/tmpnam_test.rb +0 -50
data/ext/RMagick/rmmontage.c
CHANGED
@@ -41,7 +41,7 @@ destroy_Montage(void *obj)
|
|
41
41
|
}
|
42
42
|
if (montage->info)
|
43
43
|
{
|
44
|
-
|
44
|
+
DestroyMontageInfo(montage->info);
|
45
45
|
montage->info = NULL;
|
46
46
|
}
|
47
47
|
xfree(montage);
|
@@ -51,11 +51,7 @@ destroy_Montage(void *obj)
|
|
51
51
|
/**
|
52
52
|
* Create a new Montage object.
|
53
53
|
*
|
54
|
-
*
|
55
|
-
* - @verbatim Montage.new @endverbatim
|
56
|
-
*
|
57
|
-
* @param class the Ruby class to use
|
58
|
-
* @return a new Montage object
|
54
|
+
* @return [Magick::ImageList::Montage] a new Montage object
|
59
55
|
*/
|
60
56
|
VALUE
|
61
57
|
Montage_alloc(VALUE class)
|
@@ -73,7 +69,7 @@ Montage_alloc(VALUE class)
|
|
73
69
|
}
|
74
70
|
|
75
71
|
montage_info = CloneMontageInfo(image_info, NULL);
|
76
|
-
(void)
|
72
|
+
(void) DestroyImageInfo(image_info);
|
77
73
|
|
78
74
|
if (!montage_info)
|
79
75
|
{
|
@@ -94,12 +90,8 @@ Montage_alloc(VALUE class)
|
|
94
90
|
/**
|
95
91
|
* Set background_color value.
|
96
92
|
*
|
97
|
-
*
|
98
|
-
*
|
99
|
-
*
|
100
|
-
* @param self this object
|
101
|
-
* @param color the color name
|
102
|
-
* @return color
|
93
|
+
* @param color [Magick::Pixel, String] the color name
|
94
|
+
* @return [Magick::Pixel, String] the given color name
|
103
95
|
*/
|
104
96
|
VALUE
|
105
97
|
Montage_background_color_eq(VALUE self, VALUE color)
|
@@ -115,12 +107,8 @@ Montage_background_color_eq(VALUE self, VALUE color)
|
|
115
107
|
/**
|
116
108
|
* Set border_color value.
|
117
109
|
*
|
118
|
-
*
|
119
|
-
*
|
120
|
-
*
|
121
|
-
* @param self this object
|
122
|
-
* @param color the color name
|
123
|
-
* @return color
|
110
|
+
* @param color [Magick::Pixel, String] the color name
|
111
|
+
* @return [Magick::Pixel, String] the given color name
|
124
112
|
*/
|
125
113
|
VALUE
|
126
114
|
Montage_border_color_eq(VALUE self, VALUE color)
|
@@ -136,12 +124,8 @@ Montage_border_color_eq(VALUE self, VALUE color)
|
|
136
124
|
/**
|
137
125
|
* Set border_width value.
|
138
126
|
*
|
139
|
-
*
|
140
|
-
*
|
141
|
-
*
|
142
|
-
* @param self this object
|
143
|
-
* @param width the width
|
144
|
-
* @return width
|
127
|
+
* @param width [Numeric] the width
|
128
|
+
* @return [Numeric] the given width
|
145
129
|
*/
|
146
130
|
VALUE
|
147
131
|
Montage_border_width_eq(VALUE self, VALUE width)
|
@@ -157,12 +141,8 @@ Montage_border_width_eq(VALUE self, VALUE width)
|
|
157
141
|
/**
|
158
142
|
* Set a composition operator.
|
159
143
|
*
|
160
|
-
*
|
161
|
-
*
|
162
|
-
*
|
163
|
-
* @param self this object
|
164
|
-
* @param compose the composition operator
|
165
|
-
* @return compose
|
144
|
+
* @param compose [Magick::CompositeOperator] the composition operator
|
145
|
+
* @return [Magick::CompositeOperator] the given compose operator
|
166
146
|
*/
|
167
147
|
VALUE
|
168
148
|
Montage_compose_eq(VALUE self, VALUE compose)
|
@@ -178,12 +158,8 @@ Montage_compose_eq(VALUE self, VALUE compose)
|
|
178
158
|
/**
|
179
159
|
* Set filename value.
|
180
160
|
*
|
181
|
-
*
|
182
|
-
*
|
183
|
-
*
|
184
|
-
* @param self this object
|
185
|
-
* @param filename the filename
|
186
|
-
* @return filename
|
161
|
+
* @param filename [String] the filename
|
162
|
+
* @return [String] filename
|
187
163
|
*/
|
188
164
|
VALUE
|
189
165
|
Montage_filename_eq(VALUE self, VALUE filename)
|
@@ -191,7 +167,7 @@ Montage_filename_eq(VALUE self, VALUE filename)
|
|
191
167
|
Montage *montage;
|
192
168
|
|
193
169
|
Data_Get_Struct(self, Montage, montage);
|
194
|
-
|
170
|
+
strlcpy(montage->info->filename, StringValueCStr(filename), sizeof(montage->info->filename));
|
195
171
|
return filename;
|
196
172
|
}
|
197
173
|
|
@@ -199,12 +175,8 @@ Montage_filename_eq(VALUE self, VALUE filename)
|
|
199
175
|
/**
|
200
176
|
* Set fill value.
|
201
177
|
*
|
202
|
-
*
|
203
|
-
*
|
204
|
-
*
|
205
|
-
* @param self this object
|
206
|
-
* @param color the color name
|
207
|
-
* @return color
|
178
|
+
* @param color [Magick::Pixel, String] the color name
|
179
|
+
* @return [Magick::Pixel, String] the given color name
|
208
180
|
*/
|
209
181
|
VALUE
|
210
182
|
Montage_fill_eq(VALUE self, VALUE color)
|
@@ -220,12 +192,8 @@ Montage_fill_eq(VALUE self, VALUE color)
|
|
220
192
|
/**
|
221
193
|
* Set font value.
|
222
194
|
*
|
223
|
-
*
|
224
|
-
*
|
225
|
-
*
|
226
|
-
* @param self this object
|
227
|
-
* @param font the font name
|
228
|
-
* @return font
|
195
|
+
* @param font [String] the font name
|
196
|
+
* @return [String] the given font name
|
229
197
|
*/
|
230
198
|
VALUE
|
231
199
|
Montage_font_eq(VALUE self, VALUE font)
|
@@ -233,7 +201,7 @@ Montage_font_eq(VALUE self, VALUE font)
|
|
233
201
|
Montage *montage;
|
234
202
|
|
235
203
|
Data_Get_Struct(self, Montage, montage);
|
236
|
-
magick_clone_string(&montage->info->font,
|
204
|
+
magick_clone_string(&montage->info->font, StringValueCStr(font));
|
237
205
|
|
238
206
|
return font;
|
239
207
|
}
|
@@ -242,17 +210,12 @@ Montage_font_eq(VALUE self, VALUE font)
|
|
242
210
|
/**
|
243
211
|
* Set frame value.
|
244
212
|
*
|
245
|
-
*
|
246
|
-
*
|
247
|
-
*
|
248
|
-
* Notes:
|
249
|
-
* - The geometry is a string in the form:
|
250
|
-
* @verbatim <width>x<height>+<outer-bevel-width>+<inner-bevel-width> @endverbatim
|
251
|
-
* or a Geometry object
|
213
|
+
* - The geometry is a string in the form:
|
214
|
+
* <width>x<height>+<outer-bevel-width>+<inner-bevel-width>
|
215
|
+
* or a Geometry object
|
252
216
|
*
|
253
|
-
* @param
|
254
|
-
* @
|
255
|
-
* @return frame_arg
|
217
|
+
* @param frame_arg [String] the frame geometry
|
218
|
+
* @see https://www.imagemagick.org/Magick++/Geometry.html
|
256
219
|
*/
|
257
220
|
VALUE
|
258
221
|
Montage_frame_eq(VALUE self, VALUE frame_arg)
|
@@ -261,8 +224,8 @@ Montage_frame_eq(VALUE self, VALUE frame_arg)
|
|
261
224
|
VALUE frame;
|
262
225
|
|
263
226
|
Data_Get_Struct(self, Montage, montage);
|
264
|
-
frame =
|
265
|
-
magick_clone_string(&montage->info->frame,
|
227
|
+
frame = rb_String(frame_arg);
|
228
|
+
magick_clone_string(&montage->info->frame, StringValueCStr(frame));
|
266
229
|
|
267
230
|
RB_GC_GUARD(frame);
|
268
231
|
|
@@ -273,12 +236,13 @@ Montage_frame_eq(VALUE self, VALUE frame_arg)
|
|
273
236
|
/**
|
274
237
|
* Set geometry value.
|
275
238
|
*
|
276
|
-
*
|
277
|
-
*
|
239
|
+
* - The geometry is a string in the form:
|
240
|
+
* <width>x<height>+<outer-bevel-width>+<inner-bevel-width>
|
241
|
+
* or a Geometry object
|
278
242
|
*
|
279
|
-
* @param
|
280
|
-
* @
|
281
|
-
* @
|
243
|
+
* @param geometry_arg [String] the geometry
|
244
|
+
* @return [String] the given geometry
|
245
|
+
* @see https://www.imagemagick.org/Magick++/Geometry.html
|
282
246
|
*/
|
283
247
|
VALUE
|
284
248
|
Montage_geometry_eq(VALUE self, VALUE geometry_arg)
|
@@ -287,8 +251,8 @@ Montage_geometry_eq(VALUE self, VALUE geometry_arg)
|
|
287
251
|
VALUE geometry;
|
288
252
|
|
289
253
|
Data_Get_Struct(self, Montage, montage);
|
290
|
-
geometry =
|
291
|
-
magick_clone_string(&montage->info->geometry,
|
254
|
+
geometry = rb_String(geometry_arg);
|
255
|
+
magick_clone_string(&montage->info->geometry, StringValueCStr(geometry));
|
292
256
|
|
293
257
|
RB_GC_GUARD(geometry);
|
294
258
|
|
@@ -299,12 +263,8 @@ Montage_geometry_eq(VALUE self, VALUE geometry_arg)
|
|
299
263
|
/**
|
300
264
|
* Set gravity value.
|
301
265
|
*
|
302
|
-
*
|
303
|
-
*
|
304
|
-
*
|
305
|
-
* @param self this object
|
306
|
-
* @param gravity the gravity type
|
307
|
-
* @return gravity
|
266
|
+
* @param gravity [Magick::GravityType] the gravity type
|
267
|
+
* @return [Magick::GravityType] the given gravity
|
308
268
|
*/
|
309
269
|
VALUE
|
310
270
|
Montage_gravity_eq(VALUE self, VALUE gravity)
|
@@ -320,11 +280,7 @@ Montage_gravity_eq(VALUE self, VALUE gravity)
|
|
320
280
|
/**
|
321
281
|
* Initialize a Montage object. Does nothing currently.
|
322
282
|
*
|
323
|
-
*
|
324
|
-
* - @verbatim Magick::Montage#initialize @endverbatim
|
325
|
-
*
|
326
|
-
* @param self this object
|
327
|
-
* @return self
|
283
|
+
* @return [Magick::ImageList::Montage] self
|
328
284
|
*/
|
329
285
|
VALUE
|
330
286
|
Montage_initialize(VALUE self)
|
@@ -337,12 +293,8 @@ Montage_initialize(VALUE self)
|
|
337
293
|
/**
|
338
294
|
* Set matte_color value.
|
339
295
|
*
|
340
|
-
*
|
341
|
-
*
|
342
|
-
*
|
343
|
-
* @param self this object
|
344
|
-
* @param color the color name
|
345
|
-
* @return color
|
296
|
+
* @param color [Magick::Pixel, String] the color name
|
297
|
+
* @return [Magick::Pixel, String] the given color name
|
346
298
|
*/
|
347
299
|
VALUE
|
348
300
|
Montage_matte_color_eq(VALUE self, VALUE color)
|
@@ -358,12 +310,8 @@ Montage_matte_color_eq(VALUE self, VALUE color)
|
|
358
310
|
/**
|
359
311
|
* Set pointsize value.
|
360
312
|
*
|
361
|
-
*
|
362
|
-
*
|
363
|
-
*
|
364
|
-
* @param self this object
|
365
|
-
* @param size the point size
|
366
|
-
* @return size
|
313
|
+
* @param size [Numeric] the point size
|
314
|
+
* @return [Numeric] the given point size
|
367
315
|
*/
|
368
316
|
VALUE
|
369
317
|
Montage_pointsize_eq(VALUE self, VALUE size)
|
@@ -379,12 +327,8 @@ Montage_pointsize_eq(VALUE self, VALUE size)
|
|
379
327
|
/**
|
380
328
|
* Set shadow value.
|
381
329
|
*
|
382
|
-
*
|
383
|
-
*
|
384
|
-
*
|
385
|
-
* @param self this object
|
386
|
-
* @param shadow the shadow
|
387
|
-
* @return shadow
|
330
|
+
* @param shadow [Bool] true if the shadow will be enabled
|
331
|
+
* @return [Bool] the given value
|
388
332
|
*/
|
389
333
|
VALUE
|
390
334
|
Montage_shadow_eq(VALUE self, VALUE shadow)
|
@@ -400,12 +344,8 @@ Montage_shadow_eq(VALUE self, VALUE shadow)
|
|
400
344
|
/**
|
401
345
|
* Set stroke value.
|
402
346
|
*
|
403
|
-
*
|
404
|
-
*
|
405
|
-
*
|
406
|
-
* @param self this object
|
407
|
-
* @param color the color name
|
408
|
-
* @return self
|
347
|
+
* @param color [Magick::Pixel, String] the color name
|
348
|
+
* @return [Magick::Pixel, String] the given color name
|
409
349
|
*/
|
410
350
|
VALUE
|
411
351
|
Montage_stroke_eq(VALUE self, VALUE color)
|
@@ -421,12 +361,9 @@ Montage_stroke_eq(VALUE self, VALUE color)
|
|
421
361
|
/**
|
422
362
|
* Set texture value.
|
423
363
|
*
|
424
|
-
*
|
425
|
-
*
|
426
|
-
*
|
427
|
-
* @param self this object
|
428
|
-
* @param texture the texture image
|
429
|
-
* @return texture
|
364
|
+
* @param texture [Magick::Image, Magick::ImageList] Either an imagelist or an image. If an
|
365
|
+
* imagelist, uses the current image.
|
366
|
+
* @return [Magick::Image] the given texture image
|
430
367
|
*/
|
431
368
|
VALUE
|
432
369
|
Montage_texture_eq(VALUE self, VALUE texture)
|
@@ -450,7 +387,7 @@ Montage_texture_eq(VALUE self, VALUE texture)
|
|
450
387
|
texture_image = rm_check_destroyed(texture);
|
451
388
|
|
452
389
|
// Write a temp copy of the image & save its name.
|
453
|
-
rm_write_temp_image(texture_image, temp_name);
|
390
|
+
rm_write_temp_image(texture_image, temp_name, sizeof(temp_name));
|
454
391
|
magick_clone_string(&montage->info->texture, temp_name);
|
455
392
|
|
456
393
|
return texture;
|
@@ -460,12 +397,13 @@ Montage_texture_eq(VALUE self, VALUE texture)
|
|
460
397
|
/**
|
461
398
|
* Set tile value.
|
462
399
|
*
|
463
|
-
*
|
464
|
-
*
|
400
|
+
* - The geometry is a string in the form:
|
401
|
+
* <width>x<height>+<outer-bevel-width>+<inner-bevel-width>
|
402
|
+
* or a Geometry object
|
465
403
|
*
|
466
|
-
* @param
|
467
|
-
* @
|
468
|
-
* @
|
404
|
+
* @param tile_arg [String] the tile geometry
|
405
|
+
* @return [String] the given tile geometry
|
406
|
+
* @see https://www.imagemagick.org/Magick++/Geometry.html
|
469
407
|
*/
|
470
408
|
VALUE
|
471
409
|
Montage_tile_eq(VALUE self, VALUE tile_arg)
|
@@ -474,8 +412,8 @@ Montage_tile_eq(VALUE self, VALUE tile_arg)
|
|
474
412
|
VALUE tile;
|
475
413
|
|
476
414
|
Data_Get_Struct(self, Montage, montage);
|
477
|
-
tile =
|
478
|
-
magick_clone_string(&montage->info->tile,
|
415
|
+
tile = rb_String(tile_arg);
|
416
|
+
magick_clone_string(&montage->info->tile, StringValueCStr(tile));
|
479
417
|
|
480
418
|
RB_GC_GUARD(tile);
|
481
419
|
|
@@ -486,12 +424,8 @@ Montage_tile_eq(VALUE self, VALUE tile_arg)
|
|
486
424
|
/**
|
487
425
|
* Set title value.
|
488
426
|
*
|
489
|
-
*
|
490
|
-
*
|
491
|
-
*
|
492
|
-
* @param self this object
|
493
|
-
* @param title the title
|
494
|
-
* @return title
|
427
|
+
* @param title [String] the title
|
428
|
+
* @return [String] the given title
|
495
429
|
*/
|
496
430
|
VALUE
|
497
431
|
Montage_title_eq(VALUE self, VALUE title)
|
@@ -499,7 +433,7 @@ Montage_title_eq(VALUE self, VALUE title)
|
|
499
433
|
Montage *montage;
|
500
434
|
|
501
435
|
Data_Get_Struct(self, Montage, montage);
|
502
|
-
magick_clone_string(&montage->info->title,
|
436
|
+
magick_clone_string(&montage->info->title, StringValueCStr(title));
|
503
437
|
return title;
|
504
438
|
}
|
505
439
|
|
data/ext/RMagick/rmpixel.c
CHANGED
@@ -16,53 +16,8 @@
|
|
16
16
|
#define QueryColorname QueryMagickColorname
|
17
17
|
#endif
|
18
18
|
|
19
|
-
/*
|
20
|
-
* Declare Pixel channel attribute writers
|
21
|
-
*/
|
22
|
-
//! Pixel channel attribute writer.
|
23
|
-
#define DEF_PIXEL_CHANNEL_WRITER(_channel_) \
|
24
|
-
extern VALUE \
|
25
|
-
Pixel_##_channel_##_eq(VALUE self, VALUE v) \
|
26
|
-
{ \
|
27
|
-
Pixel *pixel; \
|
28
|
-
\
|
29
|
-
rb_check_frozen(self); \
|
30
|
-
Data_Get_Struct(self, Pixel, pixel); \
|
31
|
-
pixel->_channel_ = APP2QUANTUM(v); \
|
32
|
-
(void) rb_funcall(self, rm_ID_changed, 0); \
|
33
|
-
(void) rb_funcall(self, rm_ID_notify_observers, 1, self); \
|
34
|
-
return QUANTUM2NUM((pixel->_channel_)); \
|
35
|
-
}
|
36
|
-
|
37
|
-
|
38
|
-
/*
|
39
|
-
* Declare Pixel CMYK channel attribute accessors
|
40
|
-
*/
|
41
|
-
//! Pixel CMYK channel attribute accessor.
|
42
|
-
#define DEF_PIXEL_CMYK_CHANNEL_ACCESSOR(_cmyk_channel_, _rgb_channel_) \
|
43
|
-
extern VALUE \
|
44
|
-
Pixel_##_cmyk_channel_##_eq(VALUE self, VALUE v) \
|
45
|
-
{ \
|
46
|
-
Pixel *pixel; \
|
47
|
-
\
|
48
|
-
rb_check_frozen(self); \
|
49
|
-
Data_Get_Struct(self, Pixel, pixel); \
|
50
|
-
pixel->_rgb_channel_ = APP2QUANTUM(v); \
|
51
|
-
(void) rb_funcall(self, rm_ID_changed, 0); \
|
52
|
-
(void) rb_funcall(self, rm_ID_notify_observers, 1, self); \
|
53
|
-
return QUANTUM2NUM(pixel->_rgb_channel_); \
|
54
|
-
} \
|
55
|
-
\
|
56
|
-
extern VALUE \
|
57
|
-
Pixel_##_cmyk_channel_(VALUE self) \
|
58
|
-
{ \
|
59
|
-
Pixel *pixel; \
|
60
|
-
\
|
61
|
-
Data_Get_Struct(self, Pixel, pixel); \
|
62
|
-
return INT2NUM(pixel->_rgb_channel_); \
|
63
|
-
}
|
64
|
-
|
65
19
|
|
20
|
+
static VALUE color_arg_rescue(VALUE, VALUE ATTRIBUTE_UNUSED) ATTRIBUTE_NORETURN;
|
66
21
|
static void Color_Name_to_PixelColor(PixelColor *, VALUE);
|
67
22
|
|
68
23
|
|
@@ -81,46 +36,42 @@ destroy_Pixel(Pixel *pixel)
|
|
81
36
|
|
82
37
|
|
83
38
|
/**
|
84
|
-
* Get Pixel red
|
85
|
-
*
|
86
|
-
* Ruby usage:
|
87
|
-
* - @verbatim Pixel#red @endverbatim
|
39
|
+
* Get Pixel red value.
|
88
40
|
*
|
89
|
-
* @
|
90
|
-
* @return the red value
|
41
|
+
* @return [Numeric] the red value
|
91
42
|
*/
|
92
|
-
|
43
|
+
VALUE
|
44
|
+
Pixel_red(VALUE self)
|
45
|
+
{
|
46
|
+
IMPLEMENT_ATTR_READER(Pixel, red, int);
|
47
|
+
}
|
93
48
|
|
94
49
|
/**
|
95
|
-
* Get Pixel green
|
50
|
+
* Get Pixel green value.
|
96
51
|
*
|
97
|
-
*
|
98
|
-
* - @verbatim Pixel#green @endverbatim
|
99
|
-
*
|
100
|
-
* @param self this object
|
101
|
-
* @return the green value
|
52
|
+
* @return [Numeric] the green value
|
102
53
|
*/
|
103
|
-
|
54
|
+
VALUE
|
55
|
+
Pixel_green(VALUE self)
|
56
|
+
{
|
57
|
+
IMPLEMENT_ATTR_READER(Pixel, green, int);
|
58
|
+
}
|
104
59
|
|
105
60
|
/**
|
106
|
-
* Get Pixel blue
|
107
|
-
*
|
108
|
-
* Ruby usage:
|
109
|
-
* - @verbatim Pixel#blue @endverbatim
|
61
|
+
* Get Pixel blue value.
|
110
62
|
*
|
111
|
-
* @
|
112
|
-
* @return the blue value
|
63
|
+
* @return [Numeric] the blue value
|
113
64
|
*/
|
114
|
-
|
65
|
+
VALUE
|
66
|
+
Pixel_blue(VALUE self)
|
67
|
+
{
|
68
|
+
IMPLEMENT_ATTR_READER(Pixel, blue, int);
|
69
|
+
}
|
115
70
|
|
116
71
|
/**
|
117
|
-
* Get Pixel alpha
|
118
|
-
*
|
119
|
-
* Ruby usage:
|
120
|
-
* - @verbatim Pixel#alpha @endverbatim
|
72
|
+
* Get Pixel alpha value.
|
121
73
|
*
|
122
|
-
* @
|
123
|
-
* @return the alpha value
|
74
|
+
* @return [Numeric] the alpha value
|
124
75
|
*/
|
125
76
|
VALUE
|
126
77
|
Pixel_alpha(VALUE self)
|
@@ -135,70 +86,87 @@ Pixel_alpha(VALUE self)
|
|
135
86
|
}
|
136
87
|
|
137
88
|
/**
|
138
|
-
* Set Pixel red
|
89
|
+
* Set Pixel red value.
|
139
90
|
*
|
140
|
-
*
|
141
|
-
*
|
91
|
+
* - Pixel is Observable. Setters call {Magick::Pixel#changed},
|
92
|
+
* {Magick::Pixel#notify_observers}
|
93
|
+
* - Setters return their argument values for backward compatibility to when
|
94
|
+
* Pixel was a Struct class.
|
142
95
|
*
|
143
|
-
*
|
144
|
-
*
|
145
|
-
* - Setters return their argument values for backward compatibility to when
|
146
|
-
* Pixel was a Struct class.
|
147
|
-
*
|
148
|
-
* @param self this object
|
149
|
-
* @param v the red value
|
150
|
-
* @return self
|
96
|
+
* @param v [Numeric] the red value
|
97
|
+
* @return [Numeric] the given red value
|
151
98
|
*/
|
152
|
-
|
99
|
+
VALUE
|
100
|
+
Pixel_red_eq(VALUE self, VALUE v)
|
101
|
+
{
|
102
|
+
Pixel *pixel;
|
103
|
+
|
104
|
+
rb_check_frozen(self);
|
105
|
+
Data_Get_Struct(self, Pixel, pixel);
|
106
|
+
pixel->red = APP2QUANTUM(v);
|
107
|
+
rb_funcall(self, rm_ID_changed, 0);
|
108
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
109
|
+
return QUANTUM2NUM((pixel->red));
|
110
|
+
}
|
153
111
|
|
154
112
|
/**
|
155
|
-
* Set Pixel green
|
113
|
+
* Set Pixel green value.
|
156
114
|
*
|
157
|
-
*
|
158
|
-
*
|
115
|
+
* - Pixel is Observable. Setters call {Magick::Pixel#changed},
|
116
|
+
* {Magick::Pixel#notify_observers}
|
117
|
+
* - Setters return their argument values for backward compatibility to when
|
118
|
+
* Pixel was a Struct class.
|
159
119
|
*
|
160
|
-
*
|
161
|
-
*
|
162
|
-
* - Setters return their argument values for backward compatibility to when
|
163
|
-
* Pixel was a Struct class.
|
164
|
-
*
|
165
|
-
* @param self this object
|
166
|
-
* @param v the green value
|
167
|
-
* @return self
|
120
|
+
* @param v [Numeric] the green value
|
121
|
+
* @return [Numeric] the given green value
|
168
122
|
*/
|
169
|
-
|
123
|
+
VALUE
|
124
|
+
Pixel_green_eq(VALUE self, VALUE v)
|
125
|
+
{
|
126
|
+
Pixel *pixel;
|
127
|
+
|
128
|
+
rb_check_frozen(self);
|
129
|
+
Data_Get_Struct(self, Pixel, pixel);
|
130
|
+
pixel->green = APP2QUANTUM(v);
|
131
|
+
rb_funcall(self, rm_ID_changed, 0);
|
132
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
133
|
+
return QUANTUM2NUM((pixel->green));
|
134
|
+
}
|
170
135
|
|
171
136
|
/**
|
172
|
-
* Set Pixel blue
|
137
|
+
* Set Pixel blue value.
|
173
138
|
*
|
174
|
-
*
|
175
|
-
*
|
139
|
+
* - Pixel is Observable. Setters call {Magick::Pixel#changed},
|
140
|
+
* {Magick::Pixel#notify_observers}
|
141
|
+
* - Setters return their argument values for backward compatibility to when
|
142
|
+
* Pixel was a Struct class.
|
176
143
|
*
|
177
|
-
*
|
178
|
-
*
|
179
|
-
* - Setters return their argument values for backward compatibility to when
|
180
|
-
* Pixel was a Struct class.
|
181
|
-
*
|
182
|
-
* @param self this object
|
183
|
-
* @param v the blue value
|
184
|
-
* @return self
|
144
|
+
* @param v [Numeric] the blue value
|
145
|
+
* @return [Numeric] the given blue value
|
185
146
|
*/
|
186
|
-
|
147
|
+
VALUE
|
148
|
+
Pixel_blue_eq(VALUE self, VALUE v)
|
149
|
+
{
|
150
|
+
Pixel *pixel;
|
151
|
+
|
152
|
+
rb_check_frozen(self);
|
153
|
+
Data_Get_Struct(self, Pixel, pixel);
|
154
|
+
pixel->blue = APP2QUANTUM(v);
|
155
|
+
rb_funcall(self, rm_ID_changed, 0);
|
156
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
157
|
+
return QUANTUM2NUM((pixel->blue));
|
158
|
+
}
|
187
159
|
|
188
160
|
/**
|
189
|
-
* Set Pixel alpha
|
161
|
+
* Set Pixel alpha value.
|
190
162
|
*
|
191
|
-
*
|
192
|
-
*
|
163
|
+
* - Pixel is Observable. Setters call {Magick::Pixel#changed},
|
164
|
+
* {Magick::Pixel#notify_observers}
|
165
|
+
* - Setters return their argument values for backward compatibility to when
|
166
|
+
* Pixel was a Struct class.
|
193
167
|
*
|
194
|
-
*
|
195
|
-
*
|
196
|
-
* - Setters return their argument values for backward compatibility to when
|
197
|
-
* Pixel was a Struct class.
|
198
|
-
*
|
199
|
-
* @param self this object
|
200
|
-
* @param v the alpha value
|
201
|
-
* @return self
|
168
|
+
* @param v [Numeric] the alpha value
|
169
|
+
* @return [Numeric] the given alpha value
|
202
170
|
*/
|
203
171
|
VALUE
|
204
172
|
Pixel_alpha_eq(VALUE self, VALUE v)
|
@@ -209,28 +177,168 @@ Pixel_alpha_eq(VALUE self, VALUE v)
|
|
209
177
|
Data_Get_Struct(self, Pixel, pixel);
|
210
178
|
#if defined(IMAGEMAGICK_7)
|
211
179
|
pixel->alpha = APP2QUANTUM(v);
|
212
|
-
|
213
|
-
|
180
|
+
rb_funcall(self, rm_ID_changed, 0);
|
181
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
214
182
|
return QUANTUM2NUM(pixel->alpha);
|
215
183
|
#else
|
216
184
|
pixel->opacity = QuantumRange - APP2QUANTUM(v);
|
217
|
-
|
218
|
-
|
185
|
+
rb_funcall(self, rm_ID_changed, 0);
|
186
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
219
187
|
return QUANTUM2NUM(QuantumRange - pixel->opacity);
|
220
188
|
#endif
|
221
189
|
}
|
222
190
|
|
223
|
-
|
224
|
-
* Get
|
191
|
+
/**
|
192
|
+
* Get Pixel cyan value.
|
193
|
+
*
|
194
|
+
* @return [Numeric] the cyan value
|
225
195
|
*/
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
196
|
+
VALUE
|
197
|
+
Pixel_cyan(VALUE self)
|
198
|
+
{
|
199
|
+
Pixel *pixel;
|
200
|
+
|
201
|
+
Data_Get_Struct(self, Pixel, pixel);
|
202
|
+
return INT2NUM(pixel->red);
|
203
|
+
}
|
204
|
+
|
205
|
+
/**
|
206
|
+
* Set Pixel cyan value.
|
207
|
+
*
|
208
|
+
* - Pixel is Observable. Setters call {Magick::Pixel#changed},
|
209
|
+
* {Magick::Pixel#notify_observers}
|
210
|
+
* - Setters return their argument values for backward compatibility to when
|
211
|
+
* Pixel was a Struct class.
|
212
|
+
*
|
213
|
+
* @param v [Numeric] the cyan value
|
214
|
+
* @return [Numeric] the given cyan value
|
215
|
+
*/
|
216
|
+
VALUE
|
217
|
+
Pixel_cyan_eq(VALUE self, VALUE v)
|
218
|
+
{
|
219
|
+
Pixel *pixel;
|
220
|
+
|
221
|
+
rb_check_frozen(self);
|
222
|
+
Data_Get_Struct(self, Pixel, pixel);
|
223
|
+
pixel->red = APP2QUANTUM(v);
|
224
|
+
rb_funcall(self, rm_ID_changed, 0);
|
225
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
226
|
+
return QUANTUM2NUM(pixel->red);
|
227
|
+
}
|
228
|
+
|
229
|
+
/**
|
230
|
+
* Get Pixel magenta value.
|
231
|
+
*
|
232
|
+
* @return [Numeric] the magenta value
|
233
|
+
*/
|
234
|
+
VALUE
|
235
|
+
Pixel_magenta(VALUE self)
|
236
|
+
{
|
237
|
+
Pixel *pixel;
|
238
|
+
|
239
|
+
Data_Get_Struct(self, Pixel, pixel);
|
240
|
+
return INT2NUM(pixel->green);
|
241
|
+
}
|
242
|
+
|
243
|
+
/**
|
244
|
+
* Set Pixel magenta value.
|
245
|
+
*
|
246
|
+
* - Pixel is Observable. Setters call {Magick::Pixel#changed},
|
247
|
+
* {Magick::Pixel#notify_observers}
|
248
|
+
* - Setters return their argument values for backward compatibility to when
|
249
|
+
* Pixel was a Struct class.
|
250
|
+
*
|
251
|
+
* @param v [Numeric] the magenta value
|
252
|
+
* @return [Numeric] the given magenta value
|
253
|
+
*/
|
254
|
+
VALUE
|
255
|
+
Pixel_magenta_eq(VALUE self, VALUE v)
|
256
|
+
{
|
257
|
+
Pixel *pixel;
|
258
|
+
|
259
|
+
rb_check_frozen(self);
|
260
|
+
Data_Get_Struct(self, Pixel, pixel);
|
261
|
+
pixel->green = APP2QUANTUM(v);
|
262
|
+
rb_funcall(self, rm_ID_changed, 0);
|
263
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
264
|
+
return QUANTUM2NUM(pixel->green);
|
265
|
+
}
|
266
|
+
|
267
|
+
/**
|
268
|
+
* Get Pixel yellow value.
|
269
|
+
*
|
270
|
+
* @return [Numeric] the yellow value
|
271
|
+
*/
|
272
|
+
VALUE
|
273
|
+
Pixel_yellow(VALUE self)
|
274
|
+
{
|
275
|
+
Pixel *pixel;
|
276
|
+
|
277
|
+
Data_Get_Struct(self, Pixel, pixel);
|
278
|
+
return INT2NUM(pixel->blue);
|
279
|
+
}
|
280
|
+
|
281
|
+
/**
|
282
|
+
* Set Pixel yellow value.
|
283
|
+
*
|
284
|
+
* - Pixel is Observable. Setters call {Magick::Pixel#changed},
|
285
|
+
* {Magick::Pixel#notify_observers}
|
286
|
+
* - Setters return their argument values for backward compatibility to when
|
287
|
+
* Pixel was a Struct class.
|
288
|
+
*
|
289
|
+
* @param v [Numeric] the yellow value
|
290
|
+
* @return [Numeric] the given yellow value
|
291
|
+
*/
|
292
|
+
VALUE
|
293
|
+
Pixel_yellow_eq(VALUE self, VALUE v)
|
294
|
+
{
|
295
|
+
Pixel *pixel;
|
296
|
+
|
297
|
+
rb_check_frozen(self);
|
298
|
+
Data_Get_Struct(self, Pixel, pixel);
|
299
|
+
pixel->blue = APP2QUANTUM(v);
|
300
|
+
rb_funcall(self, rm_ID_changed, 0);
|
301
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
302
|
+
return QUANTUM2NUM(pixel->blue);
|
303
|
+
}
|
304
|
+
|
305
|
+
/**
|
306
|
+
* Get Pixel black value.
|
307
|
+
*
|
308
|
+
* @return [Numeric] the black value
|
309
|
+
*/
|
310
|
+
VALUE
|
311
|
+
Pixel_black(VALUE self)
|
312
|
+
{
|
313
|
+
Pixel *pixel;
|
314
|
+
|
315
|
+
Data_Get_Struct(self, Pixel, pixel);
|
316
|
+
return INT2NUM(pixel->black);
|
317
|
+
}
|
318
|
+
|
319
|
+
/**
|
320
|
+
* Set Pixel black value.
|
321
|
+
*
|
322
|
+
* - Pixel is Observable. Setters call {Magick::Pixel#changed},
|
323
|
+
* {Magick::Pixel#notify_observers}
|
324
|
+
* - Setters return their argument values for backward compatibility to when
|
325
|
+
* Pixel was a Struct class.
|
326
|
+
*
|
327
|
+
* @param v [Numeric] the black value
|
328
|
+
* @return [Numeric] the given black value
|
329
|
+
*/
|
330
|
+
VALUE
|
331
|
+
Pixel_black_eq(VALUE self, VALUE v)
|
332
|
+
{
|
333
|
+
Pixel *pixel;
|
334
|
+
|
335
|
+
rb_check_frozen(self);
|
336
|
+
Data_Get_Struct(self, Pixel, pixel);
|
337
|
+
pixel->black = APP2QUANTUM(v);
|
338
|
+
rb_funcall(self, rm_ID_changed, 0);
|
339
|
+
rb_funcall(self, rm_ID_notify_observers, 1, self);
|
340
|
+
return QUANTUM2NUM(pixel->black);
|
341
|
+
}
|
234
342
|
|
235
343
|
|
236
344
|
/**
|
@@ -244,11 +352,10 @@ DEF_PIXEL_CMYK_CHANNEL_ACCESSOR(black, opacity)
|
|
244
352
|
* @throw ArgumentError
|
245
353
|
*/
|
246
354
|
static VALUE
|
247
|
-
color_arg_rescue(VALUE arg)
|
355
|
+
color_arg_rescue(VALUE arg, VALUE raised_exc ATTRIBUTE_UNUSED)
|
248
356
|
{
|
249
357
|
rb_raise(rb_eTypeError, "argument must be color name or pixel (%s given)",
|
250
358
|
rb_class2name(CLASS_OF(arg)));
|
251
|
-
return (VALUE)0;
|
252
359
|
}
|
253
360
|
|
254
361
|
|
@@ -275,6 +382,7 @@ Color_to_PixelColor(PixelColor *pp, VALUE color)
|
|
275
382
|
pp->blue = pixel->blue;
|
276
383
|
#if defined(IMAGEMAGICK_7)
|
277
384
|
pp->alpha = pixel->alpha;
|
385
|
+
pp->black = pixel->black;
|
278
386
|
#else
|
279
387
|
pp->opacity = pixel->opacity;
|
280
388
|
#endif
|
@@ -288,6 +396,44 @@ Color_to_PixelColor(PixelColor *pp, VALUE color)
|
|
288
396
|
}
|
289
397
|
|
290
398
|
|
399
|
+
/**
|
400
|
+
* Convert either a String color name or a {Magick::Pixel} to a Pixel.
|
401
|
+
*
|
402
|
+
* No Ruby usage (internal function)
|
403
|
+
*
|
404
|
+
* @param pp the Pixel to modify
|
405
|
+
* @param color the color name or Magick::Pixel
|
406
|
+
*/
|
407
|
+
void
|
408
|
+
Color_to_Pixel(Pixel *pp, VALUE color)
|
409
|
+
{
|
410
|
+
PixelColor pixel_color;
|
411
|
+
|
412
|
+
memset(pp, 0, sizeof(*pp));
|
413
|
+
// Allow color name or Pixel
|
414
|
+
if (CLASS_OF(color) == Class_Pixel)
|
415
|
+
{
|
416
|
+
Pixel *pixel;
|
417
|
+
|
418
|
+
Data_Get_Struct(color, Pixel, pixel);
|
419
|
+
memcpy(pp, pixel, sizeof(Pixel));
|
420
|
+
}
|
421
|
+
else
|
422
|
+
{
|
423
|
+
Color_to_PixelColor(&pixel_color, color);
|
424
|
+
pp->red = pixel_color.red;
|
425
|
+
pp->green = pixel_color.green;
|
426
|
+
pp->blue = pixel_color.blue;
|
427
|
+
#if defined(IMAGEMAGICK_7)
|
428
|
+
pp->alpha = pixel_color.alpha;
|
429
|
+
pp->black = pixel_color.black;
|
430
|
+
#else
|
431
|
+
pp->opacity = pixel_color.opacity;
|
432
|
+
#endif
|
433
|
+
}
|
434
|
+
}
|
435
|
+
|
436
|
+
|
291
437
|
/**
|
292
438
|
* Convert a color name to a PixelColor
|
293
439
|
*
|
@@ -305,9 +451,9 @@ Color_Name_to_PixelColor(PixelColor *color, VALUE name_arg)
|
|
305
451
|
ExceptionInfo *exception;
|
306
452
|
|
307
453
|
exception = AcquireExceptionInfo();
|
308
|
-
name =
|
454
|
+
name = StringValueCStr(name_arg);
|
309
455
|
okay = QueryColorCompliance(name, AllCompliance, color, exception);
|
310
|
-
|
456
|
+
DestroyExceptionInfo(exception);
|
311
457
|
if (!okay)
|
312
458
|
{
|
313
459
|
rb_raise(rb_eArgError, "invalid color name %s", name);
|
@@ -319,10 +465,7 @@ Color_Name_to_PixelColor(PixelColor *color, VALUE name_arg)
|
|
319
465
|
/**
|
320
466
|
* Allocate a Pixel object.
|
321
467
|
*
|
322
|
-
*
|
323
|
-
*
|
324
|
-
* @param class the Ruby class to use
|
325
|
-
* @return a new Magick::Pixel object
|
468
|
+
* @return [Magick::Pixel] a new Magick::Pixel object
|
326
469
|
*/
|
327
470
|
VALUE
|
328
471
|
Pixel_alloc(VALUE class)
|
@@ -338,21 +481,17 @@ Pixel_alloc(VALUE class)
|
|
338
481
|
/**
|
339
482
|
* "Case equal" operator for Pixel.
|
340
483
|
*
|
341
|
-
*
|
342
|
-
*
|
343
|
-
*
|
344
|
-
* @param self this object
|
345
|
-
* @param other the other object
|
346
|
-
* @return true or false
|
484
|
+
* @param other [Object] the other object
|
485
|
+
* @return [Boolean] true or false
|
347
486
|
*/
|
348
487
|
|
349
488
|
VALUE
|
350
489
|
Pixel_case_eq(VALUE self, VALUE other)
|
351
490
|
{
|
352
|
-
Pixel *this, *that;
|
353
|
-
|
354
491
|
if (CLASS_OF(self) == CLASS_OF(other))
|
355
492
|
{
|
493
|
+
Pixel *this, *that;
|
494
|
+
|
356
495
|
Data_Get_Struct(self, Pixel, this);
|
357
496
|
Data_Get_Struct(other, Pixel, that);
|
358
497
|
return (this->red == that->red
|
@@ -372,13 +511,9 @@ Pixel_case_eq(VALUE self, VALUE other)
|
|
372
511
|
/**
|
373
512
|
* Clone a Pixel.
|
374
513
|
*
|
375
|
-
*
|
376
|
-
*
|
377
|
-
*
|
378
|
-
* @param self this object
|
379
|
-
* @return a clone
|
380
|
-
* @see Pixel_dup
|
381
|
-
* @see Pixel_init_copy
|
514
|
+
* @return [Magick::Pixel] a clone object
|
515
|
+
* @see #dup
|
516
|
+
* @see #initialize_copy
|
382
517
|
*/
|
383
518
|
VALUE
|
384
519
|
Pixel_clone(VALUE self)
|
@@ -400,13 +535,9 @@ Pixel_clone(VALUE self)
|
|
400
535
|
/**
|
401
536
|
* Duplicate a Pixel.
|
402
537
|
*
|
403
|
-
*
|
404
|
-
*
|
405
|
-
*
|
406
|
-
* @param self this object
|
407
|
-
* @return a clone
|
408
|
-
* @see Pixel_clone
|
409
|
-
* @see Pixel_init_copy
|
538
|
+
* @return [Magick::Pixel] a duplicated object
|
539
|
+
* @see #clone
|
540
|
+
* @see #initialize_copy
|
410
541
|
*/
|
411
542
|
VALUE
|
412
543
|
Pixel_dup(VALUE self)
|
@@ -417,11 +548,6 @@ Pixel_dup(VALUE self)
|
|
417
548
|
pixel = ALLOC(Pixel);
|
418
549
|
memset(pixel, '\0', sizeof(Pixel));
|
419
550
|
dup = Data_Wrap_Struct(CLASS_OF(self), NULL, destroy_Pixel, pixel);
|
420
|
-
if (rb_obj_tainted(self))
|
421
|
-
{
|
422
|
-
(void) rb_obj_taint(dup);
|
423
|
-
}
|
424
|
-
|
425
551
|
RB_GC_GUARD(dup);
|
426
552
|
|
427
553
|
return rb_funcall(dup, rm_ID_initialize_copy, 1, self);
|
@@ -429,14 +555,10 @@ Pixel_dup(VALUE self)
|
|
429
555
|
|
430
556
|
|
431
557
|
/**
|
432
|
-
*
|
558
|
+
* Equality. Returns true only if receiver and other are the same object.
|
433
559
|
*
|
434
|
-
*
|
435
|
-
*
|
436
|
-
*
|
437
|
-
* @param self this object
|
438
|
-
* @param other the other object
|
439
|
-
* @return true if hash to the same value, otherwise false
|
560
|
+
* @param other [Object] the other object
|
561
|
+
* @return [Boolean] true if other is the same value, otherwise false
|
440
562
|
*/
|
441
563
|
VALUE
|
442
564
|
Pixel_eql_q(VALUE self, VALUE other)
|
@@ -448,17 +570,11 @@ Pixel_eql_q(VALUE self, VALUE other)
|
|
448
570
|
/**
|
449
571
|
* Compare pixel values for equality.
|
450
572
|
*
|
451
|
-
*
|
452
|
-
*
|
453
|
-
*
|
454
|
-
*
|
455
|
-
*
|
456
|
-
* - Default colorspace is RGBColorspace
|
457
|
-
*
|
458
|
-
* @param argc number of input arguments
|
459
|
-
* @param argv array of input arguments
|
460
|
-
* @param self this object
|
461
|
-
* @return true if equal, otherwise false
|
573
|
+
* @overload fcmp(other, fuzz = 0.0, colorspace = Magick::RGBColorspace)
|
574
|
+
* @param other [Magick::Pixel] The pixel to which the receiver is compared
|
575
|
+
* @param fuzz [Float] The amount of fuzz to allow before the colors are considered to be different
|
576
|
+
* @param colorspace [Magick::ColorspaceType] The colorspace
|
577
|
+
* @return [Boolean] true if equal, otherwise false
|
462
578
|
*/
|
463
579
|
VALUE
|
464
580
|
Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
@@ -466,12 +582,10 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
|
466
582
|
double fuzz = 0.0;
|
467
583
|
unsigned int equal;
|
468
584
|
ColorspaceType colorspace = RGBColorspace;
|
469
|
-
#if defined(IMAGEMAGICK_7)
|
470
585
|
PixelColor this, that;
|
471
|
-
#
|
586
|
+
#if defined(IMAGEMAGICK_6)
|
472
587
|
Image *image;
|
473
588
|
Info *info;
|
474
|
-
Pixel *this, *that;
|
475
589
|
#endif
|
476
590
|
|
477
591
|
switch (argc)
|
@@ -488,18 +602,16 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
|
488
602
|
break;
|
489
603
|
}
|
490
604
|
|
491
|
-
#if defined(IMAGEMAGICK_7)
|
492
605
|
Color_to_PixelColor(&this, self);
|
493
606
|
Color_to_PixelColor(&that, argv[0]);
|
607
|
+
|
608
|
+
#if defined(IMAGEMAGICK_7)
|
494
609
|
this.fuzz = fuzz;
|
495
610
|
this.colorspace = colorspace;
|
496
611
|
that.fuzz = fuzz;
|
497
612
|
that.colorspace = colorspace;
|
498
613
|
equal = IsFuzzyEquivalencePixelInfo(&this, &that);
|
499
614
|
#else
|
500
|
-
Data_Get_Struct(self, Pixel, this);
|
501
|
-
Data_Get_Struct(argv[0], Pixel, that);
|
502
|
-
|
503
615
|
// The IsColorSimilar function expects to get the
|
504
616
|
// colorspace and fuzz parameters from an Image structure.
|
505
617
|
|
@@ -512,7 +624,7 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
|
512
624
|
image = rm_acquire_image(info);
|
513
625
|
|
514
626
|
// Delete Info now in case we have to raise an exception
|
515
|
-
|
627
|
+
DestroyImageInfo(info);
|
516
628
|
|
517
629
|
if (!image)
|
518
630
|
{
|
@@ -522,8 +634,8 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
|
522
634
|
image->colorspace = colorspace;
|
523
635
|
image->fuzz = fuzz;
|
524
636
|
|
525
|
-
equal = IsColorSimilar(image, this, that);
|
526
|
-
|
637
|
+
equal = IsColorSimilar(image, &this, &that);
|
638
|
+
DestroyImage(image);
|
527
639
|
#endif
|
528
640
|
|
529
641
|
return equal ? Qtrue : Qfalse;
|
@@ -531,21 +643,16 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
|
531
643
|
|
532
644
|
|
533
645
|
/**
|
534
|
-
* Construct an Magick::Pixel corresponding to the given color name.
|
646
|
+
* Construct an {Magick::Pixel} corresponding to the given color name.
|
535
647
|
*
|
536
|
-
*
|
537
|
-
*
|
648
|
+
* - The "inverse" is {Image#to_color}, b/c the conversion of a pixel to a
|
649
|
+
* color name requires both a color depth and if the opacity value has
|
650
|
+
* meaning.
|
538
651
|
*
|
539
|
-
*
|
540
|
-
*
|
541
|
-
*
|
542
|
-
*
|
543
|
-
*
|
544
|
-
* @param class the Ruby class to use
|
545
|
-
* @param name the color name
|
546
|
-
* @return a new Magic::Pixel object
|
547
|
-
* @see Image_to_color
|
548
|
-
* @see Pixel_to_color
|
652
|
+
* @param name [String] the color name
|
653
|
+
* @return [Magick::Pixel] a new Magic::Pixel object
|
654
|
+
* @see Magick::Image#to_color
|
655
|
+
* @see Magick::Pixel#to_color
|
549
656
|
*/
|
550
657
|
VALUE
|
551
658
|
Pixel_from_color(VALUE class ATTRIBUTE_UNUSED, VALUE name)
|
@@ -555,13 +662,13 @@ Pixel_from_color(VALUE class ATTRIBUTE_UNUSED, VALUE name)
|
|
555
662
|
MagickBooleanType okay;
|
556
663
|
|
557
664
|
exception = AcquireExceptionInfo();
|
558
|
-
okay = QueryColorCompliance(
|
559
|
-
CHECK_EXCEPTION()
|
560
|
-
|
665
|
+
okay = QueryColorCompliance(StringValueCStr(name), AllCompliance, &pp, exception);
|
666
|
+
CHECK_EXCEPTION();
|
667
|
+
DestroyExceptionInfo(exception);
|
561
668
|
|
562
669
|
if (!okay)
|
563
670
|
{
|
564
|
-
rb_raise(rb_eArgError, "invalid color name: %s",
|
671
|
+
rb_raise(rb_eArgError, "invalid color name: %s", StringValueCStr(name));
|
565
672
|
}
|
566
673
|
|
567
674
|
return Pixel_from_PixelColor(&pp);
|
@@ -571,21 +678,17 @@ Pixel_from_color(VALUE class ATTRIBUTE_UNUSED, VALUE name)
|
|
571
678
|
/**
|
572
679
|
* Construct an RGB pixel.
|
573
680
|
*
|
574
|
-
*
|
575
|
-
*
|
576
|
-
*
|
577
|
-
*
|
578
|
-
*
|
579
|
-
*
|
580
|
-
*
|
581
|
-
*
|
582
|
-
*
|
583
|
-
*
|
584
|
-
*
|
585
|
-
* @param argc number of input arguments
|
586
|
-
* @param argv array of input arguments
|
587
|
-
* @param class the Ruby class to use
|
588
|
-
* @return a new Magick::Pixel object
|
681
|
+
* - 0 <= +hue+ < 360 OR "0%" <= +hue+ < "100%"
|
682
|
+
* - 0 <= +saturation+ <= 255 OR "0%" <= +saturation+ <= "100%"
|
683
|
+
* - 0 <= +lightness+ <= 255 OR "0%" <= +lightness+ <= "100%"
|
684
|
+
* - 0 <= +alpha+ <= 1 (0 is transparent, 1 is opaque) OR "0%" <= +alpha+ <= "100%"
|
685
|
+
*
|
686
|
+
* @overload from_hsla(hue, saturation, lightness, alpha = 1.0)
|
687
|
+
* @param hue [Numeric, String] A value in the range.
|
688
|
+
* @param saturation [Numeric, String] A value in the range.
|
689
|
+
* @param lightness [Numeric, String] A value in the range.
|
690
|
+
* @param alpha [Numeric] The alpha value.
|
691
|
+
* @return [Magick::Pixel] a new Magick::Pixel object
|
589
692
|
*/
|
590
693
|
VALUE
|
591
694
|
Pixel_from_hsla(int argc, VALUE *argv, VALUE class ATTRIBUTE_UNUSED)
|
@@ -599,14 +702,14 @@ Pixel_from_hsla(int argc, VALUE *argv, VALUE class ATTRIBUTE_UNUSED)
|
|
599
702
|
switch (argc)
|
600
703
|
{
|
601
704
|
case 4:
|
602
|
-
a = rm_percentage(argv[3],1.0);
|
705
|
+
a = rm_percentage(argv[3], 1.0);
|
603
706
|
alpha = MagickTrue;
|
604
707
|
case 3:
|
605
708
|
// saturation and lightness are out of 255 in new ImageMagicks and
|
606
709
|
// out of 100 in old ImageMagicks. Compromise: always use %.
|
607
|
-
l = rm_percentage(argv[2],255.0);
|
608
|
-
s = rm_percentage(argv[1],255.0);
|
609
|
-
h = rm_percentage(argv[0],360.0);
|
710
|
+
l = rm_percentage(argv[2], 255.0);
|
711
|
+
s = rm_percentage(argv[1], 255.0);
|
712
|
+
h = rm_percentage(argv[0], 360.0);
|
610
713
|
break;
|
611
714
|
default:
|
612
715
|
rb_raise(rb_eArgError, "wrong number of arguments (%d for 3 or 4)", argc);
|
@@ -633,23 +736,23 @@ Pixel_from_hsla(int argc, VALUE *argv, VALUE class ATTRIBUTE_UNUSED)
|
|
633
736
|
memset(name, 0, sizeof(name));
|
634
737
|
if (alpha)
|
635
738
|
{
|
636
|
-
|
739
|
+
snprintf(name, sizeof(name), "hsla(%-2.1f,%-2.1f,%-2.1f,%-2.1f)", h, s, l, a);
|
637
740
|
}
|
638
741
|
else
|
639
742
|
{
|
640
|
-
|
743
|
+
snprintf(name, sizeof(name), "hsl(%-2.1f,%-2.1f,%-2.1f)", h, s, l);
|
641
744
|
}
|
642
745
|
|
643
746
|
exception = AcquireExceptionInfo();
|
644
747
|
|
645
748
|
#if defined(IMAGEMAGICK_7)
|
646
|
-
|
749
|
+
QueryColorCompliance(name, AllCompliance, &pp, exception);
|
647
750
|
#else
|
648
|
-
|
751
|
+
QueryMagickColor(name, &pp, exception);
|
649
752
|
#endif
|
650
|
-
CHECK_EXCEPTION()
|
753
|
+
CHECK_EXCEPTION();
|
651
754
|
|
652
|
-
|
755
|
+
DestroyExceptionInfo(exception);
|
653
756
|
|
654
757
|
return Pixel_from_MagickPixel(&pp);
|
655
758
|
}
|
@@ -672,14 +775,15 @@ Pixel_from_MagickPixel(const MagickPixel *pp)
|
|
672
775
|
Pixel *pixel;
|
673
776
|
|
674
777
|
pixel = ALLOC(Pixel);
|
675
|
-
pixel->red =
|
676
|
-
pixel->green =
|
677
|
-
pixel->blue =
|
778
|
+
pixel->red = pp->red;
|
779
|
+
pixel->green = pp->green;
|
780
|
+
pixel->blue = pp->blue;
|
678
781
|
#if defined(IMAGEMAGICK_7)
|
679
|
-
pixel->alpha =
|
782
|
+
pixel->alpha = pp->alpha;
|
680
783
|
#else
|
681
|
-
pixel->opacity =
|
784
|
+
pixel->opacity = pp->opacity;
|
682
785
|
#endif
|
786
|
+
pixel->black = pp->index;
|
683
787
|
|
684
788
|
return Data_Wrap_Struct(Class_Pixel, NULL, destroy_Pixel, pixel);
|
685
789
|
}
|
@@ -707,8 +811,10 @@ Pixel_from_PixelPacket(const PixelPacket *pp)
|
|
707
811
|
pixel->blue = pp->blue;
|
708
812
|
#if defined(IMAGEMAGICK_7)
|
709
813
|
pixel->alpha = pp->alpha;
|
814
|
+
pixel->black = pp->black;
|
710
815
|
#else
|
711
816
|
pixel->opacity = pp->opacity;
|
817
|
+
pixel->black = 0;
|
712
818
|
#endif
|
713
819
|
|
714
820
|
return Data_Wrap_Struct(Class_Pixel, NULL, destroy_Pixel, pixel);
|
@@ -737,8 +843,10 @@ Pixel_from_PixelColor(const PixelColor *pp)
|
|
737
843
|
pixel->blue = pp->blue;
|
738
844
|
#if defined(IMAGEMAGICK_7)
|
739
845
|
pixel->alpha = pp->alpha;
|
846
|
+
pixel->black = pp->black;
|
740
847
|
#else
|
741
848
|
pixel->opacity = pp->opacity;
|
849
|
+
pixel->black = 0;
|
742
850
|
#endif
|
743
851
|
|
744
852
|
return Data_Wrap_Struct(Class_Pixel, NULL, destroy_Pixel, pixel);
|
@@ -746,15 +854,9 @@ Pixel_from_PixelColor(const PixelColor *pp)
|
|
746
854
|
|
747
855
|
|
748
856
|
/**
|
749
|
-
*
|
750
|
-
* - @verbatim Pixel#hash @endverbatim
|
751
|
-
*
|
752
|
-
* Notes:
|
753
|
-
* - INT2FIX left-shifts 1 bit. Sacrifice 1 bit from the opacity attribute to
|
754
|
-
* the FIXNUM_FLAG.
|
857
|
+
* Compute a hash-code.
|
755
858
|
*
|
756
|
-
* @
|
757
|
-
* @return the hash of self
|
859
|
+
* @return [Numeric] the hash of self
|
758
860
|
*/
|
759
861
|
VALUE
|
760
862
|
Pixel_hash(VALUE self)
|
@@ -780,14 +882,10 @@ Pixel_hash(VALUE self)
|
|
780
882
|
/**
|
781
883
|
* Initialize clone, dup methods.
|
782
884
|
*
|
783
|
-
*
|
784
|
-
*
|
785
|
-
*
|
786
|
-
* @
|
787
|
-
* @param orig the original Pixel
|
788
|
-
* @return self
|
789
|
-
* @see Pixel_clone
|
790
|
-
* @see Pixel_dup
|
885
|
+
* @param orig [Magick::Pixel] the original Pixel
|
886
|
+
* @return [Magick::Pixel] self
|
887
|
+
* @see #clone
|
888
|
+
* @see #dup
|
791
889
|
*/
|
792
890
|
VALUE
|
793
891
|
Pixel_init_copy(VALUE self, VALUE orig)
|
@@ -804,24 +902,14 @@ Pixel_init_copy(VALUE self, VALUE orig)
|
|
804
902
|
|
805
903
|
|
806
904
|
/**
|
807
|
-
*
|
808
|
-
*
|
809
|
-
*
|
810
|
-
*
|
811
|
-
*
|
812
|
-
*
|
813
|
-
*
|
814
|
-
*
|
815
|
-
* - Default red is 0.0
|
816
|
-
* - Default green is 0.0
|
817
|
-
* - Default blue is 0.0
|
818
|
-
* - Default opacity is 0.0
|
819
|
-
* - For backward compatibility, arguments may be nil.
|
820
|
-
*
|
821
|
-
* @param argc number of input arguments
|
822
|
-
* @param argv array of input arguments
|
823
|
-
* @param self this object
|
824
|
-
* @return self
|
905
|
+
* Initialize Pixel object.
|
906
|
+
*
|
907
|
+
* @overload initialize(red = 0, green = 0, blue = 0, opacity = 0)
|
908
|
+
* @param red [Numeric] The red value
|
909
|
+
* @param green [Numeric] The green value
|
910
|
+
* @param blue [Numeric] The blue value
|
911
|
+
* @param opacity [Numeric] The opacity value
|
912
|
+
* @return [Magick::Pixel] self
|
825
913
|
*/
|
826
914
|
VALUE
|
827
915
|
Pixel_initialize(int argc, VALUE *argv, VALUE self)
|
@@ -876,11 +964,7 @@ Pixel_initialize(int argc, VALUE *argv, VALUE self)
|
|
876
964
|
/**
|
877
965
|
* Return the "intensity" of a pixel.
|
878
966
|
*
|
879
|
-
*
|
880
|
-
* - @verbatim Pixel#intensity @endverbatim
|
881
|
-
*
|
882
|
-
* @param self this object
|
883
|
-
* @return the intensity
|
967
|
+
* @return [Numeric] the intensity
|
884
968
|
*/
|
885
969
|
VALUE
|
886
970
|
Pixel_intensity(VALUE self)
|
@@ -901,11 +985,7 @@ Pixel_intensity(VALUE self)
|
|
901
985
|
/**
|
902
986
|
* Support Marshal.dump.
|
903
987
|
*
|
904
|
-
*
|
905
|
-
* - @verbatim Pixel#marshal_dump @endverbatim
|
906
|
-
*
|
907
|
-
* @param self this object
|
908
|
-
* @return a string representing the dumped pixel
|
988
|
+
* @return [Hash] a representing the dumped pixel
|
909
989
|
*/
|
910
990
|
VALUE
|
911
991
|
Pixel_marshal_dump(VALUE self)
|
@@ -933,11 +1013,7 @@ Pixel_marshal_dump(VALUE self)
|
|
933
1013
|
/**
|
934
1014
|
* Support Marshal.load.
|
935
1015
|
*
|
936
|
-
*
|
937
|
-
* - @verbatim Pixel#marshal_load @endverbatim
|
938
|
-
*
|
939
|
-
* @param self this object
|
940
|
-
* @param dpixel the dumped pixel
|
1016
|
+
* @param dpixel [Hash] the dumped pixel
|
941
1017
|
* @return self
|
942
1018
|
*/
|
943
1019
|
VALUE
|
@@ -961,12 +1037,8 @@ Pixel_marshal_load(VALUE self, VALUE dpixel)
|
|
961
1037
|
/**
|
962
1038
|
* Support Comparable mixin.
|
963
1039
|
*
|
964
|
-
*
|
965
|
-
*
|
966
|
-
*
|
967
|
-
* @param self this object
|
968
|
-
* @param other the other Pixel
|
969
|
-
* @return -1, 0, 1
|
1040
|
+
* @param other [Object] the other Pixel
|
1041
|
+
* @return [-1, 0, 1, nil] the result of compare
|
970
1042
|
*/
|
971
1043
|
VALUE
|
972
1044
|
Pixel_spaceship(VALUE self, VALUE other)
|
@@ -978,25 +1050,25 @@ Pixel_spaceship(VALUE self, VALUE other)
|
|
978
1050
|
|
979
1051
|
if (this->red != that->red)
|
980
1052
|
{
|
981
|
-
return INT2NUM((this->red - that->red)/abs(this->red - that->red));
|
1053
|
+
return INT2NUM((this->red - that->red)/abs((int)(this->red - that->red)));
|
982
1054
|
}
|
983
1055
|
else if(this->green != that->green)
|
984
1056
|
{
|
985
|
-
return INT2NUM((this->green - that->green)/abs(this->green - that->green));
|
1057
|
+
return INT2NUM((this->green - that->green)/abs((int)(this->green - that->green)));
|
986
1058
|
}
|
987
1059
|
else if(this->blue != that->blue)
|
988
1060
|
{
|
989
|
-
return INT2NUM((this->blue - that->blue)/abs(this->blue - that->blue));
|
1061
|
+
return INT2NUM((this->blue - that->blue)/abs((int)(this->blue - that->blue)));
|
990
1062
|
}
|
991
1063
|
#if defined(IMAGEMAGICK_7)
|
992
1064
|
else if(this->alpha != that->alpha)
|
993
1065
|
{
|
994
|
-
return INT2NUM((this->alpha - that->alpha)/abs(this->alpha - that->alpha));
|
1066
|
+
return INT2NUM((this->alpha - that->alpha)/abs((int)(this->alpha - that->alpha)));
|
995
1067
|
}
|
996
1068
|
#else
|
997
1069
|
else if(this->opacity != that->opacity)
|
998
1070
|
{
|
999
|
-
return INT2NUM(((QuantumRange - this->opacity) - (QuantumRange - that->opacity))/abs((QuantumRange - this->opacity) - (QuantumRange - that->opacity)));
|
1071
|
+
return INT2NUM(((QuantumRange - this->opacity) - (QuantumRange - that->opacity))/abs((int)((QuantumRange - this->opacity) - (QuantumRange - that->opacity))));
|
1000
1072
|
}
|
1001
1073
|
#endif
|
1002
1074
|
|
@@ -1008,16 +1080,11 @@ Pixel_spaceship(VALUE self, VALUE other)
|
|
1008
1080
|
|
1009
1081
|
|
1010
1082
|
/**
|
1011
|
-
* Return [hue
|
1012
|
-
*
|
1013
|
-
*
|
1014
|
-
*
|
1015
|
-
* Ruby usage:
|
1016
|
-
* - @verbatim Pixel#to_hsla @endverbatim
|
1083
|
+
* Return [+hue+, +saturation+, +lightness+, +alpha+] in the same ranges as
|
1084
|
+
* {Magick::Pixel.from_hsla}.
|
1017
1085
|
*
|
1018
|
-
* @
|
1019
|
-
* @
|
1020
|
-
* @see Pixel_from_hsla
|
1086
|
+
* @return [Array<Float>] an array with hsla data
|
1087
|
+
* @see Pixel.from_hsla
|
1021
1088
|
*/
|
1022
1089
|
VALUE
|
1023
1090
|
Pixel_to_hsla(VALUE self)
|
@@ -1098,24 +1165,12 @@ rm_set_magick_pixel_packet(Pixel *pixel, MagickPixel *pp)
|
|
1098
1165
|
/**
|
1099
1166
|
* Return the color name corresponding to the pixel values.
|
1100
1167
|
*
|
1101
|
-
*
|
1102
|
-
*
|
1103
|
-
*
|
1104
|
-
*
|
1105
|
-
*
|
1106
|
-
*
|
1107
|
-
*
|
1108
|
-
* Notes:
|
1109
|
-
* - Default compliance is AllCompliance
|
1110
|
-
* - Default alpha is false
|
1111
|
-
* - Default depth is MAGICKCORE_QUANTUM_DEPTH
|
1112
|
-
* - Default hex is false
|
1113
|
-
* - The conversion respects the value of the 'opacity' field in the Pixel
|
1114
|
-
*
|
1115
|
-
* @param argc number of input arguments
|
1116
|
-
* @param argv array of input arguments
|
1117
|
-
* @param self this object
|
1118
|
-
* @return the color name as a String
|
1168
|
+
* @overload to_color(compliance = Magick::AllCompliance, alpha = false, depth = Magick::MAGICKCORE_QUANTUM_DEPTH, hex = false)
|
1169
|
+
* @param compliance [Magick::ComplianceType] A ComplianceType constant
|
1170
|
+
* @param alpha [Boolean] If false, the pixel's alpha attribute is ignored
|
1171
|
+
* @param depth [Numeric] An image depth
|
1172
|
+
* @param hex [Boolean] If true, represent the color name in hex format
|
1173
|
+
* @return [String] the color name as a String
|
1119
1174
|
*/
|
1120
1175
|
VALUE
|
1121
1176
|
Pixel_to_color(int argc, VALUE *argv, VALUE self)
|
@@ -1167,7 +1222,7 @@ Pixel_to_color(int argc, VALUE *argv, VALUE self)
|
|
1167
1222
|
|
1168
1223
|
info = CloneImageInfo(NULL);
|
1169
1224
|
image = rm_acquire_image(info);
|
1170
|
-
|
1225
|
+
DestroyImageInfo(info);
|
1171
1226
|
|
1172
1227
|
if (!image)
|
1173
1228
|
{
|
@@ -1177,7 +1232,12 @@ Pixel_to_color(int argc, VALUE *argv, VALUE self)
|
|
1177
1232
|
exception = AcquireExceptionInfo();
|
1178
1233
|
|
1179
1234
|
image->depth = depth;
|
1180
|
-
#if defined(
|
1235
|
+
#if defined(IMAGEMAGICK_7)
|
1236
|
+
if (alpha)
|
1237
|
+
{
|
1238
|
+
image->alpha_trait = BlendPixelTrait;
|
1239
|
+
}
|
1240
|
+
#else
|
1181
1241
|
image->matte = alpha;
|
1182
1242
|
#endif
|
1183
1243
|
|
@@ -1197,16 +1257,16 @@ Pixel_to_color(int argc, VALUE *argv, VALUE self)
|
|
1197
1257
|
#endif
|
1198
1258
|
mpp.depth = (unsigned long) min(1.0 * image->depth, 16.0);
|
1199
1259
|
}
|
1200
|
-
|
1260
|
+
GetColorTuple(&mpp, MagickTrue, name);
|
1201
1261
|
}
|
1202
1262
|
else
|
1203
1263
|
{
|
1204
|
-
|
1264
|
+
QueryColorname(image, &mpp, compliance, name, exception);
|
1205
1265
|
}
|
1206
1266
|
|
1207
|
-
|
1208
|
-
CHECK_EXCEPTION()
|
1209
|
-
|
1267
|
+
DestroyImage(image);
|
1268
|
+
CHECK_EXCEPTION();
|
1269
|
+
DestroyExceptionInfo(exception);
|
1210
1270
|
|
1211
1271
|
// Always return a string, even if it's ""
|
1212
1272
|
return rb_str_new2(name);
|
@@ -1214,13 +1274,9 @@ Pixel_to_color(int argc, VALUE *argv, VALUE self)
|
|
1214
1274
|
|
1215
1275
|
|
1216
1276
|
/**
|
1217
|
-
*
|
1218
|
-
*
|
1219
|
-
* Ruby usage:
|
1220
|
-
* - @verbatim Magick::Pixel#to_s @endverbatim
|
1277
|
+
* Return a string representation of a {Magick::Pixel} object.
|
1221
1278
|
*
|
1222
|
-
* @
|
1223
|
-
* @return the string
|
1279
|
+
* @return [String] the string
|
1224
1280
|
*/
|
1225
1281
|
VALUE
|
1226
1282
|
Pixel_to_s(VALUE self)
|
@@ -1229,7 +1285,7 @@ Pixel_to_s(VALUE self)
|
|
1229
1285
|
char buff[100];
|
1230
1286
|
|
1231
1287
|
Data_Get_Struct(self, Pixel, pixel);
|
1232
|
-
|
1288
|
+
snprintf(buff, sizeof(buff), "red=" QuantumFormat ", green=" QuantumFormat ", blue=" QuantumFormat ", alpha=" QuantumFormat,
|
1233
1289
|
pixel->red, pixel->green, pixel->blue,
|
1234
1290
|
#if defined(IMAGEMAGICK_7)
|
1235
1291
|
pixel->alpha);
|