rmagick 2.13.2 → 4.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rmagick might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.codeclimate.yml +63 -0
- data/.editorconfig +17 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/workflows/ci.yml +107 -0
- data/.gitignore +25 -0
- data/.rspec +2 -0
- data/.rubocop.yml +37 -0
- data/.rubocop_todo.yml +449 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +1277 -0
- data/CODE_OF_CONDUCT.md +128 -0
- data/CONTRIBUTING.md +81 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +324 -0
- data/Rakefile +190 -0
- data/before_install_linux.sh +69 -0
- data/before_install_osx.sh +57 -0
- data/deprecated/RMagick.rb +6 -0
- data/ext/RMagick/extconf.rb +334 -333
- data/ext/RMagick/rmagick.c +129 -127
- data/ext/RMagick/rmagick.h +221 -320
- data/ext/RMagick/rmdraw.c +458 -767
- data/ext/RMagick/rmenum.c +305 -752
- data/ext/RMagick/rmfill.c +231 -199
- data/ext/RMagick/rmilist.c +437 -478
- data/ext/RMagick/rmimage.c +6130 -5342
- data/ext/RMagick/rminfo.c +695 -833
- data/ext/RMagick/rmkinfo.c +198 -0
- data/ext/RMagick/rmmain.c +752 -506
- data/ext/RMagick/rmmontage.c +94 -152
- data/ext/RMagick/rmpixel.c +619 -425
- data/ext/RMagick/rmstruct.c +206 -309
- data/ext/RMagick/rmutil.c +514 -344
- data/lib/rmagick/version.rb +5 -0
- data/lib/rmagick.rb +1 -0
- data/lib/rmagick_internal.rb +1922 -0
- data/lib/rvg/clippath.rb +35 -39
- data/lib/rvg/container.rb +123 -124
- data/lib/rvg/deep_equal.rb +45 -49
- data/lib/rvg/describable.rb +41 -47
- data/lib/rvg/embellishable.rb +380 -411
- data/lib/rvg/misc.rb +691 -711
- data/lib/rvg/paint.rb +43 -47
- data/lib/rvg/pathdata.rb +119 -125
- data/lib/rvg/rvg.rb +214 -213
- data/lib/rvg/stretchable.rb +153 -162
- data/lib/rvg/stylable.rb +111 -117
- data/lib/rvg/text.rb +169 -180
- data/lib/rvg/transformable.rb +121 -127
- data/lib/rvg/units.rb +58 -61
- data/rmagick.gemspec +36 -16
- metadata +188 -365
- data/ChangeLog +0 -773
- data/Doxyfile +0 -1514
- data/README-Mac-OSX.txt +0 -1
- data/README.html +0 -10
- data/build_tarball.rake +0 -215
- 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 -3269
- data/doc/ex/InitialCoords.rb +0 -23
- data/doc/ex/NewCoordSys.rb +0 -32
- data/doc/ex/OrigCoordSys.rb +0 -18
- data/doc/ex/PreserveAspectRatio.rb +0 -205
- data/doc/ex/RotateScale.rb +0 -37
- data/doc/ex/Skew.rb +0 -38
- data/doc/ex/Use01.rb +0 -16
- data/doc/ex/Use02.rb +0 -21
- data/doc/ex/Use03.rb +0 -16
- data/doc/ex/ViewBox.rb +0 -33
- data/doc/ex/adaptive_threshold.rb +0 -10
- data/doc/ex/add_noise.rb +0 -17
- 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 -33
- data/doc/ex/arcs01.rb +0 -28
- data/doc/ex/arcs02.rb +0 -61
- data/doc/ex/average.rb +0 -15
- data/doc/ex/axes.rb +0 -64
- data/doc/ex/baseline_shift01.rb +0 -18
- data/doc/ex/bilevel_channel.rb +0 -9
- data/doc/ex/blur_image.rb +0 -12
- data/doc/ex/border.rb +0 -10
- data/doc/ex/bounding_box.rb +0 -44
- data/doc/ex/cbezier1.rb +0 -42
- data/doc/ex/cbezier2.rb +0 -42
- data/doc/ex/cbezier3.rb +0 -42
- data/doc/ex/cbezier4.rb +0 -43
- data/doc/ex/cbezier5.rb +0 -43
- data/doc/ex/cbezier6.rb +0 -53
- data/doc/ex/channel.rb +0 -26
- 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 -17
- data/doc/ex/clip_path.rb +0 -60
- data/doc/ex/coalesce.rb +0 -60
- 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 -48
- 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 -23
- data/doc/ex/composite.rb +0 -135
- data/doc/ex/composite_layers.rb +0 -53
- data/doc/ex/composite_tiled.rb +0 -23
- data/doc/ex/contrast.rb +0 -36
- data/doc/ex/crop.rb +0 -31
- data/doc/ex/crop_with_gravity.rb +0 -46
- data/doc/ex/cubic01.rb +0 -45
- data/doc/ex/cubic02.rb +0 -94
- data/doc/ex/cycle_colormap.rb +0 -21
- data/doc/ex/dissolve.rb +0 -13
- data/doc/ex/drawcomp.rb +0 -42
- 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 -22
- 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 -43
- data/doc/ex/fill_pattern.rb +0 -26
- 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 -34
- data/doc/ex/fonts.rb +0 -20
- data/doc/ex/frame.rb +0 -12
- data/doc/ex/gaussian_blur.rb +0 -11
- data/doc/ex/get_multiline_type_metrics.rb +0 -42
- data/doc/ex/get_pixels.rb +0 -48
- data/doc/ex/get_type_metrics.rb +0 -146
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -46
- data/doc/ex/gravity.rb +0 -79
- data/doc/ex/group.rb +0 -26
- data/doc/ex/hatchfill.rb +0 -27
- data/doc/ex/image.rb +0 -46
- 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.wmf +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.wmf +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.wmf +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/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 -42
- data/doc/ex/line01.rb +0 -23
- data/doc/ex/mask.rb +0 -36
- data/doc/ex/matte_fill_to_border.rb +0 -40
- data/doc/ex/matte_floodfill.rb +0 -33
- data/doc/ex/matte_replace.rb +0 -40
- 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 -26
- data/doc/ex/mosaic.rb +0 -35
- 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 -43
- 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 -64
- data/doc/ex/pattern1.rb +0 -25
- data/doc/ex/pattern2.rb +0 -26
- data/doc/ex/polaroid.rb +0 -28
- data/doc/ex/polygon.rb +0 -24
- data/doc/ex/polygon01.rb +0 -23
- data/doc/ex/polyline.rb +0 -23
- data/doc/ex/polyline01.rb +0 -23
- data/doc/ex/posterize.rb +0 -8
- data/doc/ex/preview.rb +0 -9
- data/doc/ex/qbezierpath.rb +0 -52
- data/doc/ex/quad01.rb +0 -36
- 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 -15
- data/doc/ex/rect02.rb +0 -22
- data/doc/ex/rectangle.rb +0 -35
- data/doc/ex/reduce_noise.rb +0 -28
- data/doc/ex/remap.rb +0 -12
- data/doc/ex/remap_images.rb +0 -21
- data/doc/ex/resize_to_fill.rb +0 -10
- data/doc/ex/resize_to_fit.rb +0 -10
- data/doc/ex/roll.rb +0 -9
- data/doc/ex/rotate.rb +0 -45
- data/doc/ex/rotate_f.rb +0 -14
- data/doc/ex/roundrect.rb +0 -34
- data/doc/ex/rubyname.rb +0 -30
- data/doc/ex/rvg_clippath.rb +0 -14
- data/doc/ex/rvg_linecap.rb +0 -43
- data/doc/ex/rvg_linejoin.rb +0 -41
- data/doc/ex/rvg_opacity.rb +0 -19
- data/doc/ex/rvg_pattern.rb +0 -26
- data/doc/ex/rvg_stroke_dasharray.rb +0 -12
- data/doc/ex/segment.rb +0 -11
- data/doc/ex/sepiatone.rb +0 -8
- data/doc/ex/shade.rb +0 -11
- data/doc/ex/shadow.rb +0 -31
- data/doc/ex/shave.rb +0 -15
- data/doc/ex/shear.rb +0 -10
- data/doc/ex/sketch.rb +0 -18
- data/doc/ex/skewx.rb +0 -52
- data/doc/ex/skewy.rb +0 -47
- data/doc/ex/smile.rb +0 -125
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -55
- data/doc/ex/splice.rb +0 -9
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -55
- data/doc/ex/stroke_dasharray.rb +0 -43
- data/doc/ex/stroke_fill.rb +0 -11
- 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 -17
- data/doc/ex/text_align.rb +0 -36
- data/doc/ex/text_antialias.rb +0 -38
- data/doc/ex/text_styles.rb +0 -21
- 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 -25
- data/doc/ex/threshold.rb +0 -13
- data/doc/ex/to_blob.rb +0 -14
- 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 -25
- data/doc/ex/triangle01.rb +0 -16
- data/doc/ex/trim.rb +0 -24
- data/doc/ex/tspan01.rb +0 -18
- data/doc/ex/tspan02.rb +0 -19
- data/doc/ex/tspan03.rb +0 -21
- data/doc/ex/unsharp_mask.rb +0 -28
- data/doc/ex/viewex.rb +0 -35
- data/doc/ex/vignette.rb +0 -12
- data/doc/ex/watermark.rb +0 -28
- data/doc/ex/wave.rb +0 -9
- data/doc/ex/wet_floor.rb +0 -59
- data/doc/ex/writing_mode01.rb +0 -27
- 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 -565
- 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 -46
- data/examples/demo.rb +0 -324
- data/examples/describe.rb +0 -44
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -325
- data/examples/identify.rb +0 -187
- data/examples/image_opacity.rb +0 -29
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -38
- data/examples/rotating_text.rb +0 -45
- data/examples/spinner.rb +0 -50
- data/examples/thumbnail.rb +0 -65
- data/examples/vignette.rb +0 -79
- data/ext/RMagick/MANIFEST +0 -358
- data/lib/RMagick.rb +0 -1962
- data/metaconfig +0 -7
- data/post-clean.rb +0 -12
- data/post-install.rb +0 -50
- data/post-setup.rb +0 -254
- data/setup.rb +0 -1585
- data/uninstall.rb +0 -76
data/ext/RMagick/rmfill.c
CHANGED
@@ -19,8 +19,8 @@ typedef struct
|
|
19
19
|
double y1; /**< y position of first point */
|
20
20
|
double x2; /**< x position of second point */
|
21
21
|
double y2; /**< y position of second point */
|
22
|
-
|
23
|
-
|
22
|
+
PixelColor start_color; /**< the start color */
|
23
|
+
PixelColor stop_color; /**< the stop color */
|
24
24
|
} rm_GradientFill;
|
25
25
|
|
26
26
|
/** Data associated with a TextureFill */
|
@@ -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(
|
@@ -91,8 +84,8 @@ GradientFill_initialize(
|
|
91
84
|
fill->y1 = NUM2DBL(y1);
|
92
85
|
fill->x2 = NUM2DBL(x2);
|
93
86
|
fill->y2 = NUM2DBL(y2);
|
94
|
-
|
95
|
-
|
87
|
+
Color_to_PixelColor(&fill->start_color, start_color);
|
88
|
+
Color_to_PixelColor(&fill->stop_color, stop_color);
|
96
89
|
|
97
90
|
return self;
|
98
91
|
}
|
@@ -113,17 +106,15 @@ point_fill(
|
|
113
106
|
Image *image,
|
114
107
|
double x0,
|
115
108
|
double y0,
|
116
|
-
|
117
|
-
|
109
|
+
PixelColor *start_color,
|
110
|
+
PixelColor *stop_color)
|
118
111
|
{
|
119
112
|
double steps, distance;
|
120
|
-
|
113
|
+
ssize_t x, y;
|
121
114
|
MagickRealType red_step, green_step, blue_step;
|
122
|
-
|
123
|
-
ExceptionInfo exception;
|
115
|
+
ExceptionInfo *exception;
|
124
116
|
|
125
|
-
|
126
|
-
#endif
|
117
|
+
exception = AcquireExceptionInfo();
|
127
118
|
|
128
119
|
steps = sqrt((double)((image->columns-x0)*(image->columns-x0)
|
129
120
|
+ (image->rows-y0)*(image->rows-y0)));
|
@@ -132,38 +123,41 @@ point_fill(
|
|
132
123
|
green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
|
133
124
|
blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
|
134
125
|
|
135
|
-
for (y = 0; y < image->rows; y++)
|
126
|
+
for (y = 0; y < (ssize_t) image->rows; y++)
|
136
127
|
{
|
137
|
-
|
138
|
-
|
139
|
-
#if defined(HAVE_QUEUEAUTHENTICPIXELS)
|
140
|
-
row_pixels = QueueAuthenticPixels(image, 0, (long int)y, image->columns, 1, &exception);
|
141
|
-
CHECK_EXCEPTION()
|
128
|
+
#if defined(IMAGEMAGICK_7)
|
129
|
+
Quantum *row_pixels;
|
142
130
|
#else
|
143
|
-
row_pixels
|
144
|
-
rm_check_image_exception(image, RetainOnError);
|
131
|
+
PixelPacket *row_pixels;
|
145
132
|
#endif
|
146
|
-
|
133
|
+
|
134
|
+
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
135
|
+
CHECK_EXCEPTION();
|
136
|
+
|
137
|
+
for (x = 0; x < (ssize_t) image->columns; x++)
|
147
138
|
{
|
148
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
|
149
149
|
row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
|
150
150
|
row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
|
151
151
|
row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
|
152
152
|
row_pixels[x].opacity = OpaqueOpacity;
|
153
|
+
#endif
|
153
154
|
}
|
154
155
|
|
155
|
-
|
156
|
-
|
157
|
-
CHECK_EXCEPTION()
|
158
|
-
#else
|
159
|
-
SyncImagePixels(image);
|
160
|
-
rm_check_image_exception(image, RetainOnError);
|
161
|
-
#endif
|
156
|
+
SyncAuthenticPixels(image, exception);
|
157
|
+
CHECK_EXCEPTION();
|
162
158
|
}
|
163
159
|
|
164
|
-
|
165
|
-
DestroyExceptionInfo(&exception);
|
166
|
-
#endif
|
160
|
+
DestroyExceptionInfo(exception);
|
167
161
|
}
|
168
162
|
|
169
163
|
/**
|
@@ -181,19 +175,19 @@ static void
|
|
181
175
|
vertical_fill(
|
182
176
|
Image *image,
|
183
177
|
double x1,
|
184
|
-
|
185
|
-
|
178
|
+
PixelColor *start_color,
|
179
|
+
PixelColor *stop_color)
|
186
180
|
{
|
187
181
|
double steps;
|
188
|
-
|
189
|
-
PixelPacket *master;
|
182
|
+
ssize_t x, y;
|
190
183
|
MagickRealType red_step, green_step, blue_step;
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
GetExceptionInfo(&exception);
|
184
|
+
ExceptionInfo *exception;
|
185
|
+
#if defined(IMAGEMAGICK_6)
|
186
|
+
PixelPacket *master;
|
195
187
|
#endif
|
196
188
|
|
189
|
+
exception = AcquireExceptionInfo();
|
190
|
+
|
197
191
|
steps = FMAX(x1, ((long)image->columns)-x1);
|
198
192
|
|
199
193
|
// If x is to the left of the x-axis, add that many steps so that
|
@@ -208,11 +202,37 @@ vertical_fill(
|
|
208
202
|
green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
|
209
203
|
blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
|
210
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
|
211
231
|
// All the rows are the same. Make a "master row" and simply copy
|
212
232
|
// it to each actual row.
|
213
233
|
master = ALLOC_N(PixelPacket, image->columns);
|
214
234
|
|
215
|
-
for (x = 0; x < image->columns; x++)
|
235
|
+
for (x = 0; x < (ssize_t) image->columns; x++)
|
216
236
|
{
|
217
237
|
double distance = fabs(x1 - x);
|
218
238
|
master[x].red = ROUND_TO_QUANTUM(start_color->red + (red_step * distance));
|
@@ -222,34 +242,31 @@ vertical_fill(
|
|
222
242
|
}
|
223
243
|
|
224
244
|
// Now copy the master row to each actual row.
|
225
|
-
for (y = 0; y < image->rows; y++)
|
245
|
+
for (y = 0; y < (ssize_t) image->rows; y++)
|
226
246
|
{
|
227
247
|
PixelPacket *row_pixels;
|
228
248
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
#endif
|
249
|
+
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
250
|
+
if (rm_should_raise_exception(exception, RetainExceptionRetention))
|
251
|
+
{
|
252
|
+
xfree((void *)master);
|
253
|
+
rm_raise_exception(exception);
|
254
|
+
}
|
236
255
|
|
237
256
|
memcpy(row_pixels, master, image->columns * sizeof(PixelPacket));
|
238
257
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
#endif
|
258
|
+
SyncAuthenticPixels(image, exception);
|
259
|
+
if (rm_should_raise_exception(exception, RetainExceptionRetention))
|
260
|
+
{
|
261
|
+
xfree((void *)master);
|
262
|
+
rm_raise_exception(exception);
|
263
|
+
}
|
246
264
|
}
|
247
265
|
|
248
|
-
|
249
|
-
DestroyExceptionInfo(&exception);
|
250
|
-
#endif
|
266
|
+
DestroyExceptionInfo(exception);
|
251
267
|
|
252
|
-
xfree((void *)master);
|
268
|
+
xfree((void *) master);
|
269
|
+
#endif
|
253
270
|
}
|
254
271
|
|
255
272
|
/**
|
@@ -266,19 +283,19 @@ static void
|
|
266
283
|
horizontal_fill(
|
267
284
|
Image *image,
|
268
285
|
double y1,
|
269
|
-
|
270
|
-
|
286
|
+
PixelColor *start_color,
|
287
|
+
PixelColor *stop_color)
|
271
288
|
{
|
272
289
|
double steps;
|
273
|
-
|
274
|
-
PixelPacket *master;
|
290
|
+
ssize_t x, y;
|
275
291
|
MagickRealType red_step, green_step, blue_step;
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
GetExceptionInfo(&exception);
|
292
|
+
ExceptionInfo *exception;
|
293
|
+
#if defined(IMAGEMAGICK_6)
|
294
|
+
PixelPacket *master;
|
280
295
|
#endif
|
281
296
|
|
297
|
+
exception = AcquireExceptionInfo();
|
298
|
+
|
282
299
|
steps = FMAX(y1, ((long)image->rows)-y1);
|
283
300
|
|
284
301
|
// If the line is below the y-axis, add that many steps so the color
|
@@ -292,11 +309,36 @@ horizontal_fill(
|
|
292
309
|
green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
|
293
310
|
blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
|
294
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
|
295
337
|
// All the columns are the same, so make a master column and copy it to
|
296
338
|
// each of the "real" columns.
|
297
339
|
master = ALLOC_N(PixelPacket, image->rows);
|
298
340
|
|
299
|
-
for (y = 0; y < image->rows; y++)
|
341
|
+
for (y = 0; y < (ssize_t) image->rows; y++)
|
300
342
|
{
|
301
343
|
double distance = fabs(y1 - y);
|
302
344
|
master[y].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
|
@@ -305,32 +347,31 @@ horizontal_fill(
|
|
305
347
|
master[y].opacity = OpaqueOpacity;
|
306
348
|
}
|
307
349
|
|
308
|
-
for (x = 0; x < image->columns; x++)
|
350
|
+
for (x = 0; x < (ssize_t) image->columns; x++)
|
309
351
|
{
|
310
352
|
PixelPacket *col_pixels;
|
311
353
|
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
354
|
+
col_pixels = QueueAuthenticPixels(image, x, 0, 1, image->rows, exception);
|
355
|
+
if (rm_should_raise_exception(exception, RetainExceptionRetention))
|
356
|
+
{
|
357
|
+
xfree((void *)master);
|
358
|
+
rm_raise_exception(exception);
|
359
|
+
}
|
360
|
+
|
318
361
|
memcpy(col_pixels, master, image->rows * sizeof(PixelPacket));
|
319
362
|
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
#endif
|
363
|
+
SyncAuthenticPixels(image, exception);
|
364
|
+
if (rm_should_raise_exception(exception, RetainExceptionRetention))
|
365
|
+
{
|
366
|
+
xfree((void *)master);
|
367
|
+
rm_raise_exception(exception);
|
368
|
+
}
|
327
369
|
}
|
328
370
|
|
329
|
-
|
330
|
-
DestroyExceptionInfo(&exception);
|
331
|
-
#endif
|
371
|
+
DestroyExceptionInfo(exception);
|
332
372
|
|
333
|
-
xfree((
|
373
|
+
xfree((void *) master);
|
374
|
+
#endif
|
334
375
|
}
|
335
376
|
|
336
377
|
/**
|
@@ -354,18 +395,16 @@ v_diagonal_fill(
|
|
354
395
|
double y1,
|
355
396
|
double x2,
|
356
397
|
double y2,
|
357
|
-
|
358
|
-
|
398
|
+
PixelColor *start_color,
|
399
|
+
PixelColor *stop_color)
|
359
400
|
{
|
360
|
-
|
401
|
+
ssize_t x, y;
|
361
402
|
MagickRealType red_step, green_step, blue_step;
|
362
403
|
double m, b, steps = 0.0;
|
363
404
|
double d1, d2;
|
364
|
-
|
365
|
-
ExceptionInfo exception;
|
405
|
+
ExceptionInfo *exception;
|
366
406
|
|
367
|
-
|
368
|
-
#endif
|
407
|
+
exception = AcquireExceptionInfo();
|
369
408
|
|
370
409
|
// Compute the equation of the line: y=mx+b
|
371
410
|
m = ((double)(y2 - y1))/((double)(x2 - x1));
|
@@ -379,7 +418,7 @@ v_diagonal_fill(
|
|
379
418
|
|
380
419
|
if (d1 < 0 && d2 < 0)
|
381
420
|
{
|
382
|
-
steps += FMAX(fabs(d1),fabs(d2));
|
421
|
+
steps += FMAX(fabs(d1), fabs(d2));
|
383
422
|
}
|
384
423
|
else if (d1 > (double)image->rows && d2 > (double)image->rows)
|
385
424
|
{
|
@@ -393,7 +432,7 @@ v_diagonal_fill(
|
|
393
432
|
// If the line is entirely > image->rows, swap the start & end color
|
394
433
|
if (steps < 0)
|
395
434
|
{
|
396
|
-
|
435
|
+
PixelColor t = *stop_color;
|
397
436
|
*stop_color = *start_color;
|
398
437
|
*start_color = t;
|
399
438
|
steps = -steps;
|
@@ -403,39 +442,40 @@ v_diagonal_fill(
|
|
403
442
|
green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
|
404
443
|
blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
|
405
444
|
|
406
|
-
for (y = 0; y < image->rows; y++)
|
445
|
+
for (y = 0; y < (ssize_t) image->rows; y++)
|
407
446
|
{
|
408
|
-
|
409
|
-
|
410
|
-
#if defined(HAVE_QUEUEAUTHENTICPIXELS)
|
411
|
-
row_pixels = QueueAuthenticPixels(image, 0, (long int)y, image->columns, 1, &exception);
|
412
|
-
CHECK_EXCEPTION()
|
447
|
+
#if defined(IMAGEMAGICK_7)
|
448
|
+
Quantum *row_pixels;
|
413
449
|
#else
|
414
|
-
row_pixels
|
415
|
-
rm_check_image_exception(image, RetainOnError);
|
450
|
+
PixelPacket *row_pixels;
|
416
451
|
#endif
|
417
|
-
|
452
|
+
|
453
|
+
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
454
|
+
CHECK_EXCEPTION();
|
455
|
+
|
456
|
+
for (x = 0; x < (ssize_t) image->columns; x++)
|
418
457
|
{
|
419
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
|
420
467
|
row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
|
421
468
|
row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
|
422
469
|
row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
|
423
470
|
row_pixels[x].opacity = OpaqueOpacity;
|
471
|
+
#endif
|
424
472
|
}
|
425
473
|
|
426
|
-
|
427
|
-
|
428
|
-
CHECK_EXCEPTION()
|
429
|
-
#else
|
430
|
-
SyncImagePixels(image);
|
431
|
-
rm_check_image_exception(image, RetainOnError);
|
432
|
-
#endif
|
474
|
+
SyncAuthenticPixels(image, exception);
|
475
|
+
CHECK_EXCEPTION();
|
433
476
|
}
|
434
477
|
|
435
|
-
|
436
|
-
DestroyExceptionInfo(&exception);
|
437
|
-
#endif
|
438
|
-
|
478
|
+
DestroyExceptionInfo(exception);
|
439
479
|
}
|
440
480
|
|
441
481
|
/**
|
@@ -459,18 +499,16 @@ h_diagonal_fill(
|
|
459
499
|
double y1,
|
460
500
|
double x2,
|
461
501
|
double y2,
|
462
|
-
|
463
|
-
|
502
|
+
PixelColor *start_color,
|
503
|
+
PixelColor *stop_color)
|
464
504
|
{
|
465
|
-
|
505
|
+
ssize_t x, y;
|
466
506
|
double m, b, steps = 0.0;
|
467
507
|
MagickRealType red_step, green_step, blue_step;
|
468
508
|
double d1, d2;
|
469
|
-
|
470
|
-
ExceptionInfo exception;
|
509
|
+
ExceptionInfo *exception;
|
471
510
|
|
472
|
-
|
473
|
-
#endif
|
511
|
+
exception = AcquireExceptionInfo();
|
474
512
|
|
475
513
|
// Compute the equation of the line: y=mx+b
|
476
514
|
m = ((double)(y2 - y1))/((double)(x2 - x1));
|
@@ -486,11 +524,11 @@ h_diagonal_fill(
|
|
486
524
|
// the number of steps.
|
487
525
|
if (d1 < 0 && d2 < 0)
|
488
526
|
{
|
489
|
-
steps += FMAX(fabs(d1),fabs(d2));
|
527
|
+
steps += FMAX(fabs(d1), fabs(d2));
|
490
528
|
}
|
491
529
|
else if (d1 > (double)image->columns && d2 > (double)image->columns)
|
492
530
|
{
|
493
|
-
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)));
|
494
532
|
}
|
495
533
|
|
496
534
|
d1 = FMAX(d1, image->columns-d1);
|
@@ -500,7 +538,7 @@ h_diagonal_fill(
|
|
500
538
|
// If the line is entirely > image->columns, swap the start & end color
|
501
539
|
if (steps < 0)
|
502
540
|
{
|
503
|
-
|
541
|
+
PixelColor t = *stop_color;
|
504
542
|
*stop_color = *start_color;
|
505
543
|
*start_color = t;
|
506
544
|
steps = -steps;
|
@@ -510,57 +548,55 @@ h_diagonal_fill(
|
|
510
548
|
green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
|
511
549
|
blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
|
512
550
|
|
513
|
-
for (y = 0; y < image->rows; y++)
|
551
|
+
for (y = 0; y < (ssize_t) image->rows; y++)
|
514
552
|
{
|
515
|
-
|
516
|
-
|
517
|
-
#if defined(HAVE_QUEUEAUTHENTICPIXELS)
|
518
|
-
row_pixels = QueueAuthenticPixels(image, 0, (long int)y, image->columns, 1, &exception);
|
519
|
-
CHECK_EXCEPTION()
|
553
|
+
#if defined(IMAGEMAGICK_7)
|
554
|
+
Quantum *row_pixels;
|
520
555
|
#else
|
521
|
-
row_pixels
|
522
|
-
rm_check_image_exception(image, RetainOnError);
|
556
|
+
PixelPacket *row_pixels;
|
523
557
|
#endif
|
524
|
-
|
558
|
+
|
559
|
+
row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
|
560
|
+
CHECK_EXCEPTION();
|
561
|
+
|
562
|
+
for (x = 0; x < (ssize_t) image->columns; x++)
|
525
563
|
{
|
526
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
|
527
573
|
row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
|
528
574
|
row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
|
529
575
|
row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
|
530
576
|
row_pixels[x].opacity = OpaqueOpacity;
|
577
|
+
#endif
|
531
578
|
}
|
532
579
|
|
533
|
-
|
534
|
-
|
535
|
-
CHECK_EXCEPTION()
|
536
|
-
#else
|
537
|
-
SyncImagePixels(image);
|
538
|
-
rm_check_image_exception(image, RetainOnError);
|
539
|
-
#endif
|
580
|
+
SyncAuthenticPixels(image, exception);
|
581
|
+
CHECK_EXCEPTION();
|
540
582
|
}
|
541
583
|
|
542
|
-
|
543
|
-
DestroyExceptionInfo(&exception);
|
544
|
-
#endif
|
584
|
+
DestroyExceptionInfo(exception);
|
545
585
|
}
|
546
586
|
|
547
587
|
/**
|
548
588
|
* Call GradientFill with the start and stop colors specified when this fill
|
549
589
|
* object was created.
|
550
590
|
*
|
551
|
-
*
|
552
|
-
*
|
553
|
-
*
|
554
|
-
* @param self this object
|
555
|
-
* @param image_obj the image
|
556
|
-
* @return self
|
591
|
+
* @param image_obj [Magick::Image] the image to fill
|
592
|
+
* @return [Magick::GradientFill] self
|
557
593
|
*/
|
558
594
|
VALUE
|
559
595
|
GradientFill_fill(VALUE self, VALUE image_obj)
|
560
596
|
{
|
561
597
|
rm_GradientFill *fill;
|
562
598
|
Image *image;
|
563
|
-
|
599
|
+
PixelColor start_color, stop_color;
|
564
600
|
double x1, y1, x2, y2; // points on the line
|
565
601
|
|
566
602
|
Data_Get_Struct(self, rm_GradientFill, fill);
|
@@ -631,51 +667,38 @@ free_TextureFill(void *fill_obj)
|
|
631
667
|
rm_TextureFill *fill = (rm_TextureFill *)fill_obj;
|
632
668
|
|
633
669
|
// Do not trace destruction
|
634
|
-
|
670
|
+
if (fill->texture)
|
671
|
+
{
|
672
|
+
DestroyImage(fill->texture);
|
673
|
+
}
|
635
674
|
xfree(fill);
|
636
675
|
}
|
637
676
|
|
638
677
|
/**
|
639
678
|
* Create new TextureFill object.
|
640
679
|
*
|
641
|
-
*
|
642
|
-
*
|
643
|
-
* Notes:
|
644
|
-
* - The texture is an Image or Image *object
|
645
|
-
*
|
646
|
-
* @param class the Ruby class to use
|
647
|
-
* @return a new TextureFill object
|
680
|
+
* @return [Magick::TextureFill] a new TextureFill object
|
648
681
|
*/
|
649
682
|
VALUE
|
650
683
|
TextureFill_alloc(VALUE class)
|
651
684
|
{
|
652
685
|
rm_TextureFill *fill;
|
653
|
-
return Data_Make_Struct(class
|
654
|
-
, rm_TextureFill
|
655
|
-
, NULL
|
656
|
-
, free_TextureFill
|
657
|
-
, fill);
|
686
|
+
return Data_Make_Struct(class, rm_TextureFill, NULL, free_TextureFill, fill);
|
658
687
|
}
|
659
688
|
|
660
689
|
/**
|
661
|
-
*
|
662
|
-
*
|
663
|
-
* Ruby usage:
|
664
|
-
* - @verbatim TextureFill#initialize(texture) @endverbatim
|
665
|
-
*
|
666
|
-
* Notes:
|
667
|
-
* - The texture is an Image or Image *object
|
690
|
+
* Initialize TextureFill object.
|
668
691
|
*
|
669
|
-
* @param
|
670
|
-
*
|
671
|
-
* @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
|
672
695
|
*/
|
673
696
|
VALUE
|
674
697
|
TextureFill_initialize(VALUE self, VALUE texture_arg)
|
675
698
|
{
|
676
699
|
rm_TextureFill *fill;
|
677
700
|
Image *texture;
|
678
|
-
|
701
|
+
VALUE texture_image;
|
679
702
|
|
680
703
|
Data_Get_Struct(self, rm_TextureFill, fill);
|
681
704
|
|
@@ -683,9 +706,12 @@ TextureFill_initialize(VALUE self, VALUE texture_arg)
|
|
683
706
|
|
684
707
|
// Bump the reference count on the texture image.
|
685
708
|
texture = rm_check_destroyed(texture_image);
|
686
|
-
|
709
|
+
ReferenceImage(texture);
|
687
710
|
|
688
711
|
fill->texture = texture;
|
712
|
+
|
713
|
+
RB_GC_GUARD(texture_image);
|
714
|
+
|
689
715
|
return self;
|
690
716
|
}
|
691
717
|
|
@@ -693,24 +719,30 @@ TextureFill_initialize(VALUE self, VALUE texture_arg)
|
|
693
719
|
* Call TextureFill with the texture specified when this fill object was
|
694
720
|
* created.
|
695
721
|
*
|
696
|
-
*
|
697
|
-
*
|
698
|
-
*
|
699
|
-
* @param self this object
|
700
|
-
* @param image_obj the image
|
701
|
-
* @return self
|
722
|
+
* @param image_obj [Magick::Image] the image to fill
|
723
|
+
* @return [Magick::TextureFill] self
|
702
724
|
*/
|
703
725
|
VALUE
|
704
726
|
TextureFill_fill(VALUE self, VALUE image_obj)
|
705
727
|
{
|
706
728
|
rm_TextureFill *fill;
|
707
729
|
Image *image;
|
730
|
+
#if defined(IMAGEMAGICK_7)
|
731
|
+
ExceptionInfo *exception;
|
732
|
+
#endif
|
708
733
|
|
709
734
|
image = rm_check_destroyed(image_obj);
|
710
735
|
Data_Get_Struct(self, rm_TextureFill, fill);
|
711
736
|
|
712
|
-
|
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);
|
713
744
|
rm_check_image_exception(image, RetainOnError);
|
745
|
+
#endif
|
714
746
|
|
715
747
|
return self;
|
716
748
|
}
|