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/lib/rmagick/version.rb
CHANGED
data/lib/rmagick_internal.rb
CHANGED
@@ -19,6 +19,7 @@ if RUBY_PLATFORM =~ /mingw/i
|
|
19
19
|
end
|
20
20
|
|
21
21
|
require 'English'
|
22
|
+
require 'observer'
|
22
23
|
require 'RMagick2.so'
|
23
24
|
|
24
25
|
module Magick
|
@@ -28,6 +29,29 @@ module Magick
|
|
28
29
|
IMAGEMAGICK_VERSION = Magick::Magick_version.split[1].split('-').first
|
29
30
|
|
30
31
|
class << self
|
32
|
+
# Describes the image formats supported by ImageMagick.
|
33
|
+
# If the optional block is present, calls the block once for each image format.
|
34
|
+
# The first argument, +k+, is the format name. The second argument, +v+, is the
|
35
|
+
# properties string described below.
|
36
|
+
#
|
37
|
+
# - +B+ is "*" if the format has native blob support, or " " otherwise.
|
38
|
+
# - +R+ is "r" if ImageMagick can read that format, or "-" otherwise.
|
39
|
+
# - +W+ is "w" if ImageMagick can write that format, or "-" otherwise.
|
40
|
+
# - +A+ is "+" if the format supports multi-image files, or "-" otherwise.
|
41
|
+
#
|
42
|
+
# @overload formats
|
43
|
+
# @return [Hash] the formats hash
|
44
|
+
#
|
45
|
+
# @overload formats
|
46
|
+
# @yield [k, v]
|
47
|
+
# @yieldparam k [String] the format name
|
48
|
+
# @yieldparam v [String] the properties string
|
49
|
+
# @return [Magick]
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
# p Magick.formats
|
53
|
+
# => {"3FR"=>" r-+", "3G2"=>" r-+", "3GP"=>" r-+", "A"=>"*rw+",
|
54
|
+
# ...
|
31
55
|
def formats
|
32
56
|
@formats ||= init_formats
|
33
57
|
|
@@ -39,7 +63,26 @@ module Magick
|
|
39
63
|
end
|
40
64
|
end
|
41
65
|
|
42
|
-
#
|
66
|
+
# If the Magick module attribute +trace_proc+ is set to a Proc object,
|
67
|
+
# RMagick calls the proc whenever an image is created or destroyed.
|
68
|
+
#
|
69
|
+
# You can use this proc to keep track of which images your program has created
|
70
|
+
# and which have been destroyed.
|
71
|
+
#
|
72
|
+
# @param p [Proc] The proc object.
|
73
|
+
# The following value will be passed into the proc object.
|
74
|
+
# - +which+ - A symbol that indicates which operation the proc is being called for.
|
75
|
+
# If the proc is called for an image creation, the value is +:c+.
|
76
|
+
# If called for an image destruction, the value is +:d+.
|
77
|
+
# - +description+ - A string describing the image. This is the same string that
|
78
|
+
# would be returned by calling the image's inspect method.
|
79
|
+
# - +id+ - A unique identifier for the image. This identifier is not the same as the object's +object_id+.
|
80
|
+
# - +method+ - The name of the method responsible for creating or destroying the image.
|
81
|
+
#
|
82
|
+
# @example
|
83
|
+
# Magick.trace_proc = proc do |which, description, id, method|
|
84
|
+
# ...
|
85
|
+
# end
|
43
86
|
def trace_proc=(p)
|
44
87
|
m = Mutex.new
|
45
88
|
m.synchronize do
|
@@ -67,12 +110,14 @@ module Magick
|
|
67
110
|
|
68
111
|
class Geometry
|
69
112
|
FLAGS = ['', '%', '!', '<', '>', '@', '^']
|
70
|
-
RFLAGS = {
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
113
|
+
RFLAGS = {
|
114
|
+
'%' => PercentGeometry,
|
115
|
+
'!' => AspectGeometry,
|
116
|
+
'<' => LessGeometry,
|
117
|
+
'>' => GreaterGeometry,
|
118
|
+
'@' => AreaGeometry,
|
119
|
+
'^' => MinimumGeometry
|
120
|
+
}
|
76
121
|
|
77
122
|
attr_accessor :width, :height, :x, :y, :flag
|
78
123
|
|
@@ -131,7 +176,7 @@ module Magick
|
|
131
176
|
str = ''
|
132
177
|
if @width > 0
|
133
178
|
fmt = @width.truncate == @width ? '%d' : '%.2f'
|
134
|
-
str <<
|
179
|
+
str << sprintf(fmt, @width)
|
135
180
|
str << '%' if @flag == PercentGeometry
|
136
181
|
end
|
137
182
|
|
@@ -139,10 +184,10 @@ module Magick
|
|
139
184
|
|
140
185
|
if @height > 0
|
141
186
|
fmt = @height.truncate == @height ? '%d' : '%.2f'
|
142
|
-
str <<
|
187
|
+
str << sprintf(fmt, @height)
|
143
188
|
str << '%' if @flag == PercentGeometry
|
144
189
|
end
|
145
|
-
str <<
|
190
|
+
str << sprintf('%+d%+d', @x, @y) if @x != 0 || @y != 0
|
146
191
|
str << FLAGS[@flag.to_i] if @flag != PercentGeometry
|
147
192
|
str
|
148
193
|
end
|
@@ -233,7 +278,7 @@ module Magick
|
|
233
278
|
# Apply coordinate transformations to support scaling (s), rotation (r),
|
234
279
|
# and translation (t). Angles are specified in radians.
|
235
280
|
def affine(sx, rx, ry, sy, tx, ty)
|
236
|
-
primitive 'affine ' +
|
281
|
+
primitive 'affine ' + sprintf('%g,%g,%g,%g,%g,%g', sx, rx, ry, sy, tx, ty)
|
237
282
|
end
|
238
283
|
|
239
284
|
# Set alpha (make transparent) in image according to the specified
|
@@ -241,13 +286,15 @@ module Magick
|
|
241
286
|
def alpha(x, y, method)
|
242
287
|
Kernel.raise ArgumentError, 'Unknown paint method' unless PAINT_METHOD_NAMES.key?(method.to_i)
|
243
288
|
name = Gem::Version.new(Magick::IMAGEMAGICK_VERSION) > Gem::Version.new('7.0.0') ? 'alpha ' : 'matte '
|
244
|
-
primitive name +
|
289
|
+
primitive name + sprintf('%g,%g, %s', x, y, PAINT_METHOD_NAMES[method.to_i])
|
245
290
|
end
|
246
291
|
|
247
292
|
# Draw an arc.
|
248
293
|
def arc(start_x, start_y, end_x, end_y, start_degrees, end_degrees)
|
249
|
-
primitive 'arc ' +
|
250
|
-
|
294
|
+
primitive 'arc ' + sprintf(
|
295
|
+
'%g,%g %g,%g %g,%g',
|
296
|
+
start_x, start_y, end_x, end_y, start_degrees, end_degrees
|
297
|
+
)
|
251
298
|
end
|
252
299
|
|
253
300
|
# Draw a bezier curve.
|
@@ -257,12 +304,12 @@ module Magick
|
|
257
304
|
elsif points.length.odd?
|
258
305
|
Kernel.raise ArgumentError, 'odd number of arguments specified'
|
259
306
|
end
|
260
|
-
primitive 'bezier ' + points.map! { |x|
|
307
|
+
primitive 'bezier ' + points.map! { |x| sprintf('%g', x) }.join(',')
|
261
308
|
end
|
262
309
|
|
263
310
|
# Draw a circle
|
264
311
|
def circle(origin_x, origin_y, perim_x, perim_y)
|
265
|
-
primitive 'circle ' +
|
312
|
+
primitive 'circle ' + sprintf('%g,%g %g,%g', origin_x, origin_y, perim_x, perim_y)
|
266
313
|
end
|
267
314
|
|
268
315
|
# Invoke a clip-path defined by def_clip_path.
|
@@ -286,7 +333,7 @@ module Magick
|
|
286
333
|
# point, replace, floodfill, filltoborder,reset
|
287
334
|
def color(x, y, method)
|
288
335
|
Kernel.raise ArgumentError, "Unknown PaintMethod: #{method}" unless PAINT_METHOD_NAMES.key?(method.to_i)
|
289
|
-
primitive 'color ' +
|
336
|
+
primitive 'color ' + sprintf('%g,%g,%s', x, y, PAINT_METHOD_NAMES[method.to_i])
|
290
337
|
end
|
291
338
|
|
292
339
|
# Specify EITHER the text decoration (none, underline, overline,
|
@@ -317,8 +364,10 @@ module Magick
|
|
317
364
|
|
318
365
|
# Draw an ellipse
|
319
366
|
def ellipse(origin_x, origin_y, width, height, arc_start, arc_end)
|
320
|
-
primitive 'ellipse ' +
|
321
|
-
|
367
|
+
primitive 'ellipse ' + sprintf(
|
368
|
+
'%g,%g %g,%g %g,%g',
|
369
|
+
origin_x, origin_y, width, height, arc_start, arc_end
|
370
|
+
)
|
322
371
|
end
|
323
372
|
|
324
373
|
# Let anything through, but the only defined argument
|
@@ -384,7 +433,7 @@ module Magick
|
|
384
433
|
def image(composite, x, y, width, height, image_file_path)
|
385
434
|
Kernel.raise ArgumentError, 'Unknown composite' unless composite.is_a?(CompositeOperator)
|
386
435
|
composite_name = composite.to_s.sub!('CompositeOp', '')
|
387
|
-
primitive 'image ' +
|
436
|
+
primitive 'image ' + sprintf('%s %g,%g %g,%g %s', composite_name, x, y, width, height, enquote(image_file_path))
|
388
437
|
end
|
389
438
|
|
390
439
|
# IM 6.5.5-8 and later
|
@@ -425,7 +474,7 @@ module Magick
|
|
425
474
|
|
426
475
|
# Draw a line
|
427
476
|
def line(start_x, start_y, end_x, end_y)
|
428
|
-
primitive 'line ' +
|
477
|
+
primitive 'line ' + sprintf('%g,%g %g,%g', start_x, start_y, end_x, end_y)
|
429
478
|
end
|
430
479
|
|
431
480
|
# Specify drawing fill and stroke opacities. If the value is a string
|
@@ -447,7 +496,7 @@ module Magick
|
|
447
496
|
# as the argument to the 'fill' or 'stroke' methods
|
448
497
|
def pattern(name, x, y, width, height)
|
449
498
|
push('defs')
|
450
|
-
push("pattern #{name} " +
|
499
|
+
push("pattern #{name} " + sprintf('%g %g %g %g', x, y, width, height))
|
451
500
|
push('graphic-context')
|
452
501
|
yield
|
453
502
|
ensure
|
@@ -458,13 +507,13 @@ module Magick
|
|
458
507
|
|
459
508
|
# Set point to fill color.
|
460
509
|
def point(x, y)
|
461
|
-
primitive 'point ' +
|
510
|
+
primitive 'point ' + sprintf('%g,%g', x, y)
|
462
511
|
end
|
463
512
|
|
464
513
|
# Specify the font size in points. Yes, the primitive is "font-size" but
|
465
514
|
# in other places this value is called the "pointsize". Give it both names.
|
466
515
|
def pointsize(points)
|
467
|
-
primitive 'font-size ' +
|
516
|
+
primitive 'font-size ' + sprintf('%g', points)
|
468
517
|
end
|
469
518
|
alias font_size pointsize
|
470
519
|
|
@@ -475,7 +524,7 @@ module Magick
|
|
475
524
|
elsif points.length.odd?
|
476
525
|
Kernel.raise ArgumentError, 'odd number of points specified'
|
477
526
|
end
|
478
|
-
primitive 'polygon ' + points.map! { |x|
|
527
|
+
primitive 'polygon ' + points.map! { |x| sprintf('%g', x) }.join(',')
|
479
528
|
end
|
480
529
|
|
481
530
|
# Draw a polyline
|
@@ -485,7 +534,7 @@ module Magick
|
|
485
534
|
elsif points.length.odd?
|
486
535
|
Kernel.raise ArgumentError, 'odd number of points specified'
|
487
536
|
end
|
488
|
-
primitive 'polyline ' + points.map! { |x|
|
537
|
+
primitive 'polyline ' + points.map! { |x| sprintf('%g', x) }.join(',')
|
489
538
|
end
|
490
539
|
|
491
540
|
# Return to the previously-saved set of whatever
|
@@ -519,32 +568,36 @@ module Magick
|
|
519
568
|
|
520
569
|
# Draw a rectangle
|
521
570
|
def rectangle(upper_left_x, upper_left_y, lower_right_x, lower_right_y)
|
522
|
-
primitive 'rectangle ' +
|
523
|
-
|
571
|
+
primitive 'rectangle ' + sprintf(
|
572
|
+
'%g,%g %g,%g',
|
573
|
+
upper_left_x, upper_left_y, lower_right_x, lower_right_y
|
574
|
+
)
|
524
575
|
end
|
525
576
|
|
526
577
|
# Specify coordinate space rotation. "angle" is measured in degrees
|
527
578
|
def rotate(angle)
|
528
|
-
primitive 'rotate ' +
|
579
|
+
primitive 'rotate ' + sprintf('%g', angle)
|
529
580
|
end
|
530
581
|
|
531
582
|
# Draw a rectangle with rounded corners
|
532
583
|
def roundrectangle(center_x, center_y, width, height, corner_width, corner_height)
|
533
|
-
primitive 'roundrectangle ' +
|
534
|
-
|
584
|
+
primitive 'roundrectangle ' + sprintf(
|
585
|
+
'%g,%g,%g,%g,%g,%g',
|
586
|
+
center_x, center_y, width, height, corner_width, corner_height
|
587
|
+
)
|
535
588
|
end
|
536
589
|
|
537
590
|
# Specify scaling to be applied to coordinate space on subsequent drawing commands.
|
538
591
|
def scale(x, y)
|
539
|
-
primitive 'scale ' +
|
592
|
+
primitive 'scale ' + sprintf('%g,%g', x, y)
|
540
593
|
end
|
541
594
|
|
542
595
|
def skewx(angle)
|
543
|
-
primitive 'skewX ' +
|
596
|
+
primitive 'skewX ' + sprintf('%g', angle)
|
544
597
|
end
|
545
598
|
|
546
599
|
def skewy(angle)
|
547
|
-
primitive 'skewY ' +
|
600
|
+
primitive 'skewY ' + sprintf('%g', angle)
|
548
601
|
end
|
549
602
|
|
550
603
|
# Specify the object stroke, a color name or pattern name.
|
@@ -574,7 +627,7 @@ module Magick
|
|
574
627
|
|
575
628
|
# Specify the initial offset in the dash pattern
|
576
629
|
def stroke_dashoffset(value = 0)
|
577
|
-
primitive 'stroke-dashoffset ' +
|
630
|
+
primitive 'stroke-dashoffset ' + sprintf('%g', value)
|
578
631
|
end
|
579
632
|
|
580
633
|
def stroke_linecap(value)
|
@@ -601,7 +654,7 @@ module Magick
|
|
601
654
|
|
602
655
|
# Specify stroke (outline) width in pixels.
|
603
656
|
def stroke_width(pixels)
|
604
|
-
primitive 'stroke-width ' +
|
657
|
+
primitive 'stroke-width ' + sprintf('%g', pixels)
|
605
658
|
end
|
606
659
|
|
607
660
|
# Draw text at position x,y. Add quotes to text that is not already quoted.
|
@@ -619,7 +672,7 @@ module Magick
|
|
619
672
|
# escape existing braces, surround with braces
|
620
673
|
text = '{' + text.gsub(/[}]/) { |b| '\\' + b } + '}'
|
621
674
|
end
|
622
|
-
primitive 'text ' +
|
675
|
+
primitive 'text ' + sprintf('%g,%g %s', x, y, text)
|
623
676
|
end
|
624
677
|
|
625
678
|
# Specify text alignment relative to a given point
|
@@ -648,7 +701,7 @@ module Magick
|
|
648
701
|
# Specify center of coordinate space to use for subsequent drawing
|
649
702
|
# commands.
|
650
703
|
def translate(x, y)
|
651
|
-
primitive 'translate ' +
|
704
|
+
primitive 'translate ' + sprintf('%g,%g', x, y)
|
652
705
|
end
|
653
706
|
end # class Magick::Draw
|
654
707
|
|
@@ -856,7 +909,7 @@ module Magick
|
|
856
909
|
else
|
857
910
|
get_exif_by_number # ensure properties is populated with exif data
|
858
911
|
tag.each do |num|
|
859
|
-
rval = self[
|
912
|
+
rval = self[sprintf('#%04X', num.to_i)]
|
860
913
|
hash[num] = rval == 'unknown' ? nil : rval
|
861
914
|
end
|
862
915
|
end
|
@@ -1064,7 +1117,7 @@ module Magick
|
|
1064
1117
|
|
1065
1118
|
# Define a getter and a setter for each channel.
|
1066
1119
|
%i[red green blue opacity].each do |c|
|
1067
|
-
module_eval <<-END_EVAL
|
1120
|
+
module_eval <<-END_EVAL, __FILE__, __LINE__ + 1
|
1068
1121
|
def #{c}
|
1069
1122
|
return collect { |p| p.#{c} }
|
1070
1123
|
end
|
@@ -1120,7 +1173,6 @@ module Magick
|
|
1120
1173
|
each { |x| @view[x] = rv.dup }
|
1121
1174
|
changed
|
1122
1175
|
notify_observers(self)
|
1123
|
-
nil
|
1124
1176
|
end
|
1125
1177
|
|
1126
1178
|
# A pixel has been modified. Tell the view.
|
@@ -1243,16 +1295,14 @@ module Magick
|
|
1243
1295
|
|
1244
1296
|
protected
|
1245
1297
|
|
1246
|
-
def
|
1298
|
+
def assert_image(obj)
|
1247
1299
|
Kernel.raise ArgumentError, "Magick::Image required (#{obj.class} given)" unless obj.is_a? Magick::Image
|
1248
|
-
true
|
1249
1300
|
end
|
1250
1301
|
|
1251
1302
|
# Ensure array is always an array of Magick::Image objects
|
1252
|
-
def
|
1303
|
+
def assert_image_array(ary)
|
1253
1304
|
Kernel.raise ArgumentError, "Magick::ImageList or array of Magick::Images required (#{ary.class} given)" unless ary.respond_to? :each
|
1254
|
-
ary.each { |obj|
|
1255
|
-
true
|
1305
|
+
ary.each { |obj| assert_image obj }
|
1256
1306
|
end
|
1257
1307
|
|
1258
1308
|
# Find old current image, update scene number
|
@@ -1284,7 +1334,7 @@ module Magick
|
|
1284
1334
|
if n.nil?
|
1285
1335
|
Kernel.raise IndexError, 'scene number out of bounds' unless @images.length.zero?
|
1286
1336
|
@scene = nil
|
1287
|
-
return
|
1337
|
+
return
|
1288
1338
|
elsif @images.length.zero?
|
1289
1339
|
Kernel.raise IndexError, 'scene number out of bounds'
|
1290
1340
|
end
|
@@ -1292,13 +1342,12 @@ module Magick
|
|
1292
1342
|
n = Integer(n)
|
1293
1343
|
Kernel.raise IndexError, 'scene number out of bounds' if n < 0 || n > length - 1
|
1294
1344
|
@scene = n
|
1295
|
-
@scene
|
1296
1345
|
end
|
1297
1346
|
|
1298
1347
|
# All the binary operators work the same way.
|
1299
1348
|
# 'other' should be either an ImageList or an Array
|
1300
1349
|
%w[& + - |].each do |op|
|
1301
|
-
module_eval <<-END_BINOPS
|
1350
|
+
module_eval <<-END_BINOPS, __FILE__, __LINE__ + 1
|
1302
1351
|
def #{op}(other)
|
1303
1352
|
ilist = self.class.new
|
1304
1353
|
begin
|
@@ -1308,7 +1357,7 @@ module Magick
|
|
1308
1357
|
end
|
1309
1358
|
current = get_current()
|
1310
1359
|
a.each do |image|
|
1311
|
-
|
1360
|
+
assert_image image
|
1312
1361
|
ilist << image
|
1313
1362
|
end
|
1314
1363
|
ilist.set_current current
|
@@ -1327,7 +1376,7 @@ module Magick
|
|
1327
1376
|
end
|
1328
1377
|
|
1329
1378
|
def <<(obj)
|
1330
|
-
|
1379
|
+
assert_image obj
|
1331
1380
|
@images << obj
|
1332
1381
|
@scene = @images.length - 1
|
1333
1382
|
self
|
@@ -1368,20 +1417,21 @@ module Magick
|
|
1368
1417
|
def []=(*args)
|
1369
1418
|
obj = @images.[]=(*args)
|
1370
1419
|
if obj && obj.respond_to?(:each)
|
1371
|
-
|
1420
|
+
assert_image_array(obj)
|
1372
1421
|
set_current obj.last.__id__
|
1373
1422
|
elsif obj
|
1374
|
-
|
1423
|
+
assert_image(obj)
|
1375
1424
|
set_current obj.__id__
|
1376
1425
|
else
|
1377
1426
|
set_current nil
|
1378
1427
|
end
|
1379
|
-
obj
|
1380
1428
|
end
|
1381
1429
|
|
1382
|
-
%i[
|
1383
|
-
|
1384
|
-
|
1430
|
+
%i[
|
1431
|
+
at each each_index empty? fetch
|
1432
|
+
first hash include? index length rindex sort!
|
1433
|
+
].each do |mth|
|
1434
|
+
module_eval <<-END_SIMPLE_DELEGATES, __FILE__, __LINE__ + 1
|
1385
1435
|
def #{mth}(*args, &block)
|
1386
1436
|
@images.#{mth}(*args, &block)
|
1387
1437
|
end
|
@@ -1403,7 +1453,7 @@ module Magick
|
|
1403
1453
|
# override Enumerable#collect
|
1404
1454
|
def collect(&block)
|
1405
1455
|
current = get_current
|
1406
|
-
a = @images.
|
1456
|
+
a = @images.map(&block)
|
1407
1457
|
ilist = self.class.new
|
1408
1458
|
a.each { |image| ilist << image }
|
1409
1459
|
ilist.set_current current
|
@@ -1411,8 +1461,8 @@ module Magick
|
|
1411
1461
|
end
|
1412
1462
|
|
1413
1463
|
def collect!(&block)
|
1414
|
-
@images.
|
1415
|
-
|
1464
|
+
@images.map!(&block)
|
1465
|
+
assert_image_array @images
|
1416
1466
|
self
|
1417
1467
|
end
|
1418
1468
|
|
@@ -1421,7 +1471,6 @@ module Magick
|
|
1421
1471
|
ditto = self.class.new
|
1422
1472
|
@images.each { |f| ditto << f.copy }
|
1423
1473
|
ditto.scene = @scene
|
1424
|
-
ditto.taint if tainted?
|
1425
1474
|
ditto
|
1426
1475
|
end
|
1427
1476
|
|
@@ -1432,6 +1481,7 @@ module Magick
|
|
1432
1481
|
end
|
1433
1482
|
|
1434
1483
|
# ImageList#map took over the "map" name. Use alternatives.
|
1484
|
+
alias map collect
|
1435
1485
|
alias __map__ collect
|
1436
1486
|
alias map! collect!
|
1437
1487
|
alias __map__! collect!
|
@@ -1456,7 +1506,7 @@ module Magick
|
|
1456
1506
|
end
|
1457
1507
|
|
1458
1508
|
def concat(other)
|
1459
|
-
|
1509
|
+
assert_image_array other
|
1460
1510
|
other.each { |image| @images << image }
|
1461
1511
|
@scene = length - 1
|
1462
1512
|
self
|
@@ -1470,7 +1520,7 @@ module Magick
|
|
1470
1520
|
end
|
1471
1521
|
|
1472
1522
|
def delete(obj, &block)
|
1473
|
-
|
1523
|
+
assert_image obj
|
1474
1524
|
current = get_current
|
1475
1525
|
a = @images.delete(obj, &block)
|
1476
1526
|
set_current current
|
@@ -1495,12 +1545,11 @@ module Magick
|
|
1495
1545
|
ditto = self.class.new
|
1496
1546
|
@images.each { |img| ditto << img }
|
1497
1547
|
ditto.scene = @scene
|
1498
|
-
ditto.taint if tainted?
|
1499
1548
|
ditto
|
1500
1549
|
end
|
1501
1550
|
|
1502
1551
|
def eql?(other)
|
1503
|
-
|
1552
|
+
assert_image_array other
|
1504
1553
|
eql = other.eql?(@images)
|
1505
1554
|
begin # "other" is another ImageList
|
1506
1555
|
eql &&= @scene == other.scene
|
@@ -1511,10 +1560,10 @@ module Magick
|
|
1511
1560
|
end
|
1512
1561
|
|
1513
1562
|
def fill(*args, &block)
|
1514
|
-
|
1563
|
+
assert_image args[0] unless block_given?
|
1515
1564
|
current = get_current
|
1516
1565
|
@images.fill(*args, &block)
|
1517
|
-
|
1566
|
+
assert_image_array self
|
1518
1567
|
set_current current
|
1519
1568
|
self
|
1520
1569
|
end
|
@@ -1522,7 +1571,7 @@ module Magick
|
|
1522
1571
|
# Override Enumerable's find_all
|
1523
1572
|
def find_all(&block)
|
1524
1573
|
current = get_current
|
1525
|
-
a = @images.
|
1574
|
+
a = @images.select(&block)
|
1526
1575
|
ilist = self.class.new
|
1527
1576
|
a.each { |image| ilist << image }
|
1528
1577
|
ilist.set_current current
|
@@ -1546,14 +1595,12 @@ module Magick
|
|
1546
1595
|
filenames.each do |f|
|
1547
1596
|
Magick::Image.read(f, &block).each { |n| @images << n }
|
1548
1597
|
end
|
1549
|
-
|
1550
|
-
|
1551
|
-
end
|
1552
|
-
self
|
1598
|
+
|
1599
|
+
@scene = length - 1 if length > 0 # last image in array
|
1553
1600
|
end
|
1554
1601
|
|
1555
1602
|
def insert(index, *args)
|
1556
|
-
args.each { |image|
|
1603
|
+
args.each { |image| assert_image image }
|
1557
1604
|
current = get_current
|
1558
1605
|
@images.insert(index, *args)
|
1559
1606
|
set_current current
|
@@ -1572,7 +1619,6 @@ module Magick
|
|
1572
1619
|
n = Integer(n)
|
1573
1620
|
Kernel.raise ArgumentError, 'iterations must be between 0 and 65535' if n < 0 || n > 65_535
|
1574
1621
|
@images.each { |f| f.iterations = n }
|
1575
|
-
self
|
1576
1622
|
end
|
1577
1623
|
|
1578
1624
|
def last(*args)
|
@@ -1653,7 +1699,7 @@ module Magick
|
|
1653
1699
|
|
1654
1700
|
def push(*objs)
|
1655
1701
|
objs.each do |image|
|
1656
|
-
|
1702
|
+
assert_image image
|
1657
1703
|
@images << image
|
1658
1704
|
end
|
1659
1705
|
@scene = length - 1
|
@@ -1689,7 +1735,7 @@ module Magick
|
|
1689
1735
|
end
|
1690
1736
|
|
1691
1737
|
def replace(other)
|
1692
|
-
|
1738
|
+
assert_image_array other
|
1693
1739
|
current = get_current
|
1694
1740
|
@images.clear
|
1695
1741
|
other.each { |image| @images << image }
|
@@ -1787,7 +1833,7 @@ module Magick
|
|
1787
1833
|
|
1788
1834
|
# @scene -> new object
|
1789
1835
|
def unshift(obj)
|
1790
|
-
|
1836
|
+
assert_image obj
|
1791
1837
|
@images.unshift(obj)
|
1792
1838
|
@scene = 0
|
1793
1839
|
self
|
@@ -1804,6 +1850,11 @@ module Magick
|
|
1804
1850
|
alias indices values_at
|
1805
1851
|
end # Magick::ImageList
|
1806
1852
|
|
1853
|
+
class Pixel
|
1854
|
+
# include Observable for Image::View class
|
1855
|
+
include Observable
|
1856
|
+
end
|
1857
|
+
|
1807
1858
|
# Collects non-specific optional method arguments
|
1808
1859
|
class OptionalMethodArguments
|
1809
1860
|
def initialize(img)
|