rmagick 3.2.0 → 4.3.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/.devcontainer/Dockerfile +14 -0
- data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
- data/.devcontainer/devcontainer.json +11 -0
- data/.devcontainer/setup-repo.sh +10 -0
- data/.devcontainer/setup-user.sh +45 -0
- data/.editorconfig +3 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/workflows/ci.yml +79 -0
- data/.gitignore +3 -1
- data/.rspec +1 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +151 -297
- data/.yardopts +5 -0
- data/CHANGELOG.md +233 -0
- data/CODE_OF_CONDUCT.md +122 -7
- data/CONTRIBUTING.md +14 -10
- data/README.md +326 -0
- data/Rakefile +16 -22
- data/before_install_linux.sh +22 -28
- data/before_install_osx.sh +57 -2
- data/ext/RMagick/extconf.rb +149 -105
- data/ext/RMagick/rmagick.c +77 -104
- data/ext/RMagick/rmagick.h +121 -103
- data/ext/RMagick/rmdraw.c +364 -436
- data/ext/RMagick/rmenum.c +106 -114
- data/ext/RMagick/rmfill.c +149 -70
- data/ext/RMagick/rmilist.c +225 -367
- data/ext/RMagick/rmimage.c +4751 -4405
- data/ext/RMagick/rminfo.c +574 -787
- data/ext/RMagick/rmkinfo.c +51 -121
- data/ext/RMagick/rmmain.c +454 -286
- data/ext/RMagick/rmmontage.c +64 -130
- data/ext/RMagick/rmpixel.c +488 -437
- data/ext/RMagick/rmstruct.c +83 -96
- data/ext/RMagick/rmutil.c +302 -214
- data/lib/rmagick/version.rb +1 -1
- data/lib/rmagick_internal.rb +138 -93
- 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 +12 -8
- 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 +10 -11
- metadata +52 -423
- data/.appveyor.yml +0 -45
- data/.circleci/config.yml +0 -56
- data/.ruby-version +0 -1
- data/.simplecov +0 -27
- data/.travis.yml +0 -62
- 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 -42
- 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/lib/obsolete.rb +0 -66
- 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/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 -10
- 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 -627
- data/test/Image2.rb +0 -1426
- data/test/Image3.rb +0 -1091
- data/test/ImageList1.rb +0 -858
- data/test/ImageList2.rb +0 -406
- data/test/Image_attributes.rb +0 -666
- data/test/Import_Export.rb +0 -115
- data/test/Info.rb +0 -444
- data/test/KernelInfo.rb +0 -67
- data/test/Magick.rb +0 -311
- data/test/Pixel.rb +0 -285
- 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/Obsolete.rb +0 -30
- data/test/lib/internal/Draw.rb +0 -823
- 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/rmfill.c
CHANGED
@@ -44,10 +44,7 @@ static void free_Fill(void *fill)
|
|
44
44
|
/**
|
45
45
|
* Create new GradientFill object.
|
46
46
|
*
|
47
|
-
*
|
48
|
-
*
|
49
|
-
* @param class the Ruby class to use
|
50
|
-
* @return a new GradientFill object
|
47
|
+
* @return [Magick::GradientFill] a new GradientFill object
|
51
48
|
*/
|
52
49
|
VALUE
|
53
50
|
GradientFill_alloc(VALUE class)
|
@@ -59,19 +56,15 @@ GradientFill_alloc(VALUE class)
|
|
59
56
|
|
60
57
|
|
61
58
|
/**
|
62
|
-
*
|
63
|
-
*
|
64
|
-
*
|
65
|
-
*
|
66
|
-
*
|
67
|
-
* @param
|
68
|
-
* @param
|
69
|
-
* @param
|
70
|
-
* @
|
71
|
-
* @param y2 y position of second point
|
72
|
-
* @param start_color the start color
|
73
|
-
* @param stop_color the stop color
|
74
|
-
* @return self
|
59
|
+
* Initialize GradientFill object.
|
60
|
+
*
|
61
|
+
* @param x1 [Float] x position of first point
|
62
|
+
* @param y1 [Float] y position of first point
|
63
|
+
* @param x2 [Float] x position of second point
|
64
|
+
* @param y2 [Float] y position of second point
|
65
|
+
* @param start_color [Magick::Pixel, String] the start color
|
66
|
+
* @param stop_color [Magick::Pixel, String] the stop color
|
67
|
+
* @return [Magick::GradientFill] self
|
75
68
|
*/
|
76
69
|
VALUE
|
77
70
|
GradientFill_initialize(
|
@@ -132,25 +125,39 @@ point_fill(
|
|
132
125
|
|
133
126
|
for (y = 0; y < (ssize_t) image->rows; y++)
|
134
127
|
{
|
128
|
+
#if defined(IMAGEMAGICK_7)
|
129
|
+
Quantum *row_pixels;
|
130
|
+
#else
|
135
131
|
PixelPacket *row_pixels;
|
132
|
+
#endif
|
136
133
|
|
137
134
|
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
138
|
-
CHECK_EXCEPTION()
|
135
|
+
CHECK_EXCEPTION();
|
139
136
|
|
140
137
|
for (x = 0; x < (ssize_t) image->columns; x++)
|
141
138
|
{
|
142
139
|
distance = sqrt((double)((x-x0)*(x-x0)+(y-y0)*(y-y0)));
|
140
|
+
|
141
|
+
#if defined(IMAGEMAGICK_7)
|
142
|
+
SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
|
143
|
+
SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
|
144
|
+
SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
|
145
|
+
SetPixelAlpha(image, OpaqueAlpha, row_pixels);
|
146
|
+
|
147
|
+
row_pixels += GetPixelChannels(image);
|
148
|
+
#else
|
143
149
|
row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
|
144
150
|
row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
|
145
151
|
row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
|
146
152
|
row_pixels[x].opacity = OpaqueOpacity;
|
153
|
+
#endif
|
147
154
|
}
|
148
155
|
|
149
156
|
SyncAuthenticPixels(image, exception);
|
150
|
-
CHECK_EXCEPTION()
|
157
|
+
CHECK_EXCEPTION();
|
151
158
|
}
|
152
159
|
|
153
|
-
|
160
|
+
DestroyExceptionInfo(exception);
|
154
161
|
}
|
155
162
|
|
156
163
|
/**
|
@@ -173,9 +180,11 @@ vertical_fill(
|
|
173
180
|
{
|
174
181
|
double steps;
|
175
182
|
ssize_t x, y;
|
176
|
-
PixelPacket *master;
|
177
183
|
MagickRealType red_step, green_step, blue_step;
|
178
184
|
ExceptionInfo *exception;
|
185
|
+
#if defined(IMAGEMAGICK_6)
|
186
|
+
PixelPacket *master;
|
187
|
+
#endif
|
179
188
|
|
180
189
|
exception = AcquireExceptionInfo();
|
181
190
|
|
@@ -193,6 +202,32 @@ vertical_fill(
|
|
193
202
|
green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
|
194
203
|
blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
|
195
204
|
|
205
|
+
|
206
|
+
#if defined(IMAGEMAGICK_7)
|
207
|
+
for (y = 0; y < (ssize_t) image->rows; y++)
|
208
|
+
{
|
209
|
+
Quantum *row_pixels;
|
210
|
+
|
211
|
+
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
212
|
+
CHECK_EXCEPTION();
|
213
|
+
|
214
|
+
for (x = 0; x < (ssize_t) image->columns; x++)
|
215
|
+
{
|
216
|
+
double distance = fabs(x1 - x);
|
217
|
+
SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
|
218
|
+
SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
|
219
|
+
SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
|
220
|
+
SetPixelAlpha(image, OpaqueAlpha, row_pixels);
|
221
|
+
|
222
|
+
row_pixels += GetPixelChannels(image);
|
223
|
+
}
|
224
|
+
|
225
|
+
SyncAuthenticPixels(image, exception);
|
226
|
+
CHECK_EXCEPTION();
|
227
|
+
}
|
228
|
+
|
229
|
+
DestroyExceptionInfo(exception);
|
230
|
+
#else
|
196
231
|
// All the rows are the same. Make a "master row" and simply copy
|
197
232
|
// it to each actual row.
|
198
233
|
master = ALLOC_N(PixelPacket, image->columns);
|
@@ -228,9 +263,10 @@ vertical_fill(
|
|
228
263
|
}
|
229
264
|
}
|
230
265
|
|
231
|
-
|
266
|
+
DestroyExceptionInfo(exception);
|
232
267
|
|
233
268
|
xfree((void *) master);
|
269
|
+
#endif
|
234
270
|
}
|
235
271
|
|
236
272
|
/**
|
@@ -252,9 +288,11 @@ horizontal_fill(
|
|
252
288
|
{
|
253
289
|
double steps;
|
254
290
|
ssize_t x, y;
|
255
|
-
PixelPacket *master;
|
256
291
|
MagickRealType red_step, green_step, blue_step;
|
257
292
|
ExceptionInfo *exception;
|
293
|
+
#if defined(IMAGEMAGICK_6)
|
294
|
+
PixelPacket *master;
|
295
|
+
#endif
|
258
296
|
|
259
297
|
exception = AcquireExceptionInfo();
|
260
298
|
|
@@ -271,6 +309,31 @@ horizontal_fill(
|
|
271
309
|
green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
|
272
310
|
blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
|
273
311
|
|
312
|
+
#if defined(IMAGEMAGICK_7)
|
313
|
+
for (y = 0; y < (ssize_t) image->rows; y++)
|
314
|
+
{
|
315
|
+
Quantum *row_pixels;
|
316
|
+
|
317
|
+
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
318
|
+
CHECK_EXCEPTION();
|
319
|
+
|
320
|
+
double distance = fabs(y1 - y);
|
321
|
+
for (x = 0; x < (ssize_t) image->columns; x++)
|
322
|
+
{
|
323
|
+
SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
|
324
|
+
SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
|
325
|
+
SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
|
326
|
+
SetPixelAlpha(image, OpaqueAlpha, row_pixels);
|
327
|
+
|
328
|
+
row_pixels += GetPixelChannels(image);
|
329
|
+
}
|
330
|
+
|
331
|
+
SyncAuthenticPixels(image, exception);
|
332
|
+
CHECK_EXCEPTION();
|
333
|
+
}
|
334
|
+
|
335
|
+
DestroyExceptionInfo(exception);
|
336
|
+
#else
|
274
337
|
// All the columns are the same, so make a master column and copy it to
|
275
338
|
// each of the "real" columns.
|
276
339
|
master = ALLOC_N(PixelPacket, image->rows);
|
@@ -305,9 +368,10 @@ horizontal_fill(
|
|
305
368
|
}
|
306
369
|
}
|
307
370
|
|
308
|
-
|
371
|
+
DestroyExceptionInfo(exception);
|
309
372
|
|
310
373
|
xfree((void *) master);
|
374
|
+
#endif
|
311
375
|
}
|
312
376
|
|
313
377
|
/**
|
@@ -354,7 +418,7 @@ v_diagonal_fill(
|
|
354
418
|
|
355
419
|
if (d1 < 0 && d2 < 0)
|
356
420
|
{
|
357
|
-
steps += FMAX(fabs(d1),fabs(d2));
|
421
|
+
steps += FMAX(fabs(d1), fabs(d2));
|
358
422
|
}
|
359
423
|
else if (d1 > (double)image->rows && d2 > (double)image->rows)
|
360
424
|
{
|
@@ -380,25 +444,38 @@ v_diagonal_fill(
|
|
380
444
|
|
381
445
|
for (y = 0; y < (ssize_t) image->rows; y++)
|
382
446
|
{
|
447
|
+
#if defined(IMAGEMAGICK_7)
|
448
|
+
Quantum *row_pixels;
|
449
|
+
#else
|
383
450
|
PixelPacket *row_pixels;
|
451
|
+
#endif
|
384
452
|
|
385
453
|
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
386
|
-
CHECK_EXCEPTION()
|
454
|
+
CHECK_EXCEPTION();
|
387
455
|
|
388
456
|
for (x = 0; x < (ssize_t) image->columns; x++)
|
389
457
|
{
|
390
458
|
double distance = (double) abs((int)(y-(m * x + b)));
|
459
|
+
#if defined(IMAGEMAGICK_7)
|
460
|
+
SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
|
461
|
+
SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
|
462
|
+
SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
|
463
|
+
SetPixelAlpha(image, OpaqueAlpha, row_pixels);
|
464
|
+
|
465
|
+
row_pixels += GetPixelChannels(image);
|
466
|
+
#else
|
391
467
|
row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
|
392
468
|
row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
|
393
469
|
row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
|
394
470
|
row_pixels[x].opacity = OpaqueOpacity;
|
471
|
+
#endif
|
395
472
|
}
|
396
473
|
|
397
474
|
SyncAuthenticPixels(image, exception);
|
398
|
-
CHECK_EXCEPTION()
|
475
|
+
CHECK_EXCEPTION();
|
399
476
|
}
|
400
477
|
|
401
|
-
|
478
|
+
DestroyExceptionInfo(exception);
|
402
479
|
}
|
403
480
|
|
404
481
|
/**
|
@@ -447,11 +524,11 @@ h_diagonal_fill(
|
|
447
524
|
// the number of steps.
|
448
525
|
if (d1 < 0 && d2 < 0)
|
449
526
|
{
|
450
|
-
steps += FMAX(fabs(d1),fabs(d2));
|
527
|
+
steps += FMAX(fabs(d1), fabs(d2));
|
451
528
|
}
|
452
529
|
else if (d1 > (double)image->columns && d2 > (double)image->columns)
|
453
530
|
{
|
454
|
-
steps += FMAX(abs((int)(image->columns-d1)),abs((int)(image->columns-d2)));
|
531
|
+
steps += FMAX(abs((int)(image->columns-d1)), abs((int)(image->columns-d2)));
|
455
532
|
}
|
456
533
|
|
457
534
|
d1 = FMAX(d1, image->columns-d1);
|
@@ -473,37 +550,46 @@ h_diagonal_fill(
|
|
473
550
|
|
474
551
|
for (y = 0; y < (ssize_t) image->rows; y++)
|
475
552
|
{
|
553
|
+
#if defined(IMAGEMAGICK_7)
|
554
|
+
Quantum *row_pixels;
|
555
|
+
#else
|
476
556
|
PixelPacket *row_pixels;
|
557
|
+
#endif
|
477
558
|
|
478
559
|
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
479
|
-
CHECK_EXCEPTION()
|
560
|
+
CHECK_EXCEPTION();
|
480
561
|
|
481
562
|
for (x = 0; x < (ssize_t) image->columns; x++)
|
482
563
|
{
|
483
564
|
double distance = (double) abs((int)(x-((y-b)/m)));
|
565
|
+
#if defined(IMAGEMAGICK_7)
|
566
|
+
SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
|
567
|
+
SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
|
568
|
+
SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
|
569
|
+
SetPixelAlpha(image, OpaqueAlpha, row_pixels);
|
570
|
+
|
571
|
+
row_pixels += GetPixelChannels(image);
|
572
|
+
#else
|
484
573
|
row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
|
485
574
|
row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
|
486
575
|
row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
|
487
576
|
row_pixels[x].opacity = OpaqueOpacity;
|
577
|
+
#endif
|
488
578
|
}
|
489
579
|
|
490
580
|
SyncAuthenticPixels(image, exception);
|
491
|
-
CHECK_EXCEPTION()
|
581
|
+
CHECK_EXCEPTION();
|
492
582
|
}
|
493
583
|
|
494
|
-
|
584
|
+
DestroyExceptionInfo(exception);
|
495
585
|
}
|
496
586
|
|
497
587
|
/**
|
498
588
|
* Call GradientFill with the start and stop colors specified when this fill
|
499
589
|
* object was created.
|
500
590
|
*
|
501
|
-
*
|
502
|
-
*
|
503
|
-
*
|
504
|
-
* @param self this object
|
505
|
-
* @param image_obj the image
|
506
|
-
* @return self
|
591
|
+
* @param image_obj [Magick::Image] the image to fill
|
592
|
+
* @return [Magick::GradientFill] self
|
507
593
|
*/
|
508
594
|
VALUE
|
509
595
|
GradientFill_fill(VALUE self, VALUE image_obj)
|
@@ -581,44 +667,31 @@ free_TextureFill(void *fill_obj)
|
|
581
667
|
rm_TextureFill *fill = (rm_TextureFill *)fill_obj;
|
582
668
|
|
583
669
|
// Do not trace destruction
|
584
|
-
|
670
|
+
if (fill->texture)
|
671
|
+
{
|
672
|
+
DestroyImage(fill->texture);
|
673
|
+
}
|
585
674
|
xfree(fill);
|
586
675
|
}
|
587
676
|
|
588
677
|
/**
|
589
678
|
* Create new TextureFill object.
|
590
679
|
*
|
591
|
-
*
|
592
|
-
*
|
593
|
-
* Notes:
|
594
|
-
* - The texture is an Image or Image *object
|
595
|
-
*
|
596
|
-
* @param class the Ruby class to use
|
597
|
-
* @return a new TextureFill object
|
680
|
+
* @return [Magick::TextureFill] a new TextureFill object
|
598
681
|
*/
|
599
682
|
VALUE
|
600
683
|
TextureFill_alloc(VALUE class)
|
601
684
|
{
|
602
685
|
rm_TextureFill *fill;
|
603
|
-
return Data_Make_Struct(class
|
604
|
-
, rm_TextureFill
|
605
|
-
, NULL
|
606
|
-
, free_TextureFill
|
607
|
-
, fill);
|
686
|
+
return Data_Make_Struct(class, rm_TextureFill, NULL, free_TextureFill, fill);
|
608
687
|
}
|
609
688
|
|
610
689
|
/**
|
611
|
-
*
|
690
|
+
* Initialize TextureFill object.
|
612
691
|
*
|
613
|
-
*
|
614
|
-
*
|
615
|
-
*
|
616
|
-
* Notes:
|
617
|
-
* - The texture is an Image or Image *object
|
618
|
-
*
|
619
|
-
* @param self this object
|
620
|
-
* @param texture_arg the texture
|
621
|
-
* @return self
|
692
|
+
* @param texture_arg [Magick::Image, Magick::ImageList] Either an imagelist or an image. If an
|
693
|
+
* imagelist, uses the current image.
|
694
|
+
* @return [Magick::TextureFill] self
|
622
695
|
*/
|
623
696
|
VALUE
|
624
697
|
TextureFill_initialize(VALUE self, VALUE texture_arg)
|
@@ -633,7 +706,7 @@ TextureFill_initialize(VALUE self, VALUE texture_arg)
|
|
633
706
|
|
634
707
|
// Bump the reference count on the texture image.
|
635
708
|
texture = rm_check_destroyed(texture_image);
|
636
|
-
|
709
|
+
ReferenceImage(texture);
|
637
710
|
|
638
711
|
fill->texture = texture;
|
639
712
|
|
@@ -646,24 +719,30 @@ TextureFill_initialize(VALUE self, VALUE texture_arg)
|
|
646
719
|
* Call TextureFill with the texture specified when this fill object was
|
647
720
|
* created.
|
648
721
|
*
|
649
|
-
*
|
650
|
-
*
|
651
|
-
*
|
652
|
-
* @param self this object
|
653
|
-
* @param image_obj the image
|
654
|
-
* @return self
|
722
|
+
* @param image_obj [Magick::Image] the image to fill
|
723
|
+
* @return [Magick::TextureFill] self
|
655
724
|
*/
|
656
725
|
VALUE
|
657
726
|
TextureFill_fill(VALUE self, VALUE image_obj)
|
658
727
|
{
|
659
728
|
rm_TextureFill *fill;
|
660
729
|
Image *image;
|
730
|
+
#if defined(IMAGEMAGICK_7)
|
731
|
+
ExceptionInfo *exception;
|
732
|
+
#endif
|
661
733
|
|
662
734
|
image = rm_check_destroyed(image_obj);
|
663
735
|
Data_Get_Struct(self, rm_TextureFill, fill);
|
664
736
|
|
665
|
-
|
737
|
+
#if defined(IMAGEMAGICK_7)
|
738
|
+
exception = AcquireExceptionInfo();
|
739
|
+
TextureImage(image, fill->texture, exception);
|
740
|
+
CHECK_EXCEPTION();
|
741
|
+
DestroyExceptionInfo(exception);
|
742
|
+
#else
|
743
|
+
TextureImage(image, fill->texture);
|
666
744
|
rm_check_image_exception(image, RetainOnError);
|
745
|
+
#endif
|
667
746
|
|
668
747
|
return self;
|
669
748
|
}
|