rmagick 4.2.2 → 5.3.0
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.
- checksums.yaml +4 -4
- 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/.github/workflows/ci.yml +55 -24
- data/.gitignore +2 -0
- data/.rubocop_todo.yml +0 -1
- data/CHANGELOG.md +93 -0
- data/README.md +8 -16
- data/Rakefile +53 -81
- data/before_install_linux.sh +4 -4
- data/before_install_osx.sh +7 -6
- data/ext/RMagick/extconf.rb +81 -37
- data/ext/RMagick/rmagick.h +29 -20
- data/ext/RMagick/rmagick_gvl.h +224 -0
- data/ext/RMagick/rmdraw.c +140 -127
- data/ext/RMagick/rmenum.c +34 -15
- data/ext/RMagick/rmfill.c +77 -16
- data/ext/RMagick/rmilist.c +163 -74
- data/ext/RMagick/rmimage.c +1130 -630
- data/ext/RMagick/rminfo.c +109 -121
- data/ext/RMagick/rmkinfo.c +43 -13
- data/ext/RMagick/rmmain.c +15 -11
- data/ext/RMagick/rmmontage.c +45 -24
- data/ext/RMagick/rmpixel.c +66 -42
- data/ext/RMagick/rmstruct.c +6 -6
- data/ext/RMagick/rmutil.c +29 -88
- data/lib/rmagick/version.rb +3 -1
- data/lib/rmagick.rb +2 -0
- data/lib/rmagick_internal.rb +9 -48
- data/lib/rvg/rvg.rb +2 -2
- data/rmagick.gemspec +6 -6
- metadata +25 -8
- data/.codeclimate.yml +0 -63
- data/deprecated/RMagick.rb +0 -6
data/ext/RMagick/rmimage.c
CHANGED
@@ -29,47 +29,276 @@
|
|
29
29
|
#define magick_module module
|
30
30
|
#endif
|
31
31
|
|
32
|
-
/** Method that effects an image */
|
33
|
-
typedef Image *(effector_t)(const Image *, const double, const double, ExceptionInfo *);
|
34
|
-
/** Method that flips an image */
|
35
|
-
typedef Image *(flipper_t)(const Image *, ExceptionInfo *);
|
36
|
-
/** Method that magnifies an image */
|
37
|
-
typedef Image *(magnifier_t)(const Image *, ExceptionInfo *);
|
38
|
-
/** Method that reads an image */
|
39
|
-
typedef Image *(reader_t)(const Info *, ExceptionInfo *);
|
40
|
-
/** Method that scales an image */
|
41
|
-
typedef Image *(scaler_t)(const Image *, const size_t, const size_t, ExceptionInfo *);
|
42
|
-
/** Method that computes threshold on an image */
|
43
|
-
#if defined(IMAGEMAGICK_7)
|
44
|
-
typedef MagickBooleanType (auto_channel_t)(Image *, ExceptionInfo *exception);
|
45
|
-
typedef Image *(channel_method_t)(const Image *, const double, const double, ExceptionInfo *);
|
46
|
-
typedef MagickBooleanType (thresholder_t)(Image *, const char *, ExceptionInfo *);
|
47
|
-
#else
|
48
|
-
typedef MagickBooleanType (auto_channel_t)(Image *, const ChannelType);
|
49
|
-
typedef Image *(channel_method_t)(const Image *, const ChannelType, const double, const double, ExceptionInfo *);
|
50
|
-
typedef MagickBooleanType (thresholder_t)(Image *, const char *);
|
51
|
-
#define IsEquivalentImage IsImageSimilar
|
52
|
-
#define OrderedDitherImage OrderedPosterizeImage
|
53
|
-
#endif
|
54
|
-
/** Method that transforms an image */
|
55
|
-
typedef Image *(xformer_t)(const Image *, const RectangleInfo *, ExceptionInfo *);
|
56
|
-
|
57
32
|
static VALUE cropper(int, int, VALUE *, VALUE);
|
58
|
-
static VALUE effect_image(VALUE, int, VALUE *,
|
59
|
-
static VALUE flipflop(int, VALUE,
|
60
|
-
static VALUE rd_image(VALUE, VALUE,
|
33
|
+
static VALUE effect_image(VALUE, int, VALUE *, gvl_function_t);
|
34
|
+
static VALUE flipflop(int, VALUE, gvl_function_t);
|
35
|
+
static VALUE rd_image(VALUE, VALUE, gvl_function_t);
|
61
36
|
static VALUE rotate(int, int, VALUE *, VALUE);
|
62
|
-
static VALUE scale(int, int, VALUE *, VALUE,
|
63
|
-
static VALUE threshold_image(int, VALUE *, VALUE,
|
64
|
-
static VALUE xform_image(int, VALUE, VALUE, VALUE, VALUE, VALUE,
|
37
|
+
static VALUE scale(int, int, VALUE *, VALUE, gvl_function_t);
|
38
|
+
static VALUE threshold_image(int, VALUE *, VALUE, gvl_function_t);
|
39
|
+
static VALUE xform_image(int, VALUE, VALUE, VALUE, VALUE, VALUE, gvl_function_t);
|
65
40
|
static VALUE array_from_images(Image *);
|
66
|
-
static void call_trace_proc(Image *, const char *);
|
67
41
|
static VALUE file_arg_rescue(VALUE, VALUE ATTRIBUTE_UNUSED) ATTRIBUTE_NORETURN;
|
68
|
-
static
|
42
|
+
static size_t rm_image_memsize(const void *img);
|
43
|
+
|
44
|
+
const rb_data_type_t rm_image_data_type = {
|
45
|
+
"Magick::Image",
|
46
|
+
{ NULL, rm_image_destroy, rm_image_memsize, },
|
47
|
+
0, 0,
|
48
|
+
RUBY_TYPED_FROZEN_SHAREABLE,
|
49
|
+
};
|
69
50
|
|
70
51
|
static const char *BlackPointCompensationKey = "PROFILE:black-point-compensation";
|
71
52
|
|
72
53
|
|
54
|
+
DEFINE_GVL_STUB4(AdaptiveBlurImage, const Image *, const double, const double, ExceptionInfo *);
|
55
|
+
DEFINE_GVL_STUB4(AdaptiveResizeImage, const Image *, const size_t, const size_t, ExceptionInfo *);
|
56
|
+
DEFINE_GVL_STUB4(AdaptiveSharpenImage, const Image *, const double, const double, ExceptionInfo *);
|
57
|
+
DEFINE_GVL_STUB5(AdaptiveThresholdImage, const Image *, const size_t, const size_t, const double, ExceptionInfo *);
|
58
|
+
DEFINE_GVL_STUB3(AffineTransformImage, const Image *, const AffineMatrix *, ExceptionInfo *);
|
59
|
+
DEFINE_GVL_STUB2(Base64Decode, const char *, size_t *);
|
60
|
+
DEFINE_GVL_STUB4(BlobToImage, const ImageInfo *, const void *, const size_t, ExceptionInfo *);
|
61
|
+
DEFINE_GVL_STUB3(BlueShiftImage, const Image *, const double, ExceptionInfo *);
|
62
|
+
DEFINE_GVL_STUB4(BlurImage, const Image *, const double, const double, ExceptionInfo *);
|
63
|
+
DEFINE_GVL_STUB4(CharcoalImage, const Image *, const double, const double, ExceptionInfo *);
|
64
|
+
DEFINE_GVL_STUB3(ChopImage, const Image *, const RectangleInfo *, ExceptionInfo *);
|
65
|
+
DEFINE_GVL_STUB3(ColorMatrixImage, const Image *, const KernelInfo *, ExceptionInfo *);
|
66
|
+
DEFINE_GVL_STUB3(CropImage, const Image *, const RectangleInfo *, ExceptionInfo *);
|
67
|
+
DEFINE_GVL_STUB3(DecipherImage, Image *, const char *, ExceptionInfo *);
|
68
|
+
DEFINE_GVL_STUB3(DeskewImage, const Image *, const double, ExceptionInfo *);
|
69
|
+
DEFINE_GVL_STUB2(DespeckleImage, const Image *, ExceptionInfo *);
|
70
|
+
DEFINE_GVL_STUB6(DistortImage, const Image *, DistortMethod, const size_t, const double *, MagickBooleanType, ExceptionInfo *);
|
71
|
+
DEFINE_GVL_STUB3(EdgeImage, const Image *, const double, ExceptionInfo *);
|
72
|
+
DEFINE_GVL_STUB4(EmbossImage, const Image *, const double, const double, ExceptionInfo *);
|
73
|
+
DEFINE_GVL_STUB3(EncipherImage, Image *, const char *, ExceptionInfo *);
|
74
|
+
DEFINE_GVL_STUB2(EnhanceImage, const Image *, ExceptionInfo *);
|
75
|
+
DEFINE_GVL_STUB3(ExcerptImage, const Image *, const RectangleInfo *, ExceptionInfo *);
|
76
|
+
DEFINE_GVL_STUB9(ExportImagePixels, const Image *, const ssize_t, const ssize_t, const size_t, const size_t, const char *, const StorageType, void *, ExceptionInfo *);
|
77
|
+
DEFINE_GVL_STUB3(ExtentImage, const Image *, const RectangleInfo *, ExceptionInfo *);
|
78
|
+
DEFINE_GVL_STUB2(FlipImage, const Image *, ExceptionInfo *);
|
79
|
+
DEFINE_GVL_STUB2(FlopImage, const Image *, ExceptionInfo *);
|
80
|
+
DEFINE_GVL_STUB4(GaussianBlurImage, const Image *, const double, const double, ExceptionInfo *);
|
81
|
+
DEFINE_GVL_STUB6(GetAuthenticPixels, Image *, const ssize_t, const ssize_t, const size_t, const size_t, ExceptionInfo *);
|
82
|
+
DEFINE_GVL_STUB2(GetImageDepth, const Image *, ExceptionInfo *);
|
83
|
+
DEFINE_GVL_STUB3(GetImageHistogram, const Image *, size_t *, ExceptionInfo *);
|
84
|
+
DEFINE_GVL_STUB3(GetNumberColors, const Image *, FILE *, ExceptionInfo *);
|
85
|
+
DEFINE_GVL_STUB6(GetVirtualPixels, const Image *, const ssize_t, const ssize_t, const size_t, const size_t, ExceptionInfo *);
|
86
|
+
DEFINE_GVL_STUB4(ImageToBlob, const ImageInfo *, Image *, size_t *, ExceptionInfo *);
|
87
|
+
DEFINE_GVL_STUB6(LiquidRescaleImage, const Image *, const size_t, const size_t, const double, const double, ExceptionInfo *);
|
88
|
+
DEFINE_GVL_STUB2(MagnifyImage, const Image *, ExceptionInfo *);
|
89
|
+
DEFINE_GVL_STUB2(MinifyImage, const Image *, ExceptionInfo *);
|
90
|
+
DEFINE_GVL_STUB5(MotionBlurImage, const Image *, const double, const double, const double, ExceptionInfo *);
|
91
|
+
DEFINE_GVL_STUB2(PingImage, const ImageInfo *, ExceptionInfo *);
|
92
|
+
DEFINE_GVL_STUB3(PreviewImage, const Image *, const PreviewType, ExceptionInfo *);
|
93
|
+
DEFINE_GVL_STUB2(ReadImage, const ImageInfo *, ExceptionInfo *);
|
94
|
+
DEFINE_GVL_STUB4(RollImage, const Image *, const ssize_t, const ssize_t, ExceptionInfo *);
|
95
|
+
DEFINE_GVL_STUB3(RotateImage, const Image *, const double, ExceptionInfo *);
|
96
|
+
DEFINE_GVL_STUB4(SampleImage, const Image *, const size_t, const size_t, ExceptionInfo *);
|
97
|
+
DEFINE_GVL_STUB4(ScaleImage, const Image *, const size_t, const size_t, ExceptionInfo *);
|
98
|
+
DEFINE_GVL_STUB3(SepiaToneImage, const Image *, const double, ExceptionInfo *);
|
99
|
+
DEFINE_GVL_STUB5(ShadeImage, const Image *, const MagickBooleanType, const double, const double,ExceptionInfo *);
|
100
|
+
DEFINE_GVL_STUB6(ShadowImage, const Image *, const double, const double, const ssize_t, const ssize_t, ExceptionInfo *);
|
101
|
+
DEFINE_GVL_STUB4(SharpenImage, const Image *, const double, const double, ExceptionInfo *);
|
102
|
+
DEFINE_GVL_STUB3(ShaveImage, const Image *, const RectangleInfo *, ExceptionInfo *);
|
103
|
+
DEFINE_GVL_STUB4(ShearImage, const Image *, const double, const double, ExceptionInfo *);
|
104
|
+
DEFINE_GVL_STUB5(SketchImage, const Image *, const double, const double, const double, ExceptionInfo *);
|
105
|
+
DEFINE_GVL_STUB3(SpliceImage, const Image *, const RectangleInfo *, ExceptionInfo *);
|
106
|
+
DEFINE_GVL_STUB5(StatisticImage, const Image *, const StatisticType, const size_t, const size_t, ExceptionInfo *);
|
107
|
+
DEFINE_GVL_STUB3(SteganoImage, const Image *, const Image *, ExceptionInfo *);
|
108
|
+
DEFINE_GVL_STUB3(StereoImage, const Image *, const Image *, ExceptionInfo *);
|
109
|
+
DEFINE_GVL_STUB2(SyncAuthenticPixels, Image *, ExceptionInfo *);
|
110
|
+
DEFINE_GVL_STUB4(ThumbnailImage, const Image *, const size_t, const size_t, ExceptionInfo *);
|
111
|
+
DEFINE_GVL_STUB2(TransposeImage, const Image *, ExceptionInfo *);
|
112
|
+
DEFINE_GVL_STUB2(TransverseImage, const Image *, ExceptionInfo *);
|
113
|
+
DEFINE_GVL_STUB2(TrimImage, const Image *, ExceptionInfo *);
|
114
|
+
DEFINE_GVL_STUB2(UniqueImageColors, const Image *, ExceptionInfo *);
|
115
|
+
DEFINE_GVL_STUB6(UnsharpMaskImage, const Image *, const double, const double, const double, const double, ExceptionInfo *);
|
116
|
+
DEFINE_GVL_STUB6(VignetteImage, const Image *, const double, const double, const ssize_t, const ssize_t, ExceptionInfo *);
|
117
|
+
#if defined(IMAGEMAGICK_7)
|
118
|
+
DEFINE_GVL_STUB4(AddNoiseImage, const Image *, const NoiseType, const double, ExceptionInfo *);
|
119
|
+
DEFINE_GVL_STUB2(AutoGammaImage, Image *, ExceptionInfo *);
|
120
|
+
DEFINE_GVL_STUB2(AutoLevelImage, Image *, ExceptionInfo *);
|
121
|
+
DEFINE_GVL_STUB3(BilevelImage, Image *, const double, ExceptionInfo *);
|
122
|
+
DEFINE_GVL_STUB3(BlackThresholdImage, Image *, const char *, ExceptionInfo *);
|
123
|
+
DEFINE_GVL_STUB4(BorderImage, const Image *, const RectangleInfo *, const CompositeOperator, ExceptionInfo *);
|
124
|
+
DEFINE_GVL_STUB4(ClutImage, Image *, const Image *, const PixelInterpolateMethod, ExceptionInfo *);
|
125
|
+
DEFINE_GVL_STUB4(ColorizeImage, const Image *, const char *, const PixelInfo *, ExceptionInfo *);
|
126
|
+
DEFINE_GVL_STUB5(CompareImages, Image *, const Image *, const MetricType, double *, ExceptionInfo *);
|
127
|
+
DEFINE_GVL_STUB7(CompositeImage, Image *, const Image *, const CompositeOperator, const MagickBooleanType, const ssize_t, const ssize_t, ExceptionInfo *);
|
128
|
+
DEFINE_GVL_STUB2(CompressImageColormap, Image *, ExceptionInfo *);
|
129
|
+
DEFINE_GVL_STUB4(ContrastStretchImage, Image *, const double, const double, ExceptionInfo *);
|
130
|
+
DEFINE_GVL_STUB3(ConvolveImage, const Image *, const KernelInfo *, ExceptionInfo *);
|
131
|
+
DEFINE_GVL_STUB3(CycleColormapImage, Image *, const ssize_t, ExceptionInfo *);
|
132
|
+
DEFINE_GVL_STUB4(DrawAffineImage, Image *, const Image *, const AffineMatrix *, ExceptionInfo *);
|
133
|
+
DEFINE_GVL_STUB2(EqualizeImage, Image *, ExceptionInfo *);
|
134
|
+
DEFINE_GVL_STUB4(EvaluateImage, Image *, const MagickEvaluateOperator, const double, ExceptionInfo *);
|
135
|
+
DEFINE_GVL_STUB7(FloodfillPaintImage, Image *, const DrawInfo *, const PixelInfo *, const ssize_t, const ssize_t, const MagickBooleanType, ExceptionInfo *);
|
136
|
+
DEFINE_GVL_STUB4(FrameImage, const Image *, const FrameInfo *, const CompositeOperator, ExceptionInfo *);
|
137
|
+
DEFINE_GVL_STUB5(FunctionImage, Image *, const MagickFunction, const size_t, const double *, ExceptionInfo *);
|
138
|
+
DEFINE_GVL_STUB3(FxImage, const Image *, const char *, ExceptionInfo *);
|
139
|
+
DEFINE_GVL_STUB3(GammaImage, Image *, const double, ExceptionInfo *);
|
140
|
+
DEFINE_GVL_STUB5(GetImageDistortion, Image *, const Image *, const MetricType, double *, ExceptionInfo *);
|
141
|
+
DEFINE_GVL_STUB3(GetImageEntropy, const Image *, double *, ExceptionInfo *);
|
142
|
+
DEFINE_GVL_STUB4(GetImageExtrema, const Image *, size_t *, size_t *, ExceptionInfo *);
|
143
|
+
DEFINE_GVL_STUB3(GetImageMask, const Image *, const PixelMask, ExceptionInfo *);
|
144
|
+
DEFINE_GVL_STUB4(GetImageMean, const Image *, double *, double *, ExceptionInfo *);
|
145
|
+
DEFINE_GVL_STUB4(ImplodeImage, const Image *, const double, const PixelInterpolateMethod, ExceptionInfo *);
|
146
|
+
DEFINE_GVL_STUB9(ImportImagePixels, Image *, const ssize_t, const ssize_t, const size_t, const size_t, const char *, const StorageType, const void *, ExceptionInfo *);
|
147
|
+
DEFINE_GVL_STUB5(IsEquivalentImage, const Image *, const Image *, ssize_t *, ssize_t *, ExceptionInfo *);
|
148
|
+
DEFINE_GVL_STUB5(LevelImage, Image *, const double, const double, const double, ExceptionInfo *);
|
149
|
+
DEFINE_GVL_STUB5(LevelImageColors, Image *, const PixelInfo *, const PixelInfo *, const MagickBooleanType, ExceptionInfo *);
|
150
|
+
DEFINE_GVL_STUB5(LevelizeImage, Image *, const double, const double, const double, ExceptionInfo *);
|
151
|
+
DEFINE_GVL_STUB4(LinearStretchImage, Image *, const double, const double, ExceptionInfo *);
|
152
|
+
DEFINE_GVL_STUB3(ModulateImage, Image *, const char *, ExceptionInfo *);
|
153
|
+
DEFINE_GVL_STUB5(MorphologyImage, const Image *, const MorphologyMethod, const ssize_t, const KernelInfo *, ExceptionInfo *);
|
154
|
+
DEFINE_GVL_STUB3(NegateImage, Image *, const MagickBooleanType, ExceptionInfo *);
|
155
|
+
DEFINE_GVL_STUB2(NormalizeImage, Image *, ExceptionInfo *);
|
156
|
+
DEFINE_GVL_STUB4(OilPaintImage, const Image *, const double, const double, ExceptionInfo *);
|
157
|
+
DEFINE_GVL_STUB5(OpaquePaintImage, Image *, const PixelInfo *, const PixelInfo *, const MagickBooleanType, ExceptionInfo *);
|
158
|
+
DEFINE_GVL_STUB3(OrderedDitherImage, Image *, const char *, ExceptionInfo *);
|
159
|
+
DEFINE_GVL_STUB6(PolaroidImage, const Image *, const DrawInfo *, const char *, const double, const PixelInterpolateMethod, ExceptionInfo *);
|
160
|
+
DEFINE_GVL_STUB4(PosterizeImage, Image *, const size_t, const DitherMethod, ExceptionInfo *);
|
161
|
+
DEFINE_GVL_STUB5(ProfileImage, Image *, const char *, const void *, const size_t, ExceptionInfo *);
|
162
|
+
DEFINE_GVL_STUB3(QuantizeImage, const QuantizeInfo *, Image *, ExceptionInfo *);
|
163
|
+
DEFINE_GVL_STUB4(RaiseImage, Image *, const RectangleInfo *, const MagickBooleanType, ExceptionInfo *);
|
164
|
+
DEFINE_GVL_STUB4(RandomThresholdImage, Image *, const double, const double, ExceptionInfo *);
|
165
|
+
DEFINE_GVL_STUB4(RemapImage, const QuantizeInfo *, Image *, const Image *, ExceptionInfo *);
|
166
|
+
DEFINE_GVL_STUB5(ResampleImage, const Image *, const double, const double, const FilterType, ExceptionInfo *);
|
167
|
+
DEFINE_GVL_STUB5(ResizeImage, const Image *, const size_t, const size_t, const FilterType, ExceptionInfo *);
|
168
|
+
DEFINE_GVL_STUB6(SegmentImage, Image *, const ColorspaceType, const MagickBooleanType, const double, const double, ExceptionInfo *);
|
169
|
+
DEFINE_GVL_STUB5(SelectiveBlurImage, const Image *, const double, const double, const double, ExceptionInfo *);
|
170
|
+
DEFINE_GVL_STUB3(SeparateImage, const Image *, const ChannelType, ExceptionInfo *);
|
171
|
+
DEFINE_GVL_STUB2(SeparateImages, const Image *, ExceptionInfo *);
|
172
|
+
DEFINE_GVL_STUB3(SetImageAlphaChannel, Image *, const AlphaChannelOption, ExceptionInfo *);
|
173
|
+
DEFINE_GVL_STUB2(SetImageBackgroundColor, Image *, ExceptionInfo *);
|
174
|
+
DEFINE_GVL_STUB3(SetImageDepth, Image *, const size_t, ExceptionInfo *);
|
175
|
+
DEFINE_GVL_STUB4(SetImageExtent, Image *, const size_t, const size_t, ExceptionInfo *);
|
176
|
+
DEFINE_GVL_STUB4(SetImageMask, Image *, const PixelMask, const Image *, ExceptionInfo *);
|
177
|
+
DEFINE_GVL_STUB3(SetImageStorageClass, Image *, const ClassType, ExceptionInfo *);
|
178
|
+
DEFINE_GVL_STUB5(SigmoidalContrastImage, Image *, const MagickBooleanType, const double, const double, ExceptionInfo *);
|
179
|
+
DEFINE_GVL_STUB2(SignatureImage, Image *, ExceptionInfo *);
|
180
|
+
DEFINE_GVL_STUB3(SolarizeImage, Image *, const double, ExceptionInfo *);
|
181
|
+
DEFINE_GVL_STUB5(SparseColorImage, const Image *, const SparseColorMethod, const size_t, const double *, ExceptionInfo *);
|
182
|
+
DEFINE_GVL_STUB4(SpreadImage, const Image *, const PixelInterpolateMethod, const double, ExceptionInfo *);
|
183
|
+
DEFINE_GVL_STUB4(SwirlImage, const Image *, double, const PixelInterpolateMethod, ExceptionInfo *);
|
184
|
+
DEFINE_GVL_STUB2(SyncImage, Image *, ExceptionInfo *);
|
185
|
+
DEFINE_GVL_STUB4(TintImage, const Image *, const char *, const PixelInfo *, ExceptionInfo *);
|
186
|
+
DEFINE_GVL_STUB3(TransformImageColorspace, Image *, const ColorspaceType, ExceptionInfo *);
|
187
|
+
DEFINE_GVL_STUB5(TransparentPaintImage, Image *, const PixelInfo *, const Quantum, const MagickBooleanType, ExceptionInfo *);
|
188
|
+
DEFINE_GVL_STUB6(TransparentPaintImageChroma, Image *, const PixelInfo *, const PixelInfo *, const Quantum, const MagickBooleanType, ExceptionInfo *);
|
189
|
+
DEFINE_GVL_STUB5(WaveImage, const Image *, const double, const double, const PixelInterpolateMethod, ExceptionInfo *);
|
190
|
+
DEFINE_GVL_STUB3(WhiteThresholdImage, Image *, const char *, ExceptionInfo *);
|
191
|
+
DEFINE_GVL_STUB3(WriteImage, const ImageInfo *, Image *, ExceptionInfo *);
|
192
|
+
#else
|
193
|
+
DEFINE_GVL_STUB5(AdaptiveBlurImageChannel, const Image *, const ChannelType, const double, const double, ExceptionInfo *);
|
194
|
+
DEFINE_GVL_STUB5(AdaptiveSharpenImageChannel, const Image *, const ChannelType, const double, const double, ExceptionInfo *);
|
195
|
+
DEFINE_GVL_STUB3(AddNoiseImage, const Image *, const NoiseType, ExceptionInfo *);
|
196
|
+
DEFINE_GVL_STUB4(AddNoiseImageChannel, const Image *, const ChannelType, const NoiseType, ExceptionInfo *);
|
197
|
+
DEFINE_GVL_STUB2(AutoGammaImageChannel, Image *, const ChannelType);
|
198
|
+
DEFINE_GVL_STUB2(AutoLevelImageChannel,Image *, const ChannelType);
|
199
|
+
DEFINE_GVL_STUB3(BilevelImageChannel, Image *, const ChannelType,const double);
|
200
|
+
DEFINE_GVL_STUB2(BlackThresholdImage, Image *, const char *);
|
201
|
+
DEFINE_GVL_STUB5(BlurImageChannel, const Image *, const ChannelType, const double, const double, ExceptionInfo *);
|
202
|
+
DEFINE_GVL_STUB3(BorderImage, const Image *, const RectangleInfo *, ExceptionInfo *);
|
203
|
+
DEFINE_GVL_STUB3(ClutImageChannel, Image *, const ChannelType, const Image *);
|
204
|
+
DEFINE_GVL_STUB4(ColorizeImage, const Image *, const char *, const PixelPacket, ExceptionInfo *);
|
205
|
+
DEFINE_GVL_STUB6(CompareImageChannels, Image *, const Image *, const ChannelType, const MetricType, double *, ExceptionInfo *);
|
206
|
+
DEFINE_GVL_STUB5(CompositeImage, Image *, const CompositeOperator, const Image *, const ssize_t, const ssize_t);
|
207
|
+
DEFINE_GVL_STUB6(CompositeImageChannel, Image *, const ChannelType, const CompositeOperator, const Image *, const ssize_t, const ssize_t);
|
208
|
+
DEFINE_GVL_STUB1(CompressImageColormap, Image *);
|
209
|
+
DEFINE_GVL_STUB4(ContrastStretchImageChannel, Image *, const ChannelType, const double, const double);
|
210
|
+
DEFINE_GVL_STUB4(ConvolveImage, const Image *, const size_t, const double *, ExceptionInfo *);
|
211
|
+
DEFINE_GVL_STUB5(ConvolveImageChannel, const Image *, const ChannelType, const size_t, const double *, ExceptionInfo *);
|
212
|
+
DEFINE_GVL_STUB2(CycleColormapImage, Image *, const ssize_t);
|
213
|
+
DEFINE_GVL_STUB3(DrawAffineImage, Image *, const Image *, const AffineMatrix *);
|
214
|
+
DEFINE_GVL_STUB1(EqualizeImage, Image *);
|
215
|
+
DEFINE_GVL_STUB2(EqualizeImageChannel, Image *, const ChannelType);
|
216
|
+
DEFINE_GVL_STUB5(EvaluateImageChannel, Image *, const ChannelType, const MagickEvaluateOperator, const double, ExceptionInfo *);
|
217
|
+
DEFINE_GVL_STUB7(FloodfillPaintImage, Image *, const ChannelType, const DrawInfo *, const MagickPixelPacket *, const ssize_t, const ssize_t, const MagickBooleanType);
|
218
|
+
DEFINE_GVL_STUB3(FrameImage, const Image *, const FrameInfo *, ExceptionInfo *);
|
219
|
+
DEFINE_GVL_STUB6(FunctionImageChannel, Image *, const ChannelType, const MagickFunction, const size_t, const double *, ExceptionInfo *);
|
220
|
+
DEFINE_GVL_STUB4(FxImageChannel, const Image *, const ChannelType, const char *, ExceptionInfo *);
|
221
|
+
DEFINE_GVL_STUB3(GammaImageChannel, Image *, const ChannelType, const double);
|
222
|
+
DEFINE_GVL_STUB5(GaussianBlurImageChannel, const Image *, const ChannelType, const double, const double, ExceptionInfo *);
|
223
|
+
DEFINE_GVL_STUB3(GetImageChannelDepth, const Image *, const ChannelType, ExceptionInfo *);
|
224
|
+
DEFINE_GVL_STUB6(GetImageChannelDistortion, Image *, const Image *, const ChannelType, const MetricType, double *, ExceptionInfo *);
|
225
|
+
DEFINE_GVL_STUB5(GetImageChannelExtrema, const Image *, const ChannelType, size_t *, size_t *, ExceptionInfo *);
|
226
|
+
DEFINE_GVL_STUB5(GetImageChannelMean, const Image *, const ChannelType, double *, double *, ExceptionInfo *);
|
227
|
+
DEFINE_GVL_STUB2(GetImageClipMask, const Image *, ExceptionInfo *);
|
228
|
+
DEFINE_GVL_STUB3(ImplodeImage, const Image *, const double, ExceptionInfo *);
|
229
|
+
DEFINE_GVL_STUB8(ImportImagePixels, Image *, const ssize_t, const ssize_t, const size_t,const size_t,const char *, const StorageType, const void *);
|
230
|
+
DEFINE_GVL_STUB5(IsImageSimilar, const Image *, const Image *, ssize_t *, ssize_t *, ExceptionInfo *);
|
231
|
+
DEFINE_GVL_STUB2(IsImagesEqual, Image *, const Image *);
|
232
|
+
DEFINE_GVL_STUB5(LevelColorsImageChannel, Image *, const ChannelType, const MagickPixelPacket *, const MagickPixelPacket *, const MagickBooleanType);
|
233
|
+
DEFINE_GVL_STUB2(LevelImage, Image *, const char *);
|
234
|
+
DEFINE_GVL_STUB5(LevelImageChannel, Image *, const ChannelType, const double, const double, const double);
|
235
|
+
DEFINE_GVL_STUB5(LevelizeImageChannel, Image *, const ChannelType, const double, const double, const double);
|
236
|
+
DEFINE_GVL_STUB3(LinearStretchImage, Image *, const double, const double);
|
237
|
+
DEFINE_GVL_STUB2(ModulateImage, Image *, const char *);
|
238
|
+
DEFINE_GVL_STUB6(MorphologyImageChannel, const Image *, const ChannelType, const MorphologyMethod, const ssize_t, const KernelInfo *, ExceptionInfo *);
|
239
|
+
DEFINE_GVL_STUB2(NegateImage, Image *, const MagickBooleanType);
|
240
|
+
DEFINE_GVL_STUB3(NegateImageChannel, Image *, const ChannelType, const MagickBooleanType);
|
241
|
+
DEFINE_GVL_STUB1(NormalizeImage, Image *);
|
242
|
+
DEFINE_GVL_STUB2(NormalizeImageChannel, Image *, const ChannelType);
|
243
|
+
DEFINE_GVL_STUB3(OilPaintImage, const Image *, const double, ExceptionInfo *);
|
244
|
+
DEFINE_GVL_STUB5(OpaquePaintImageChannel, Image *, const ChannelType, const MagickPixelPacket *, const MagickPixelPacket *, const MagickBooleanType);
|
245
|
+
DEFINE_GVL_STUB3(OrderedPosterizeImage, Image *, const char *, ExceptionInfo *);
|
246
|
+
DEFINE_GVL_STUB4(PolaroidImage, const Image *, const DrawInfo *, const double, ExceptionInfo *);
|
247
|
+
DEFINE_GVL_STUB3(PosterizeImage, Image *, const size_t, const MagickBooleanType);
|
248
|
+
DEFINE_GVL_STUB5(ProfileImage, Image *, const char *, const void *, const size_t, const MagickBooleanType);
|
249
|
+
DEFINE_GVL_STUB2(QuantizeImage, const QuantizeInfo *, Image *);
|
250
|
+
DEFINE_GVL_STUB3(RaiseImage, Image *, const RectangleInfo *, const MagickBooleanType);
|
251
|
+
DEFINE_GVL_STUB4(RandomThresholdImageChannel, Image *, const ChannelType, const char *, ExceptionInfo *);
|
252
|
+
DEFINE_GVL_STUB3(RemapImage, const QuantizeInfo *, Image *, const Image *);
|
253
|
+
DEFINE_GVL_STUB6(ResampleImage, const Image *, const double, const double, const FilterTypes, const double, ExceptionInfo *);
|
254
|
+
DEFINE_GVL_STUB6(ResizeImage, const Image *, const size_t, const size_t, const FilterTypes, const double, ExceptionInfo *);
|
255
|
+
DEFINE_GVL_STUB5(SegmentImage, Image *, const ColorspaceType, const MagickBooleanType, const double, const double);
|
256
|
+
DEFINE_GVL_STUB6(SelectiveBlurImageChannel, const Image *, const ChannelType, const double, const double, const double, ExceptionInfo *);
|
257
|
+
DEFINE_GVL_STUB2(SeparateImageChannel, Image *, const ChannelType);
|
258
|
+
DEFINE_GVL_STUB3(SeparateImages, const Image *, const ChannelType, ExceptionInfo *);
|
259
|
+
DEFINE_GVL_STUB2(SetImageAlphaChannel, Image *, const AlphaChannelType);
|
260
|
+
DEFINE_GVL_STUB1(SetImageBackgroundColor, Image *);
|
261
|
+
DEFINE_GVL_STUB3(SetImageChannelDepth, Image *, const ChannelType, const size_t);
|
262
|
+
DEFINE_GVL_STUB2(SetImageClipMask, Image *, const Image *);
|
263
|
+
DEFINE_GVL_STUB2(SetImageDepth, Image *, const size_t);
|
264
|
+
DEFINE_GVL_STUB3(SetImageExtent, Image *, const size_t, const size_t);
|
265
|
+
DEFINE_GVL_STUB2(SetImageMask, Image *, const Image *);
|
266
|
+
DEFINE_GVL_STUB2(SetImageStorageClass, Image *, const ClassType);
|
267
|
+
DEFINE_GVL_STUB5(SharpenImageChannel, const Image *, const ChannelType, const double, const double, ExceptionInfo *);
|
268
|
+
DEFINE_GVL_STUB5(SigmoidalContrastImageChannel, Image *, const ChannelType, const MagickBooleanType, const double, const double);
|
269
|
+
DEFINE_GVL_STUB1(SignatureImage, Image *);
|
270
|
+
DEFINE_GVL_STUB2(SolarizeImage, Image *, const double);
|
271
|
+
DEFINE_GVL_STUB6(SparseColorImage, const Image *, const ChannelType, const SparseColorMethod, const size_t, const double *, ExceptionInfo *);
|
272
|
+
DEFINE_GVL_STUB3(SpreadImage, const Image *, const double, ExceptionInfo *);
|
273
|
+
DEFINE_GVL_STUB3(SwirlImage, const Image *, double, ExceptionInfo *);
|
274
|
+
DEFINE_GVL_STUB1(SyncImage, Image *);
|
275
|
+
DEFINE_GVL_STUB4(TintImage, const Image *, const char *, const PixelPacket, ExceptionInfo *);
|
276
|
+
DEFINE_GVL_STUB2(TransformImageColorspace, Image *, const ColorspaceType);
|
277
|
+
DEFINE_GVL_STUB4(TransparentPaintImage, Image *, const MagickPixelPacket *, const Quantum, const MagickBooleanType);
|
278
|
+
DEFINE_GVL_STUB5(TransparentPaintImageChroma, Image *, const MagickPixelPacket *, const MagickPixelPacket *, const Quantum, const MagickBooleanType);
|
279
|
+
DEFINE_GVL_STUB7(UnsharpMaskImageChannel, const Image *, const ChannelType, const double, const double, const double, const double, ExceptionInfo *);
|
280
|
+
DEFINE_GVL_STUB4(WaveImage, const Image *, const double, const double, ExceptionInfo *);
|
281
|
+
DEFINE_GVL_STUB2(WhiteThresholdImage, Image *, const char *);
|
282
|
+
DEFINE_GVL_STUB2(WriteImage, const ImageInfo *, Image *);
|
283
|
+
#endif
|
284
|
+
|
285
|
+
#if defined(HAVE_GETIMAGECHANNELENTROPY)
|
286
|
+
DEFINE_GVL_STUB4(GetImageChannelEntropy, const Image *, const ChannelType, double *, ExceptionInfo *);
|
287
|
+
#endif
|
288
|
+
|
289
|
+
#if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
290
|
+
DEFINE_GVL_STUB3(RotationalBlurImage, const Image *, const double, ExceptionInfo *);
|
291
|
+
#else
|
292
|
+
DEFINE_GVL_STUB3(RadialBlurImage, const Image *, const double, ExceptionInfo *);
|
293
|
+
#endif
|
294
|
+
|
295
|
+
#if defined(IMAGEMAGICK_7)
|
296
|
+
#elif defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
297
|
+
DEFINE_GVL_STUB4(RotationalBlurImageChannel, const Image *, const ChannelType, const double, ExceptionInfo *);
|
298
|
+
#else
|
299
|
+
DEFINE_GVL_STUB4(RadialBlurImageChannel, const Image *, const ChannelType, const double, ExceptionInfo *);
|
300
|
+
#endif
|
301
|
+
|
73
302
|
/**
|
74
303
|
* Returns the alpha value from the hash.
|
75
304
|
*
|
@@ -100,6 +329,9 @@ get_named_alpha_value(VALUE hash)
|
|
100
329
|
}
|
101
330
|
|
102
331
|
|
332
|
+
// aliases for common use of structure types; AdaptiveBlurImage, AdaptiveSharpenImage
|
333
|
+
typedef GVL_STRUCT_TYPE(AdaptiveBlurImage) GVL_STRUCT_TYPE(adaptive_method);
|
334
|
+
|
103
335
|
/**
|
104
336
|
* Call Adaptive(Blur|Sharpen)Image.
|
105
337
|
*
|
@@ -112,8 +344,7 @@ get_named_alpha_value(VALUE hash)
|
|
112
344
|
* @return a new image
|
113
345
|
*/
|
114
346
|
static VALUE
|
115
|
-
adaptive_method(int argc, VALUE *argv, VALUE self,
|
116
|
-
Image *fp(const Image *, const double, const double, ExceptionInfo *))
|
347
|
+
adaptive_method(int argc, VALUE *argv, VALUE self, gvl_function_t fp)
|
117
348
|
{
|
118
349
|
Image *image, *new_image;
|
119
350
|
double radius = 0.0;
|
@@ -137,7 +368,8 @@ adaptive_method(int argc, VALUE *argv, VALUE self,
|
|
137
368
|
|
138
369
|
exception = AcquireExceptionInfo();
|
139
370
|
|
140
|
-
|
371
|
+
GVL_STRUCT_TYPE(adaptive_method) args = { image, radius, sigma, exception };
|
372
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
141
373
|
rm_check_exception(exception, new_image, DestroyOnError);
|
142
374
|
DestroyExceptionInfo(exception);
|
143
375
|
|
@@ -145,6 +377,12 @@ adaptive_method(int argc, VALUE *argv, VALUE self,
|
|
145
377
|
}
|
146
378
|
|
147
379
|
|
380
|
+
// aliases for common use of structure types; AdaptiveBlurImage, AdaptiveSharpenImage, AdaptiveBlurImageChannel, AdaptiveSharpenImageChannel
|
381
|
+
#if defined(IMAGEMAGICK_7)
|
382
|
+
typedef GVL_STRUCT_TYPE(AdaptiveBlurImage) GVL_STRUCT_TYPE(adaptive_channel_method);
|
383
|
+
#else
|
384
|
+
typedef GVL_STRUCT_TYPE(AdaptiveBlurImageChannel) GVL_STRUCT_TYPE(adaptive_channel_method);
|
385
|
+
#endif
|
148
386
|
|
149
387
|
/**
|
150
388
|
* Call Adaptive(Blur|Sharpen)ImageChannel.
|
@@ -158,7 +396,7 @@ adaptive_method(int argc, VALUE *argv, VALUE self,
|
|
158
396
|
* @return a new image
|
159
397
|
*/
|
160
398
|
static VALUE
|
161
|
-
adaptive_channel_method(int argc, VALUE *argv, VALUE self,
|
399
|
+
adaptive_channel_method(int argc, VALUE *argv, VALUE self, gvl_function_t fp)
|
162
400
|
{
|
163
401
|
Image *image, *new_image;
|
164
402
|
double radius = 0.0;
|
@@ -186,11 +424,13 @@ adaptive_channel_method(int argc, VALUE *argv, VALUE self, channel_method_t fp)
|
|
186
424
|
|
187
425
|
#if defined(IMAGEMAGICK_7)
|
188
426
|
BEGIN_CHANNEL_MASK(image, channels);
|
189
|
-
|
427
|
+
GVL_STRUCT_TYPE(adaptive_channel_method) args = { image, radius, sigma, exception };
|
428
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
190
429
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
191
430
|
END_CHANNEL_MASK(image);
|
192
431
|
#else
|
193
|
-
|
432
|
+
GVL_STRUCT_TYPE(adaptive_channel_method) args = { image, channels, radius, sigma, exception };
|
433
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
194
434
|
#endif
|
195
435
|
|
196
436
|
rm_check_exception(exception, new_image, DestroyOnError);
|
@@ -214,11 +454,10 @@ adaptive_channel_method(int argc, VALUE *argv, VALUE self, channel_method_t fp)
|
|
214
454
|
VALUE
|
215
455
|
Image_adaptive_blur(int argc, VALUE *argv, VALUE self)
|
216
456
|
{
|
217
|
-
return adaptive_method(argc, argv, self, AdaptiveBlurImage);
|
457
|
+
return adaptive_method(argc, argv, self, GVL_FUNC(AdaptiveBlurImage));
|
218
458
|
}
|
219
459
|
|
220
460
|
|
221
|
-
|
222
461
|
/**
|
223
462
|
* The same as {Magick::Image#adaptive_blur} except only the specified channels are blurred.
|
224
463
|
*
|
@@ -238,9 +477,9 @@ VALUE
|
|
238
477
|
Image_adaptive_blur_channel(int argc, VALUE *argv, VALUE self)
|
239
478
|
{
|
240
479
|
#if defined(IMAGEMAGICK_7)
|
241
|
-
return adaptive_channel_method(argc, argv, self, AdaptiveBlurImage);
|
480
|
+
return adaptive_channel_method(argc, argv, self, GVL_FUNC(AdaptiveBlurImage));
|
242
481
|
#else
|
243
|
-
return adaptive_channel_method(argc, argv, self, AdaptiveBlurImageChannel);
|
482
|
+
return adaptive_channel_method(argc, argv, self, GVL_FUNC(AdaptiveBlurImageChannel));
|
244
483
|
#endif
|
245
484
|
}
|
246
485
|
|
@@ -296,7 +535,8 @@ Image_adaptive_resize(int argc, VALUE *argv, VALUE self)
|
|
296
535
|
}
|
297
536
|
|
298
537
|
exception = AcquireExceptionInfo();
|
299
|
-
|
538
|
+
GVL_STRUCT_TYPE(AdaptiveResizeImage) args = { image, columns, rows, exception };
|
539
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(AdaptiveResizeImage), &args);
|
300
540
|
rm_check_exception(exception, new_image, DestroyOnError);
|
301
541
|
DestroyExceptionInfo(exception);
|
302
542
|
|
@@ -304,7 +544,6 @@ Image_adaptive_resize(int argc, VALUE *argv, VALUE self)
|
|
304
544
|
}
|
305
545
|
|
306
546
|
|
307
|
-
|
308
547
|
/**
|
309
548
|
* Adaptively sharpens the image by sharpening more intensely near image edges and less intensely
|
310
549
|
* far from edges.
|
@@ -323,11 +562,10 @@ Image_adaptive_resize(int argc, VALUE *argv, VALUE self)
|
|
323
562
|
VALUE
|
324
563
|
Image_adaptive_sharpen(int argc, VALUE *argv, VALUE self)
|
325
564
|
{
|
326
|
-
return adaptive_method(argc, argv, self, AdaptiveSharpenImage);
|
565
|
+
return adaptive_method(argc, argv, self, GVL_FUNC(AdaptiveSharpenImage));
|
327
566
|
}
|
328
567
|
|
329
568
|
|
330
|
-
|
331
569
|
/**
|
332
570
|
* The same as {Magick::Image#adaptive_sharpen} except only the specified channels are sharpened.
|
333
571
|
*
|
@@ -347,14 +585,13 @@ VALUE
|
|
347
585
|
Image_adaptive_sharpen_channel(int argc, VALUE *argv, VALUE self)
|
348
586
|
{
|
349
587
|
#if defined(IMAGEMAGICK_7)
|
350
|
-
return adaptive_channel_method(argc, argv, self, AdaptiveSharpenImage);
|
588
|
+
return adaptive_channel_method(argc, argv, self, GVL_FUNC(AdaptiveSharpenImage));
|
351
589
|
#else
|
352
|
-
return adaptive_channel_method(argc, argv, self, AdaptiveSharpenImageChannel);
|
590
|
+
return adaptive_channel_method(argc, argv, self, GVL_FUNC(AdaptiveSharpenImageChannel));
|
353
591
|
#endif
|
354
592
|
}
|
355
593
|
|
356
594
|
|
357
|
-
|
358
595
|
/**
|
359
596
|
* Selects an individual threshold for each pixel based on the range of intensity values in its
|
360
597
|
* local neighborhood. This allows for thresholding of an image whose global intensity histogram
|
@@ -391,7 +628,8 @@ Image_adaptive_threshold(int argc, VALUE *argv, VALUE self)
|
|
391
628
|
}
|
392
629
|
|
393
630
|
exception = AcquireExceptionInfo();
|
394
|
-
|
631
|
+
GVL_STRUCT_TYPE(AdaptiveThresholdImage) args = { image, width, height, offset, exception };
|
632
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(AdaptiveThresholdImage), &args);
|
395
633
|
rm_check_exception(exception, new_image, DestroyOnError);
|
396
634
|
DestroyExceptionInfo(exception);
|
397
635
|
|
@@ -430,17 +668,21 @@ Image_add_compose_mask(VALUE self, VALUE mask)
|
|
430
668
|
clip_mask = rm_clone_image(mask_image);
|
431
669
|
|
432
670
|
exception = AcquireExceptionInfo();
|
433
|
-
NegateImage
|
671
|
+
GVL_STRUCT_TYPE(NegateImage) args_NegateImage = { clip_mask, MagickFalse, exception };
|
672
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NegateImage), &args_NegateImage);
|
434
673
|
rm_check_exception(exception, clip_mask, DestroyOnError);
|
435
|
-
SetImageMask
|
674
|
+
GVL_STRUCT_TYPE(SetImageMask) args_SetImageMask = { image, CompositePixelMask, clip_mask, exception };
|
675
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageMask), &args_SetImageMask);
|
436
676
|
DestroyImage(clip_mask);
|
437
677
|
CHECK_EXCEPTION();
|
438
678
|
DestroyExceptionInfo(exception);
|
439
679
|
#else
|
440
680
|
// Delete any previously-existing mask image.
|
441
681
|
// Store a clone of the new mask image.
|
442
|
-
SetImageMask
|
443
|
-
|
682
|
+
GVL_STRUCT_TYPE(SetImageMask) args_SetImageMask = { image, mask_image };
|
683
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageMask), &args_SetImageMask);
|
684
|
+
GVL_STRUCT_TYPE(NegateImage) args_NegateImage = { image->mask, MagickFalse };
|
685
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NegateImage), &args_NegateImage);
|
444
686
|
|
445
687
|
// Since both Set and GetImageMask clone the mask image I don't see any
|
446
688
|
// way to negate the mask without referencing it directly. Sigh.
|
@@ -469,10 +711,11 @@ Image_add_noise(VALUE self, VALUE noise)
|
|
469
711
|
|
470
712
|
exception = AcquireExceptionInfo();
|
471
713
|
#if defined(IMAGEMAGICK_7)
|
472
|
-
|
714
|
+
GVL_STRUCT_TYPE(AddNoiseImage) args = { image, noise_type, 1.0, exception };
|
473
715
|
#else
|
474
|
-
|
716
|
+
GVL_STRUCT_TYPE(AddNoiseImage) args = { image, noise_type, exception };
|
475
717
|
#endif
|
718
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(AddNoiseImage), &args);
|
476
719
|
rm_check_exception(exception, new_image, DestroyOnError);
|
477
720
|
DestroyExceptionInfo(exception);
|
478
721
|
|
@@ -519,10 +762,12 @@ Image_add_noise_channel(int argc, VALUE *argv, VALUE self)
|
|
519
762
|
exception = AcquireExceptionInfo();
|
520
763
|
#if defined(IMAGEMAGICK_7)
|
521
764
|
BEGIN_CHANNEL_MASK(image, channels);
|
522
|
-
|
765
|
+
GVL_STRUCT_TYPE(AddNoiseImage) args = { image, noise_type, 1.0, exception };
|
766
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(AddNoiseImage), &args);
|
523
767
|
END_CHANNEL_MASK(new_image);
|
524
768
|
#else
|
525
|
-
|
769
|
+
GVL_STRUCT_TYPE(AddNoiseImageChannel) args = { image, channels, noise_type, exception };
|
770
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(AddNoiseImageChannel), &args);
|
526
771
|
#endif
|
527
772
|
rm_check_exception(exception, new_image, DestroyOnError);
|
528
773
|
DestroyExceptionInfo(exception);
|
@@ -580,10 +825,12 @@ Image_add_profile(VALUE self, VALUE name)
|
|
580
825
|
if (profile)
|
581
826
|
{
|
582
827
|
#if defined(IMAGEMAGICK_7)
|
583
|
-
ProfileImage
|
828
|
+
GVL_STRUCT_TYPE(ProfileImage) args = { image, profile_name, GetStringInfoDatum(profile), GetStringInfoLength(profile), exception };
|
829
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ProfileImage), &args);
|
584
830
|
if (rm_should_raise_exception(exception, RetainExceptionRetention))
|
585
831
|
#else
|
586
|
-
ProfileImage
|
832
|
+
GVL_STRUCT_TYPE(ProfileImage) args = { image, profile_name, GetStringInfoDatum(profile), GetStringInfoLength(profile), MagickFalse };
|
833
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ProfileImage), &args);
|
587
834
|
if (rm_should_raise_exception(&image->exception, RetainExceptionRetention))
|
588
835
|
#endif
|
589
836
|
{
|
@@ -654,11 +901,13 @@ Image_alpha(int argc, VALUE *argv, VALUE self)
|
|
654
901
|
|
655
902
|
#if defined(IMAGEMAGICK_7)
|
656
903
|
exception = AcquireExceptionInfo();
|
657
|
-
SetImageAlphaChannel
|
904
|
+
GVL_STRUCT_TYPE(SetImageAlphaChannel) args = { image, alpha, exception };
|
905
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageAlphaChannel), &args);
|
658
906
|
CHECK_EXCEPTION();
|
659
907
|
DestroyExceptionInfo(exception);
|
660
908
|
#else
|
661
|
-
SetImageAlphaChannel
|
909
|
+
GVL_STRUCT_TYPE(SetImageAlphaChannel) args = { image, alpha };
|
910
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageAlphaChannel), &args);
|
662
911
|
rm_check_image_exception(image, RetainOnError);
|
663
912
|
#endif
|
664
913
|
|
@@ -703,7 +952,8 @@ Image_affine_transform(VALUE self, VALUE affine)
|
|
703
952
|
Export_AffineMatrix(&matrix, affine);
|
704
953
|
|
705
954
|
exception = AcquireExceptionInfo();
|
706
|
-
|
955
|
+
GVL_STRUCT_TYPE(AffineTransformImage) args = { image, &matrix, exception };
|
956
|
+
new_image = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(AffineTransformImage), &args);
|
707
957
|
rm_check_exception(exception, new_image, DestroyOnError);
|
708
958
|
DestroyExceptionInfo(exception);
|
709
959
|
|
@@ -825,6 +1075,9 @@ Image_aset(VALUE self, VALUE key_arg, VALUE attr_arg)
|
|
825
1075
|
}
|
826
1076
|
|
827
1077
|
|
1078
|
+
// aliases for common use of structure types; TransposeImage, TransverseImage
|
1079
|
+
typedef GVL_STRUCT_TYPE(TransposeImage) GVL_STRUCT_TYPE(crisscross);
|
1080
|
+
|
828
1081
|
/**
|
829
1082
|
* Handle #transverse, #transform methods.
|
830
1083
|
*
|
@@ -836,15 +1089,16 @@ Image_aset(VALUE self, VALUE key_arg, VALUE attr_arg)
|
|
836
1089
|
* @return self if bang, otherwise a new image
|
837
1090
|
*/
|
838
1091
|
static VALUE
|
839
|
-
crisscross(int bang, VALUE self,
|
1092
|
+
crisscross(int bang, VALUE self, gvl_function_t fp)
|
840
1093
|
{
|
841
1094
|
Image *image, *new_image;
|
842
1095
|
ExceptionInfo *exception;
|
843
1096
|
|
844
|
-
|
1097
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
845
1098
|
exception = AcquireExceptionInfo();
|
846
1099
|
|
847
|
-
|
1100
|
+
GVL_STRUCT_TYPE(crisscross) args = { image, exception };
|
1101
|
+
new_image = CALL_FUNC_WITHOUT_GVL(fp, &args);
|
848
1102
|
rm_check_exception(exception, new_image, DestroyOnError);
|
849
1103
|
DestroyExceptionInfo(exception);
|
850
1104
|
|
@@ -861,6 +1115,12 @@ crisscross(int bang, VALUE self, Image *fp(const Image *, ExceptionInfo *))
|
|
861
1115
|
}
|
862
1116
|
|
863
1117
|
|
1118
|
+
// aliases for common use of structure types; AutoGammaImage, AutoLevelImage, AutoGammaImageChannel, AutoLevelImageChannel
|
1119
|
+
#if defined(IMAGEMAGICK_7)
|
1120
|
+
typedef GVL_STRUCT_TYPE(AutoGammaImage) GVL_STRUCT_TYPE(auto_channel);
|
1121
|
+
#else
|
1122
|
+
typedef GVL_STRUCT_TYPE(AutoGammaImageChannel) GVL_STRUCT_TYPE(auto_channel);
|
1123
|
+
#endif
|
864
1124
|
|
865
1125
|
/**
|
866
1126
|
* Handle #auto_gamma_channel, #auto_level_channel methods.
|
@@ -874,7 +1134,7 @@ crisscross(int bang, VALUE self, Image *fp(const Image *, ExceptionInfo *))
|
|
874
1134
|
* @return a new image
|
875
1135
|
*/
|
876
1136
|
static VALUE
|
877
|
-
auto_channel(int argc, VALUE *argv, VALUE self,
|
1137
|
+
auto_channel(int argc, VALUE *argv, VALUE self, gvl_function_t fp)
|
878
1138
|
{
|
879
1139
|
Image *image, *new_image;
|
880
1140
|
ChannelType channels;
|
@@ -895,12 +1155,14 @@ auto_channel(int argc, VALUE *argv, VALUE self, auto_channel_t fp)
|
|
895
1155
|
#if defined(IMAGEMAGICK_7)
|
896
1156
|
exception = AcquireExceptionInfo();
|
897
1157
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
898
|
-
(
|
1158
|
+
GVL_STRUCT_TYPE(auto_channel) args = { new_image, exception };
|
1159
|
+
CALL_FUNC_WITHOUT_GVL(fp, &args);
|
899
1160
|
END_CHANNEL_MASK(new_image);
|
900
1161
|
rm_check_exception(exception, new_image, DestroyOnError);
|
901
1162
|
DestroyExceptionInfo(exception);
|
902
1163
|
#else
|
903
|
-
(
|
1164
|
+
GVL_STRUCT_TYPE(auto_channel) args = { new_image, channels };
|
1165
|
+
CALL_FUNC_WITHOUT_GVL(fp, &args);
|
904
1166
|
rm_check_image_exception(new_image, DestroyOnError);
|
905
1167
|
#endif
|
906
1168
|
|
@@ -923,9 +1185,9 @@ VALUE
|
|
923
1185
|
Image_auto_gamma_channel(int argc, VALUE *argv, VALUE self)
|
924
1186
|
{
|
925
1187
|
#if defined(IMAGEMAGICK_7)
|
926
|
-
return auto_channel(argc, argv, self, AutoGammaImage);
|
1188
|
+
return auto_channel(argc, argv, self, GVL_FUNC(AutoGammaImage));
|
927
1189
|
#else
|
928
|
-
return auto_channel(argc, argv, self, AutoGammaImageChannel);
|
1190
|
+
return auto_channel(argc, argv, self, GVL_FUNC(AutoGammaImageChannel));
|
929
1191
|
#endif
|
930
1192
|
}
|
931
1193
|
|
@@ -945,9 +1207,9 @@ VALUE
|
|
945
1207
|
Image_auto_level_channel(int argc, VALUE *argv, VALUE self)
|
946
1208
|
{
|
947
1209
|
#if defined(IMAGEMAGICK_7)
|
948
|
-
return auto_channel(argc, argv, self, AutoLevelImage);
|
1210
|
+
return auto_channel(argc, argv, self, GVL_FUNC(AutoLevelImage));
|
949
1211
|
#else
|
950
|
-
return auto_channel(argc, argv, self, AutoLevelImageChannel);
|
1212
|
+
return auto_channel(argc, argv, self, GVL_FUNC(AutoLevelImageChannel));
|
951
1213
|
#endif
|
952
1214
|
}
|
953
1215
|
|
@@ -970,12 +1232,12 @@ auto_orient(int bang, VALUE self)
|
|
970
1232
|
VALUE new_image;
|
971
1233
|
VALUE degrees[1];
|
972
1234
|
|
973
|
-
|
1235
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
974
1236
|
|
975
1237
|
switch (image->orientation)
|
976
1238
|
{
|
977
1239
|
case TopRightOrientation:
|
978
|
-
new_image = flipflop(bang, self, FlopImage);
|
1240
|
+
new_image = flipflop(bang, self, GVL_FUNC(FlopImage));
|
979
1241
|
break;
|
980
1242
|
|
981
1243
|
case BottomRightOrientation:
|
@@ -984,11 +1246,11 @@ auto_orient(int bang, VALUE self)
|
|
984
1246
|
break;
|
985
1247
|
|
986
1248
|
case BottomLeftOrientation:
|
987
|
-
new_image = flipflop(bang, self, FlipImage);
|
1249
|
+
new_image = flipflop(bang, self, GVL_FUNC(FlipImage));
|
988
1250
|
break;
|
989
1251
|
|
990
1252
|
case LeftTopOrientation:
|
991
|
-
new_image = crisscross(bang, self, TransposeImage);
|
1253
|
+
new_image = crisscross(bang, self, GVL_FUNC(TransposeImage));
|
992
1254
|
break;
|
993
1255
|
|
994
1256
|
case RightTopOrientation:
|
@@ -997,7 +1259,7 @@ auto_orient(int bang, VALUE self)
|
|
997
1259
|
break;
|
998
1260
|
|
999
1261
|
case RightBottomOrientation:
|
1000
|
-
new_image = crisscross(bang, self, TransverseImage);
|
1262
|
+
new_image = crisscross(bang, self, GVL_FUNC(TransverseImage));
|
1001
1263
|
break;
|
1002
1264
|
|
1003
1265
|
case LeftBottomOrientation:
|
@@ -1011,7 +1273,7 @@ auto_orient(int bang, VALUE self)
|
|
1011
1273
|
}
|
1012
1274
|
|
1013
1275
|
|
1014
|
-
|
1276
|
+
TypedData_Get_Struct(new_image, Image, &rm_image_data_type, image);
|
1015
1277
|
image->orientation = TopLeftOrientation;
|
1016
1278
|
|
1017
1279
|
RB_GC_GUARD(new_image);
|
@@ -1230,12 +1492,14 @@ Image_bilevel_channel(int argc, VALUE *argv, VALUE self)
|
|
1230
1492
|
#if defined(IMAGEMAGICK_7)
|
1231
1493
|
exception = AcquireExceptionInfo();
|
1232
1494
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
1233
|
-
BilevelImage
|
1495
|
+
GVL_STRUCT_TYPE(BilevelImage) args = { new_image, threshold, exception };
|
1496
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BilevelImage), &args);
|
1234
1497
|
END_CHANNEL_MASK(new_image);
|
1235
1498
|
rm_check_exception(exception, new_image, DestroyOnError);
|
1236
1499
|
DestroyExceptionInfo(exception);
|
1237
1500
|
#else
|
1238
|
-
BilevelImageChannel
|
1501
|
+
GVL_STRUCT_TYPE(BilevelImageChannel) args = { new_image, channels, threshold };
|
1502
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BilevelImageChannel), &args);
|
1239
1503
|
rm_check_image_exception(new_image, DestroyOnError);
|
1240
1504
|
#endif
|
1241
1505
|
|
@@ -1322,7 +1586,7 @@ Image_black_point_compensation_eq(VALUE self, VALUE arg)
|
|
1322
1586
|
VALUE
|
1323
1587
|
Image_black_threshold(int argc, VALUE *argv, VALUE self)
|
1324
1588
|
{
|
1325
|
-
return threshold_image(argc, argv, self, BlackThresholdImage);
|
1589
|
+
return threshold_image(argc, argv, self, GVL_FUNC(BlackThresholdImage));
|
1326
1590
|
}
|
1327
1591
|
|
1328
1592
|
|
@@ -1632,11 +1896,13 @@ special_composite(Image *image, Image *overlay, double image_pct, double overlay
|
|
1632
1896
|
|
1633
1897
|
#if defined(IMAGEMAGICK_7)
|
1634
1898
|
exception = AcquireExceptionInfo();
|
1635
|
-
CompositeImage
|
1899
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { new_image, overlay, op, MagickTrue, x_off, y_off, exception };
|
1900
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
1636
1901
|
rm_check_exception(exception, new_image, DestroyOnError);
|
1637
1902
|
DestroyExceptionInfo(exception);
|
1638
1903
|
#else
|
1639
|
-
CompositeImage
|
1904
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { new_image, op, overlay, x_off, y_off };
|
1905
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
1640
1906
|
|
1641
1907
|
rm_check_image_exception(new_image, DestroyOnError);
|
1642
1908
|
#endif
|
@@ -1743,7 +2009,8 @@ Image_blue_shift(int argc, VALUE *argv, VALUE self)
|
|
1743
2009
|
|
1744
2010
|
|
1745
2011
|
exception = AcquireExceptionInfo();
|
1746
|
-
|
2012
|
+
GVL_STRUCT_TYPE(BlueShiftImage) args = { image, factor, exception };
|
2013
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlueShiftImage), &args);
|
1747
2014
|
CHECK_EXCEPTION();
|
1748
2015
|
DestroyExceptionInfo(exception);
|
1749
2016
|
|
@@ -1795,11 +2062,13 @@ Image_blur_channel(int argc, VALUE *argv, VALUE self)
|
|
1795
2062
|
exception = AcquireExceptionInfo();
|
1796
2063
|
#if defined(IMAGEMAGICK_7)
|
1797
2064
|
BEGIN_CHANNEL_MASK(image, channels);
|
1798
|
-
|
2065
|
+
GVL_STRUCT_TYPE(BlurImage) args = { image, radius, sigma, exception };
|
2066
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlurImage), &args);
|
1799
2067
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
1800
2068
|
END_CHANNEL_MASK(image);
|
1801
2069
|
#else
|
1802
|
-
|
2070
|
+
GVL_STRUCT_TYPE(BlurImageChannel) args = { image, channels, radius, sigma, exception };
|
2071
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlurImageChannel), &args);
|
1803
2072
|
#endif
|
1804
2073
|
rm_check_exception(exception, new_image, DestroyOnError);
|
1805
2074
|
DestroyExceptionInfo(exception);
|
@@ -1819,7 +2088,7 @@ Image_blur_channel(int argc, VALUE *argv, VALUE self)
|
|
1819
2088
|
VALUE
|
1820
2089
|
Image_blur_image(int argc, VALUE *argv, VALUE self)
|
1821
2090
|
{
|
1822
|
-
return effect_image(self, argc, argv, BlurImage);
|
2091
|
+
return effect_image(self, argc, argv, GVL_FUNC(BlurImage));
|
1823
2092
|
}
|
1824
2093
|
|
1825
2094
|
|
@@ -1846,7 +2115,7 @@ border(int bang, VALUE self, VALUE width, VALUE height, VALUE color)
|
|
1846
2115
|
ExceptionInfo *exception;
|
1847
2116
|
RectangleInfo rect;
|
1848
2117
|
|
1849
|
-
|
2118
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
1850
2119
|
|
1851
2120
|
memset(&rect, 0, sizeof(rect));
|
1852
2121
|
rect.width = NUM2UINT(width);
|
@@ -1858,10 +2127,11 @@ border(int bang, VALUE self, VALUE width, VALUE height, VALUE color)
|
|
1858
2127
|
|
1859
2128
|
exception = AcquireExceptionInfo();
|
1860
2129
|
#if defined(IMAGEMAGICK_7)
|
1861
|
-
|
2130
|
+
GVL_STRUCT_TYPE(BorderImage) args = { image, &rect, image->compose, exception };
|
1862
2131
|
#else
|
1863
|
-
|
2132
|
+
GVL_STRUCT_TYPE(BorderImage) args = { image, &rect, exception };
|
1864
2133
|
#endif
|
2134
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BorderImage), &args);
|
1865
2135
|
rm_check_exception(exception, new_image, DestroyOnError);
|
1866
2136
|
DestroyExceptionInfo(exception);
|
1867
2137
|
|
@@ -1990,12 +2260,12 @@ Image_bounding_box(VALUE self)
|
|
1990
2260
|
* importantly, you can capture menus or other popups that are independent windows but appear
|
1991
2261
|
* over the specified window.
|
1992
2262
|
* @param borders [Boolean] If true, include the border in the image.
|
1993
|
-
* @yield []
|
2263
|
+
* @yield [Magick::Image::Info]
|
1994
2264
|
*
|
1995
2265
|
* @return [Magick::Image] a new image
|
1996
2266
|
* @example
|
1997
|
-
* img = Image.capture {
|
1998
|
-
*
|
2267
|
+
* img = Image.capture { |options|
|
2268
|
+
* options.filename = "root"
|
1999
2269
|
* }
|
2000
2270
|
*/
|
2001
2271
|
VALUE
|
@@ -2035,7 +2305,7 @@ Image_capture(int argc, VALUE *argv, VALUE self ATTRIBUTE_UNUSED)
|
|
2035
2305
|
// Set info->server_name to the server name
|
2036
2306
|
// Also info->colorspace, depth, dither, interlace, type
|
2037
2307
|
info_obj = rm_info_new();
|
2038
|
-
|
2308
|
+
TypedData_Get_Struct(info_obj, Info, &rm_info_data_type, image_info);
|
2039
2309
|
|
2040
2310
|
// If an error occurs, IM will call our error handler and we raise an exception.
|
2041
2311
|
#if defined(IMAGEMAGICK_7)
|
@@ -2146,12 +2416,14 @@ Image_channel(VALUE self, VALUE channel_arg)
|
|
2146
2416
|
|
2147
2417
|
#if defined(IMAGEMAGICK_7)
|
2148
2418
|
exception = AcquireExceptionInfo();
|
2149
|
-
|
2419
|
+
GVL_STRUCT_TYPE(SeparateImage) args = { image, channel, exception };
|
2420
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SeparateImage), &args);
|
2150
2421
|
rm_check_exception(exception, new_image, DestroyOnError);
|
2151
2422
|
DestroyExceptionInfo(exception);
|
2152
2423
|
#else
|
2153
2424
|
new_image = rm_clone_image(image);
|
2154
|
-
SeparateImageChannel
|
2425
|
+
GVL_STRUCT_TYPE(SeparateImageChannel) args = { new_image, channel };
|
2426
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SeparateImageChannel), &args);
|
2155
2427
|
|
2156
2428
|
rm_check_image_exception(new_image, DestroyOnError);
|
2157
2429
|
#endif
|
@@ -2176,7 +2448,7 @@ Image_channel_depth(int argc, VALUE *argv, VALUE self)
|
|
2176
2448
|
{
|
2177
2449
|
Image *image;
|
2178
2450
|
ChannelType channels;
|
2179
|
-
|
2451
|
+
size_t channel_depth;
|
2180
2452
|
ExceptionInfo *exception;
|
2181
2453
|
|
2182
2454
|
image = rm_check_destroyed(self);
|
@@ -2192,10 +2464,12 @@ Image_channel_depth(int argc, VALUE *argv, VALUE self)
|
|
2192
2464
|
|
2193
2465
|
#if defined(IMAGEMAGICK_7)
|
2194
2466
|
BEGIN_CHANNEL_MASK(image, channels);
|
2195
|
-
|
2467
|
+
GVL_STRUCT_TYPE(GetImageDepth) args = { image, exception };
|
2468
|
+
channel_depth = (size_t)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageDepth), &args);
|
2196
2469
|
END_CHANNEL_MASK(image);
|
2197
2470
|
#else
|
2198
|
-
|
2471
|
+
GVL_STRUCT_TYPE(GetImageChannelDepth) args = { image, channels, exception };
|
2472
|
+
channel_depth = (size_t)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageChannelDepth), &args);
|
2199
2473
|
#endif
|
2200
2474
|
CHECK_EXCEPTION();
|
2201
2475
|
|
@@ -2239,10 +2513,12 @@ Image_channel_extrema(int argc, VALUE *argv, VALUE self)
|
|
2239
2513
|
exception = AcquireExceptionInfo();
|
2240
2514
|
#if defined(IMAGEMAGICK_7)
|
2241
2515
|
BEGIN_CHANNEL_MASK(image, channels);
|
2242
|
-
GetImageExtrema
|
2516
|
+
GVL_STRUCT_TYPE(GetImageExtrema) args = { image, &min, &max, exception };
|
2517
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageExtrema), &args);
|
2243
2518
|
END_CHANNEL_MASK(image);
|
2244
2519
|
#else
|
2245
|
-
GetImageChannelExtrema
|
2520
|
+
GVL_STRUCT_TYPE(GetImageChannelExtrema) args = { image, channels, &min, &max, exception };
|
2521
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageChannelExtrema), &args);
|
2246
2522
|
#endif
|
2247
2523
|
CHECK_EXCEPTION();
|
2248
2524
|
|
@@ -2292,10 +2568,12 @@ Image_channel_mean(int argc, VALUE *argv, VALUE self)
|
|
2292
2568
|
exception = AcquireExceptionInfo();
|
2293
2569
|
#if defined(IMAGEMAGICK_7)
|
2294
2570
|
BEGIN_CHANNEL_MASK(image, channels);
|
2295
|
-
GetImageMean
|
2571
|
+
GVL_STRUCT_TYPE(GetImageMean) args = { image, &mean, &stddev, exception };
|
2572
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageMean), &args);
|
2296
2573
|
END_CHANNEL_MASK(image);
|
2297
2574
|
#else
|
2298
|
-
GetImageChannelMean
|
2575
|
+
GVL_STRUCT_TYPE(GetImageChannelMean) args = { image, channels, &mean, &stddev, exception };
|
2576
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageChannelMean), &args);
|
2299
2577
|
#endif
|
2300
2578
|
CHECK_EXCEPTION();
|
2301
2579
|
|
@@ -2344,10 +2622,12 @@ Image_channel_entropy(int argc, VALUE *argv, VALUE self)
|
|
2344
2622
|
exception = AcquireExceptionInfo();
|
2345
2623
|
#if defined(IMAGEMAGICK_7)
|
2346
2624
|
BEGIN_CHANNEL_MASK(image, channels);
|
2347
|
-
GetImageEntropy
|
2625
|
+
GVL_STRUCT_TYPE(GetImageEntropy) args = { image, &entropy, exception };
|
2626
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageEntropy), &args);
|
2348
2627
|
END_CHANNEL_MASK(image);
|
2349
2628
|
#else
|
2350
|
-
GetImageChannelEntropy
|
2629
|
+
GVL_STRUCT_TYPE(GetImageChannelEntropy) args = { image, channels, &entropy, exception };
|
2630
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageChannelEntropy), &args);
|
2351
2631
|
#endif
|
2352
2632
|
CHECK_EXCEPTION();
|
2353
2633
|
|
@@ -2379,7 +2659,7 @@ Image_channel_entropy(int argc ATTRIBUTE_UNUSED, VALUE *argv ATTRIBUTE_UNUSED, V
|
|
2379
2659
|
VALUE
|
2380
2660
|
Image_charcoal(int argc, VALUE *argv, VALUE self)
|
2381
2661
|
{
|
2382
|
-
return effect_image(self, argc, argv, CharcoalImage);
|
2662
|
+
return effect_image(self, argc, argv, GVL_FUNC(CharcoalImage));
|
2383
2663
|
}
|
2384
2664
|
|
2385
2665
|
|
@@ -2410,7 +2690,7 @@ VALUE
|
|
2410
2690
|
Image_chop(VALUE self, VALUE x, VALUE y, VALUE width, VALUE height)
|
2411
2691
|
{
|
2412
2692
|
rm_check_destroyed(self);
|
2413
|
-
return xform_image(False, self, x, y, width, height, ChopImage);
|
2693
|
+
return xform_image(False, self, x, y, width, height, GVL_FUNC(ChopImage));
|
2414
2694
|
}
|
2415
2695
|
|
2416
2696
|
|
@@ -2515,17 +2795,19 @@ Image_clut_channel(int argc, VALUE *argv, VALUE self)
|
|
2515
2795
|
rb_raise(rb_eArgError, "wrong number of arguments (%d for 1 or more)", argc);
|
2516
2796
|
}
|
2517
2797
|
|
2518
|
-
|
2798
|
+
TypedData_Get_Struct(argv[0], Image, &rm_image_data_type, clut);
|
2519
2799
|
|
2520
2800
|
#if defined(IMAGEMAGICK_7)
|
2521
2801
|
exception = AcquireExceptionInfo();
|
2522
2802
|
BEGIN_CHANNEL_MASK(image, channels);
|
2523
|
-
|
2803
|
+
GVL_STRUCT_TYPE(ClutImage) args = { image, clut, image->interpolate, exception };
|
2804
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ClutImage), &args);
|
2524
2805
|
END_CHANNEL_MASK(image);
|
2525
2806
|
CHECK_EXCEPTION();
|
2526
2807
|
DestroyExceptionInfo(exception);
|
2527
2808
|
#else
|
2528
|
-
|
2809
|
+
GVL_STRUCT_TYPE(ClutImageChannel) args = { image, channels, clut };
|
2810
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ClutImageChannel), &args);
|
2529
2811
|
rm_check_image_exception(image, RetainOnError);
|
2530
2812
|
rm_check_image_exception(clut, RetainOnError);
|
2531
2813
|
#endif
|
@@ -2566,14 +2848,16 @@ Image_color_histogram(VALUE self)
|
|
2566
2848
|
{
|
2567
2849
|
dc_copy = rm_clone_image(image);
|
2568
2850
|
#if defined(IMAGEMAGICK_7)
|
2569
|
-
SetImageStorageClass
|
2851
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args = { dc_copy, DirectClass, exception };
|
2570
2852
|
#else
|
2571
|
-
SetImageStorageClass
|
2853
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args = { dc_copy, DirectClass };
|
2572
2854
|
#endif
|
2855
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
2573
2856
|
image = dc_copy;
|
2574
2857
|
}
|
2575
2858
|
|
2576
|
-
|
2859
|
+
GVL_STRUCT_TYPE(GetImageHistogram) args = { image, &colors, exception };
|
2860
|
+
histogram = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageHistogram), &args);
|
2577
2861
|
|
2578
2862
|
if (histogram == NULL)
|
2579
2863
|
{
|
@@ -2667,7 +2951,8 @@ set_profile(VALUE self, const char *name, VALUE profile)
|
|
2667
2951
|
|
2668
2952
|
strlcpy(info->magick, m->name, sizeof(info->magick));
|
2669
2953
|
|
2670
|
-
|
2954
|
+
GVL_STRUCT_TYPE(BlobToImage) args = { info, profile_blob, (size_t)profile_length, exception };
|
2955
|
+
profile_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlobToImage), &args);
|
2671
2956
|
DestroyImageInfo(info);
|
2672
2957
|
CHECK_EXCEPTION();
|
2673
2958
|
|
@@ -2679,10 +2964,12 @@ set_profile(VALUE self, const char *name, VALUE profile)
|
|
2679
2964
|
if (rm_strcasecmp("8bim", profile_name) == 0 && rm_strcasecmp("iptc", name) == 0)
|
2680
2965
|
{
|
2681
2966
|
#if defined(IMAGEMAGICK_7)
|
2682
|
-
ProfileImage
|
2967
|
+
GVL_STRUCT_TYPE(ProfileImage) args = { image, name, profile_blob, profile_length, exception };
|
2968
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ProfileImage), &args);
|
2683
2969
|
if (rm_should_raise_exception(exception, RetainExceptionRetention))
|
2684
2970
|
#else
|
2685
|
-
ProfileImage
|
2971
|
+
GVL_STRUCT_TYPE(ProfileImage) args = { image, name, profile_blob, profile_length, MagickFalse };
|
2972
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ProfileImage), &args);
|
2686
2973
|
if (rm_should_raise_exception(&image->exception, RetainExceptionRetention))
|
2687
2974
|
#endif
|
2688
2975
|
{
|
@@ -2695,10 +2982,12 @@ set_profile(VALUE self, const char *name, VALUE profile)
|
|
2695
2982
|
if (profile_data)
|
2696
2983
|
{
|
2697
2984
|
#if defined(IMAGEMAGICK_7)
|
2698
|
-
ProfileImage
|
2985
|
+
GVL_STRUCT_TYPE(ProfileImage) args = { image, name, GetStringInfoDatum(profile_data), GetStringInfoLength(profile_data), exception };
|
2986
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ProfileImage), &args);
|
2699
2987
|
if (rm_should_raise_exception(exception, RetainExceptionRetention))
|
2700
2988
|
#else
|
2701
|
-
ProfileImage
|
2989
|
+
GVL_STRUCT_TYPE(ProfileImage) args = { image, name, GetStringInfoDatum(profile_data), GetStringInfoLength(profile_data), MagickFalse };
|
2990
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ProfileImage), &args);
|
2702
2991
|
if (rm_should_raise_exception(&image->exception, RetainExceptionRetention))
|
2703
2992
|
#endif
|
2704
2993
|
{
|
@@ -2847,12 +3136,14 @@ Image_color_flood_fill(VALUE self, VALUE target_color, VALUE fill_color,
|
|
2847
3136
|
|
2848
3137
|
#if defined(IMAGEMAGICK_7)
|
2849
3138
|
exception = AcquireExceptionInfo();
|
2850
|
-
FloodfillPaintImage
|
3139
|
+
GVL_STRUCT_TYPE(FloodfillPaintImage) args = { new_image, draw_info, &target_mpp, x, y, invert, exception };
|
3140
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FloodfillPaintImage), &args);
|
2851
3141
|
DestroyDrawInfo(draw_info);
|
2852
3142
|
rm_check_exception(exception, new_image, DestroyOnError);
|
2853
3143
|
DestroyExceptionInfo(exception);
|
2854
3144
|
#else
|
2855
|
-
FloodfillPaintImage
|
3145
|
+
GVL_STRUCT_TYPE(FloodfillPaintImage) args = { new_image, DefaultChannels, draw_info, &target_mpp, x, y, invert };
|
3146
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FloodfillPaintImage), &args);
|
2856
3147
|
|
2857
3148
|
DestroyDrawInfo(draw_info);
|
2858
3149
|
rm_check_image_exception(new_image, DestroyOnError);
|
@@ -2916,10 +3207,11 @@ Image_colorize(int argc, VALUE *argv, VALUE self)
|
|
2916
3207
|
|
2917
3208
|
exception = AcquireExceptionInfo();
|
2918
3209
|
#if defined(IMAGEMAGICK_7)
|
2919
|
-
|
3210
|
+
GVL_STRUCT_TYPE(ColorizeImage) args = { image, opacity, &target, exception };
|
2920
3211
|
#else
|
2921
|
-
|
3212
|
+
GVL_STRUCT_TYPE(ColorizeImage) args = { image, opacity, target, exception };
|
2922
3213
|
#endif
|
3214
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ColorizeImage), &args);
|
2923
3215
|
rm_check_exception(exception, new_image, DestroyOnError);
|
2924
3216
|
DestroyExceptionInfo(exception);
|
2925
3217
|
|
@@ -3029,7 +3321,7 @@ Image_colormap(int argc, VALUE *argv, VALUE self)
|
|
3029
3321
|
VALUE
|
3030
3322
|
Image_colors(VALUE self)
|
3031
3323
|
{
|
3032
|
-
|
3324
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, colors, ulong, &rm_image_data_type);
|
3033
3325
|
}
|
3034
3326
|
|
3035
3327
|
/**
|
@@ -3069,11 +3361,13 @@ Image_colorspace_eq(VALUE self, VALUE colorspace)
|
|
3069
3361
|
|
3070
3362
|
#if defined(IMAGEMAGICK_7)
|
3071
3363
|
exception = AcquireExceptionInfo();
|
3072
|
-
TransformImageColorspace
|
3364
|
+
GVL_STRUCT_TYPE(TransformImageColorspace) args = { image, new_cs, exception };
|
3365
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransformImageColorspace), &args);
|
3073
3366
|
CHECK_EXCEPTION();
|
3074
3367
|
DestroyExceptionInfo(exception);
|
3075
3368
|
#else
|
3076
|
-
TransformImageColorspace
|
3369
|
+
GVL_STRUCT_TYPE(TransformImageColorspace) args = { image, new_cs };
|
3370
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransformImageColorspace), &args);
|
3077
3371
|
rm_check_image_exception(image, RetainOnError);
|
3078
3372
|
#endif
|
3079
3373
|
|
@@ -3089,7 +3383,7 @@ Image_colorspace_eq(VALUE self, VALUE colorspace)
|
|
3089
3383
|
VALUE
|
3090
3384
|
Image_columns(VALUE self)
|
3091
3385
|
{
|
3092
|
-
|
3386
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, columns, int, &rm_image_data_type);
|
3093
3387
|
}
|
3094
3388
|
|
3095
3389
|
|
@@ -3104,17 +3398,17 @@ Image_columns(VALUE self)
|
|
3104
3398
|
* @param channel [Magick::ChannelType] a ChannelType arguments.
|
3105
3399
|
*
|
3106
3400
|
* @overload compare_channel(image, metric, channel = Magick::AllChannels)
|
3107
|
-
*
|
3108
|
-
*
|
3109
|
-
* -
|
3401
|
+
* When a block is given, compare_channel yields with a block argument you can optionally use to
|
3402
|
+
* set attributes.
|
3403
|
+
* - options.highlight_color = color
|
3110
3404
|
* - Emphasize pixel differences with this color. The default is partially transparent red.
|
3111
|
-
* -
|
3405
|
+
* - options.lowlight_color = color
|
3112
3406
|
* - Demphasize pixel differences with this color. The default is partially transparent white.
|
3113
3407
|
* @param image [Magick::Image, Magick::ImageList] Either an imagelist or an image. If an
|
3114
3408
|
* imagelist, uses the current image.
|
3115
3409
|
* @param metric [Magick::MetricType] The desired distortion metric.
|
3116
3410
|
* @param channel [Magick::ChannelType] a ChannelType arguments.
|
3117
|
-
* @yield []
|
3411
|
+
* @yield [Magick::OptionalMethodArguments]
|
3118
3412
|
*
|
3119
3413
|
* @overload compare_channel(image, metric, *channels)
|
3120
3414
|
* @param image [Magick::Image, Magick::ImageList] Either an imagelist or an image. If an
|
@@ -3124,18 +3418,18 @@ Image_columns(VALUE self)
|
|
3124
3418
|
* @param *channels [Magick::ChannelType] one or more ChannelType arguments.
|
3125
3419
|
*
|
3126
3420
|
* @overload compare_channel(image, metric, *channels)
|
3127
|
-
*
|
3128
|
-
*
|
3129
|
-
* -
|
3421
|
+
* When a block is given, compare_channel yields with a block argument you can optionally use to
|
3422
|
+
* set attributes.
|
3423
|
+
* - options.highlight_color = color
|
3130
3424
|
* - Emphasize pixel differences with this color. The default is partially transparent red.
|
3131
|
-
* -
|
3425
|
+
* - options.lowlight_color = color
|
3132
3426
|
* - Demphasize pixel differences with this color. The default is partially transparent white.
|
3133
3427
|
* @param image [Magick::Image, Magick::ImageList] Either an imagelist or an image. If an
|
3134
3428
|
* imagelist, uses the current image.
|
3135
3429
|
* @param metric [Magick::MetricType] The desired distortion metric.
|
3136
3430
|
* @param channel [Magick::ChannelType] a ChannelType arguments.
|
3137
3431
|
* @param *channels [Magick::ChannelType] one or more ChannelType arguments.
|
3138
|
-
* @yield []
|
3432
|
+
* @yield [Magick::OptionalMethodArguments]
|
3139
3433
|
*
|
3140
3434
|
* @return [Array] The first element is a difference image, the second is a the value of the
|
3141
3435
|
* computed distortion represented as a Float.
|
@@ -3173,10 +3467,12 @@ Image_compare_channel(int argc, VALUE *argv, VALUE self)
|
|
3173
3467
|
exception = AcquireExceptionInfo();
|
3174
3468
|
#if defined(IMAGEMAGICK_7)
|
3175
3469
|
BEGIN_CHANNEL_MASK(image, channels);
|
3176
|
-
|
3470
|
+
GVL_STRUCT_TYPE(CompareImages) args = { image, r_image, metric_type, &distortion, exception };
|
3471
|
+
difference_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompareImages), &args);
|
3177
3472
|
END_CHANNEL_MASK(image);
|
3178
3473
|
#else
|
3179
|
-
|
3474
|
+
GVL_STRUCT_TYPE(CompareImageChannels) args = { image, r_image, channels, metric_type, &distortion, exception };
|
3475
|
+
difference_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompareImageChannels), &args);
|
3180
3476
|
#endif
|
3181
3477
|
rm_check_exception(exception, difference_image, DestroyOnError);
|
3182
3478
|
DestroyExceptionInfo(exception);
|
@@ -3374,12 +3670,14 @@ composite(int bang, int argc, VALUE *argv, VALUE self, ChannelType channels)
|
|
3374
3670
|
#if defined(IMAGEMAGICK_7)
|
3375
3671
|
exception = AcquireExceptionInfo();
|
3376
3672
|
BEGIN_CHANNEL_MASK(image, channels);
|
3377
|
-
CompositeImage
|
3673
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { image, comp_image, operator, MagickTrue, x_offset, y_offset, exception };
|
3674
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
3378
3675
|
END_CHANNEL_MASK(image);
|
3379
3676
|
CHECK_EXCEPTION();
|
3380
3677
|
DestroyExceptionInfo(exception);
|
3381
3678
|
#else
|
3382
|
-
CompositeImageChannel
|
3679
|
+
GVL_STRUCT_TYPE(CompositeImageChannel) args = { image, channels, operator, comp_image, x_offset, y_offset };
|
3680
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImageChannel), &args);
|
3383
3681
|
rm_check_image_exception(image, RetainOnError);
|
3384
3682
|
#endif
|
3385
3683
|
|
@@ -3392,12 +3690,14 @@ composite(int bang, int argc, VALUE *argv, VALUE self, ChannelType channels)
|
|
3392
3690
|
#if defined(IMAGEMAGICK_7)
|
3393
3691
|
exception = AcquireExceptionInfo();
|
3394
3692
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
3395
|
-
CompositeImage
|
3693
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { new_image, comp_image, operator, MagickTrue, x_offset, y_offset, exception };
|
3694
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
3396
3695
|
END_CHANNEL_MASK(new_image);
|
3397
3696
|
rm_check_exception(exception, new_image, DestroyOnError);
|
3398
3697
|
DestroyExceptionInfo(exception);
|
3399
3698
|
#else
|
3400
|
-
CompositeImageChannel
|
3699
|
+
GVL_STRUCT_TYPE(CompositeImageChannel) args = { new_image, channels, operator, comp_image, x_offset, y_offset };
|
3700
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImageChannel), &args);
|
3401
3701
|
rm_check_image_exception(new_image, DestroyOnError);
|
3402
3702
|
#endif
|
3403
3703
|
|
@@ -3511,11 +3811,13 @@ Image_composite_affine(VALUE self, VALUE source, VALUE affine_matrix)
|
|
3511
3811
|
|
3512
3812
|
#if defined(IMAGEMAGICK_7)
|
3513
3813
|
exception = AcquireExceptionInfo();
|
3514
|
-
DrawAffineImage
|
3814
|
+
GVL_STRUCT_TYPE(DrawAffineImage) args = { new_image, composite_image, &affine, exception };
|
3815
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(DrawAffineImage), &args);
|
3515
3816
|
rm_check_exception(exception, new_image, DestroyOnError);
|
3516
3817
|
DestroyExceptionInfo(exception);
|
3517
3818
|
#else
|
3518
|
-
DrawAffineImage
|
3819
|
+
GVL_STRUCT_TYPE(DrawAffineImage) args = { new_image, composite_image, &affine };
|
3820
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(DrawAffineImage), &args);
|
3519
3821
|
rm_check_image_exception(new_image, DestroyOnError);
|
3520
3822
|
#endif
|
3521
3823
|
|
@@ -3879,11 +4181,13 @@ composite_tiled(int bang, int argc, VALUE *argv, VALUE self)
|
|
3879
4181
|
{
|
3880
4182
|
#if defined(IMAGEMAGICK_7)
|
3881
4183
|
BEGIN_CHANNEL_MASK(image, channels);
|
3882
|
-
|
4184
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { image, comp_image, operator, MagickTrue, x, y, exception };
|
4185
|
+
status = (MagickStatusType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
3883
4186
|
END_CHANNEL_MASK(image);
|
3884
4187
|
rm_check_exception(exception, image, bang ? RetainOnError: DestroyOnError);
|
3885
4188
|
#else
|
3886
|
-
|
4189
|
+
GVL_STRUCT_TYPE(CompositeImageChannel) args = { image, channels, operator, comp_image, x, y };
|
4190
|
+
status = (MagickStatusType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImageChannel), &args);
|
3887
4191
|
rm_check_image_exception(image, bang ? RetainOnError: DestroyOnError);
|
3888
4192
|
#endif
|
3889
4193
|
}
|
@@ -3996,11 +4300,13 @@ Image_compress_colormap_bang(VALUE self)
|
|
3996
4300
|
|
3997
4301
|
#if defined(IMAGEMAGICK_7)
|
3998
4302
|
exception = AcquireExceptionInfo();
|
3999
|
-
|
4303
|
+
GVL_STRUCT_TYPE(CompressImageColormap) args = { image, exception };
|
4304
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompressImageColormap), &args);
|
4000
4305
|
CHECK_EXCEPTION();
|
4001
4306
|
DestroyExceptionInfo(exception);
|
4002
4307
|
#else
|
4003
|
-
|
4308
|
+
GVL_STRUCT_TYPE(CompressImageColormap) args = { image };
|
4309
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompressImageColormap), &args);
|
4004
4310
|
rm_check_image_exception(image, RetainOnError);
|
4005
4311
|
#endif
|
4006
4312
|
if (!okay)
|
@@ -4130,9 +4436,11 @@ Image_constitute(VALUE class ATTRIBUTE_UNUSED, VALUE width_arg, VALUE height_arg
|
|
4130
4436
|
|
4131
4437
|
#if defined(IMAGEMAGICK_7)
|
4132
4438
|
exception = AcquireExceptionInfo();
|
4133
|
-
SetImageExtent
|
4439
|
+
GVL_STRUCT_TYPE(SetImageExtent) args_SetImageExtent = { new_image, width, height, exception };
|
4440
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageExtent), &args_SetImageExtent);
|
4134
4441
|
#else
|
4135
|
-
SetImageExtent
|
4442
|
+
GVL_STRUCT_TYPE(SetImageExtent) args_SetImageExtent = { new_image, width, height };
|
4443
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageExtent), &args_SetImageExtent);
|
4136
4444
|
exception = &new_image->exception;
|
4137
4445
|
#endif
|
4138
4446
|
|
@@ -4148,9 +4456,11 @@ Image_constitute(VALUE class ATTRIBUTE_UNUSED, VALUE width_arg, VALUE height_arg
|
|
4148
4456
|
}
|
4149
4457
|
|
4150
4458
|
#if defined(IMAGEMAGICK_7)
|
4151
|
-
SetImageBackgroundColor
|
4459
|
+
GVL_STRUCT_TYPE(SetImageBackgroundColor) args_SetImageBackgroundColor = { new_image, exception };
|
4460
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageBackgroundColor), &args_SetImageBackgroundColor);
|
4152
4461
|
#else
|
4153
|
-
SetImageBackgroundColor
|
4462
|
+
GVL_STRUCT_TYPE(SetImageBackgroundColor) args_SetImageBackgroundColor = { new_image };
|
4463
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageBackgroundColor), &args_SetImageBackgroundColor);
|
4154
4464
|
exception = &new_image->exception;
|
4155
4465
|
#endif
|
4156
4466
|
|
@@ -4166,12 +4476,14 @@ Image_constitute(VALUE class ATTRIBUTE_UNUSED, VALUE width_arg, VALUE height_arg
|
|
4166
4476
|
}
|
4167
4477
|
|
4168
4478
|
#if defined(IMAGEMAGICK_7)
|
4169
|
-
ImportImagePixels
|
4479
|
+
GVL_STRUCT_TYPE(ImportImagePixels) args_ImportImagePixels = { new_image, 0, 0, width, height, map, stg_type, (const void *)pixels.v, exception };
|
4480
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ImportImagePixels), &args_ImportImagePixels);
|
4170
4481
|
xfree(pixels.v);
|
4171
4482
|
rm_check_exception(exception, new_image, DestroyOnError);
|
4172
4483
|
DestroyExceptionInfo(exception);
|
4173
4484
|
#else
|
4174
|
-
ImportImagePixels
|
4485
|
+
GVL_STRUCT_TYPE(ImportImagePixels) args_ImportImagePixels = { new_image, 0, 0, width, height, map, stg_type, (const void *)pixels.v };
|
4486
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ImportImagePixels), &args_ImportImagePixels);
|
4175
4487
|
xfree(pixels.v);
|
4176
4488
|
rm_check_image_exception(new_image, DestroyOnError);
|
4177
4489
|
#endif
|
@@ -4338,12 +4650,14 @@ Image_contrast_stretch_channel(int argc, VALUE *argv, VALUE self)
|
|
4338
4650
|
#if defined(IMAGEMAGICK_7)
|
4339
4651
|
exception = AcquireExceptionInfo();
|
4340
4652
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
4341
|
-
ContrastStretchImage
|
4653
|
+
GVL_STRUCT_TYPE(ContrastStretchImage) args = { new_image, black_point, white_point, exception };
|
4654
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ContrastStretchImage), &args);
|
4342
4655
|
END_CHANNEL_MASK(new_image);
|
4343
4656
|
CHECK_EXCEPTION();
|
4344
4657
|
DestroyExceptionInfo(exception);
|
4345
4658
|
#else
|
4346
|
-
ContrastStretchImageChannel
|
4659
|
+
GVL_STRUCT_TYPE(ContrastStretchImageChannel) args = { new_image, channels, black_point, white_point };
|
4660
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ContrastStretchImageChannel), &args);
|
4347
4661
|
rm_check_image_exception(new_image, DestroyOnError);
|
4348
4662
|
#endif
|
4349
4663
|
|
@@ -4413,17 +4727,19 @@ Image_morphology_channel(VALUE self, VALUE channel_v, VALUE method_v, VALUE iter
|
|
4413
4727
|
rb_raise(rb_eArgError, "expected String or Magick::KernelInfo");
|
4414
4728
|
}
|
4415
4729
|
|
4416
|
-
|
4730
|
+
TypedData_Get_Struct(kernel_v, KernelInfo, &rm_kernel_info_data_type, kernel);
|
4417
4731
|
|
4418
4732
|
exception = AcquireExceptionInfo();
|
4419
4733
|
|
4420
4734
|
#if defined(IMAGEMAGICK_7)
|
4421
4735
|
BEGIN_CHANNEL_MASK(image, channel);
|
4422
|
-
|
4736
|
+
GVL_STRUCT_TYPE(MorphologyImage) args = { image, method, NUM2LONG(iterations), kernel, exception };
|
4737
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(MorphologyImage), &args);
|
4423
4738
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
4424
4739
|
END_CHANNEL_MASK(image);
|
4425
4740
|
#else
|
4426
|
-
|
4741
|
+
GVL_STRUCT_TYPE(MorphologyImageChannel) args = { image, channel, method, NUM2LONG(iterations), kernel, exception };
|
4742
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(MorphologyImageChannel), &args);
|
4427
4743
|
#endif
|
4428
4744
|
rm_check_exception(exception, new_image, DestroyOnError);
|
4429
4745
|
DestroyExceptionInfo(exception);
|
@@ -4534,10 +4850,12 @@ Image_convolve(VALUE self, VALUE order_arg, VALUE kernel_arg)
|
|
4534
4850
|
exception = AcquireExceptionInfo();
|
4535
4851
|
|
4536
4852
|
#if defined(IMAGEMAGICK_7)
|
4537
|
-
|
4853
|
+
GVL_STRUCT_TYPE(ConvolveImage) args = { image, kernel, exception };
|
4854
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ConvolveImage), &args);
|
4538
4855
|
DestroyKernelInfo(kernel);
|
4539
4856
|
#else
|
4540
|
-
|
4857
|
+
GVL_STRUCT_TYPE(ConvolveImage) args = { image, order, kernel, exception };
|
4858
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ConvolveImage), &args);
|
4541
4859
|
xfree((void *)kernel);
|
4542
4860
|
#endif
|
4543
4861
|
|
@@ -4626,12 +4944,14 @@ Image_convolve_channel(int argc, VALUE *argv, VALUE self)
|
|
4626
4944
|
|
4627
4945
|
#if defined(IMAGEMAGICK_7)
|
4628
4946
|
BEGIN_CHANNEL_MASK(image, channels);
|
4629
|
-
|
4947
|
+
GVL_STRUCT_TYPE(ConvolveImage) args = { image, kernel, exception };
|
4948
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ConvolveImage), &args);
|
4630
4949
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
4631
4950
|
END_CHANNEL_MASK(image);
|
4632
4951
|
DestroyKernelInfo(kernel);
|
4633
4952
|
#else
|
4634
|
-
|
4953
|
+
GVL_STRUCT_TYPE(ConvolveImageChannel) args = { image, channels, order, kernel, exception };
|
4954
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ConvolveImageChannel), &args);
|
4635
4955
|
xfree((void *)kernel);
|
4636
4956
|
#endif
|
4637
4957
|
|
@@ -4681,26 +5001,26 @@ Image_init_copy(VALUE copy, VALUE orig)
|
|
4681
5001
|
/**
|
4682
5002
|
* Extract a region of the image defined by width, height, x, y.
|
4683
5003
|
*
|
4684
|
-
* @overload crop(
|
4685
|
-
* @param reset [Boolean] true if reset the cropped image page canvas and position
|
5004
|
+
* @overload crop(x, y, width, height, reset = false)
|
4686
5005
|
* @param x [Numeric] x position of start of region
|
4687
5006
|
* @param y [Numeric] y position of start of region
|
4688
5007
|
* @param width [Numeric] width of region
|
4689
5008
|
* @param height [Numeric] height of region
|
4690
|
-
*
|
4691
|
-
* @overload crop(reset = false, gravity, width, height)
|
4692
5009
|
* @param reset [Boolean] true if reset the cropped image page canvas and position
|
5010
|
+
*
|
5011
|
+
* @overload crop(gravity, width, height, reset = false)
|
4693
5012
|
* @param gravity [Magick::GravityType] the gravity type
|
4694
5013
|
* @param width [Numeric] width of region
|
4695
5014
|
* @param height [Numeric] height of region
|
4696
|
-
|
4697
|
-
* @overload crop(reset = false, gravity, x, y, width, height)
|
4698
5015
|
* @param reset [Boolean] true if reset the cropped image page canvas and position
|
5016
|
+
|
5017
|
+
* @overload crop(gravity, x, y, width, height, reset = false)
|
4699
5018
|
* @param gravity [Magick::GravityType] the gravity type
|
4700
5019
|
* @param x [Numeric] x position of start of region
|
4701
5020
|
* @param y [Numeric] y position of start of region
|
4702
5021
|
* @param width [Numeric] width of region
|
4703
5022
|
* @param height [Numeric] height of region
|
5023
|
+
* @param reset [Boolean] true if reset the cropped image page canvas and position
|
4704
5024
|
*
|
4705
5025
|
* @return [Magick::Image] a new image
|
4706
5026
|
* @see Image#crop!
|
@@ -4774,11 +5094,13 @@ Image_cycle_colormap(VALUE self, VALUE amount)
|
|
4774
5094
|
|
4775
5095
|
#if defined(IMAGEMAGICK_7)
|
4776
5096
|
exception = AcquireExceptionInfo();
|
4777
|
-
CycleColormapImage
|
5097
|
+
GVL_STRUCT_TYPE(CycleColormapImage) args = { new_image, amt, exception };
|
5098
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CycleColormapImage), &args);
|
4778
5099
|
rm_check_exception(exception, new_image, DestroyOnError);
|
4779
5100
|
DestroyExceptionInfo(exception);
|
4780
5101
|
#else
|
4781
|
-
CycleColormapImage
|
5102
|
+
GVL_STRUCT_TYPE(CycleColormapImage) args = { new_image, amt };
|
5103
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CycleColormapImage), &args);
|
4782
5104
|
rm_check_image_exception(new_image, DestroyOnError);
|
4783
5105
|
#endif
|
4784
5106
|
|
@@ -4913,7 +5235,8 @@ Image_decipher(VALUE self, VALUE passphrase)
|
|
4913
5235
|
|
4914
5236
|
new_image = rm_clone_image(image);
|
4915
5237
|
|
4916
|
-
|
5238
|
+
GVL_STRUCT_TYPE(DecipherImage) args = { new_image, pf, exception };
|
5239
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(DecipherImage), &args);
|
4917
5240
|
rm_check_exception(exception, new_image, DestroyOnError);
|
4918
5241
|
if (!okay)
|
4919
5242
|
{
|
@@ -4980,7 +5303,7 @@ Image_define(VALUE self, VALUE artifact, VALUE value)
|
|
4980
5303
|
VALUE
|
4981
5304
|
Image_delay(VALUE self)
|
4982
5305
|
{
|
4983
|
-
|
5306
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, delay, ulong, &rm_image_data_type);
|
4984
5307
|
}
|
4985
5308
|
|
4986
5309
|
/**
|
@@ -4993,7 +5316,7 @@ Image_delay(VALUE self)
|
|
4993
5316
|
VALUE
|
4994
5317
|
Image_delay_eq(VALUE self, VALUE val)
|
4995
5318
|
{
|
4996
|
-
|
5319
|
+
IMPLEMENT_TYPED_ATTR_WRITER(Image, delay, ulong, &rm_image_data_type);
|
4997
5320
|
}
|
4998
5321
|
|
4999
5322
|
|
@@ -5015,11 +5338,13 @@ Image_delete_compose_mask(VALUE self)
|
|
5015
5338
|
|
5016
5339
|
#if defined(IMAGEMAGICK_7)
|
5017
5340
|
exception = AcquireExceptionInfo();
|
5018
|
-
SetImageMask
|
5341
|
+
GVL_STRUCT_TYPE(SetImageMask) args = { image, CompositePixelMask, NULL, exception };
|
5342
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageMask), &args);
|
5019
5343
|
CHECK_EXCEPTION();
|
5020
5344
|
DestroyExceptionInfo(exception);
|
5021
5345
|
#else
|
5022
|
-
SetImageMask
|
5346
|
+
GVL_STRUCT_TYPE(SetImageMask) args = { image, NULL };
|
5347
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageMask), &args);
|
5023
5348
|
rm_check_image_exception(image, RetainOnError);
|
5024
5349
|
#endif
|
5025
5350
|
|
@@ -5039,8 +5364,18 @@ VALUE
|
|
5039
5364
|
Image_delete_profile(VALUE self, VALUE name)
|
5040
5365
|
{
|
5041
5366
|
Image *image = rm_check_frozen(self);
|
5042
|
-
DeleteImageProfile(image, StringValueCStr(name));
|
5043
5367
|
|
5368
|
+
#if defined(IMAGEMAGICK_7)
|
5369
|
+
ExceptionInfo *exception = AcquireExceptionInfo();
|
5370
|
+
|
5371
|
+
GVL_STRUCT_TYPE(ProfileImage) args = { image, StringValueCStr(name), NULL, 0, exception };
|
5372
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ProfileImage), &args);
|
5373
|
+
CHECK_EXCEPTION();
|
5374
|
+
DestroyExceptionInfo(exception);
|
5375
|
+
#else
|
5376
|
+
GVL_STRUCT_TYPE(ProfileImage) args = { image, StringValueCStr(name), NULL, 0, MagickTrue };
|
5377
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ProfileImage), &args);
|
5378
|
+
#endif
|
5044
5379
|
return self;
|
5045
5380
|
}
|
5046
5381
|
|
@@ -5057,13 +5392,14 @@ VALUE
|
|
5057
5392
|
Image_depth(VALUE self)
|
5058
5393
|
{
|
5059
5394
|
Image *image;
|
5060
|
-
|
5395
|
+
size_t depth = 0;
|
5061
5396
|
ExceptionInfo *exception;
|
5062
5397
|
|
5063
5398
|
image = rm_check_destroyed(self);
|
5064
5399
|
exception = AcquireExceptionInfo();
|
5065
5400
|
|
5066
|
-
|
5401
|
+
GVL_STRUCT_TYPE(GetImageDepth) args = { image, exception };
|
5402
|
+
depth = (size_t)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageDepth), &args);
|
5067
5403
|
CHECK_EXCEPTION();
|
5068
5404
|
|
5069
5405
|
DestroyExceptionInfo(exception);
|
@@ -5110,7 +5446,8 @@ Image_deskew(int argc, VALUE *argv, VALUE self)
|
|
5110
5446
|
}
|
5111
5447
|
|
5112
5448
|
exception = AcquireExceptionInfo();
|
5113
|
-
|
5449
|
+
GVL_STRUCT_TYPE(DeskewImage) args = { image, threshold, exception };
|
5450
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(DeskewImage), &args);
|
5114
5451
|
CHECK_EXCEPTION();
|
5115
5452
|
DestroyExceptionInfo(exception);
|
5116
5453
|
|
@@ -5132,7 +5469,8 @@ Image_despeckle(VALUE self)
|
|
5132
5469
|
image = rm_check_destroyed(self);
|
5133
5470
|
exception = AcquireExceptionInfo();
|
5134
5471
|
|
5135
|
-
|
5472
|
+
GVL_STRUCT_TYPE(DespeckleImage) args = { image, exception };
|
5473
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(DespeckleImage), &args);
|
5136
5474
|
rm_check_exception(exception, new_image, DestroyOnError);
|
5137
5475
|
DestroyExceptionInfo(exception);
|
5138
5476
|
|
@@ -5151,7 +5489,7 @@ Image_destroy_bang(VALUE self)
|
|
5151
5489
|
Image *image;
|
5152
5490
|
|
5153
5491
|
rb_check_frozen(self);
|
5154
|
-
|
5492
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
5155
5493
|
rm_image_destroy(image);
|
5156
5494
|
DATA_PTR(self) = NULL;
|
5157
5495
|
return self;
|
@@ -5168,7 +5506,7 @@ Image_destroyed_q(VALUE self)
|
|
5168
5506
|
{
|
5169
5507
|
Image *image;
|
5170
5508
|
|
5171
|
-
|
5509
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
5172
5510
|
return image ? Qfalse : Qtrue;
|
5173
5511
|
}
|
5174
5512
|
|
@@ -5197,6 +5535,7 @@ Image_difference(VALUE self, VALUE other)
|
|
5197
5535
|
Image *image2;
|
5198
5536
|
VALUE mean, nmean, nmax;
|
5199
5537
|
#if defined(IMAGEMAGICK_7)
|
5538
|
+
double distortion;
|
5200
5539
|
ExceptionInfo *exception;
|
5201
5540
|
#endif
|
5202
5541
|
|
@@ -5206,11 +5545,13 @@ Image_difference(VALUE self, VALUE other)
|
|
5206
5545
|
|
5207
5546
|
#if defined(IMAGEMAGICK_7)
|
5208
5547
|
exception = AcquireExceptionInfo();
|
5209
|
-
|
5548
|
+
GVL_STRUCT_TYPE(GetImageDistortion) args = { image, image2, MeanErrorPerPixelErrorMetric, &distortion, exception };
|
5549
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageDistortion), &args);
|
5210
5550
|
CHECK_EXCEPTION();
|
5211
5551
|
DestroyExceptionInfo(exception);
|
5212
5552
|
#else
|
5213
|
-
IsImagesEqual
|
5553
|
+
GVL_STRUCT_TYPE(IsImagesEqual) args = { image, image2 };
|
5554
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(IsImagesEqual), &args);
|
5214
5555
|
rm_check_image_exception(image, RetainOnError);
|
5215
5556
|
#endif
|
5216
5557
|
|
@@ -5234,7 +5575,7 @@ Image_difference(VALUE self, VALUE other)
|
|
5234
5575
|
VALUE
|
5235
5576
|
Image_directory(VALUE self)
|
5236
5577
|
{
|
5237
|
-
|
5578
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, directory, str, &rm_image_data_type);
|
5238
5579
|
}
|
5239
5580
|
|
5240
5581
|
|
@@ -5359,10 +5700,11 @@ Image_dispatch(int argc, VALUE *argv, VALUE self)
|
|
5359
5700
|
// Create the Ruby array for the pixels. Return this even if ExportImagePixels fails.
|
5360
5701
|
pixels_ary = rb_ary_new();
|
5361
5702
|
|
5362
|
-
|
5703
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
5363
5704
|
|
5364
5705
|
exception = AcquireExceptionInfo();
|
5365
|
-
|
5706
|
+
GVL_STRUCT_TYPE(ExportImagePixels) args = { image, x, y, columns, rows, map, stg_type, (void *)pixels.v, exception };
|
5707
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ExportImagePixels), &args);
|
5366
5708
|
|
5367
5709
|
if (!okay)
|
5368
5710
|
{
|
@@ -5421,7 +5763,7 @@ Image_display(VALUE self)
|
|
5421
5763
|
}
|
5422
5764
|
|
5423
5765
|
info_obj = rm_info_new();
|
5424
|
-
|
5766
|
+
TypedData_Get_Struct(info_obj, Info, &rm_info_data_type, info);
|
5425
5767
|
|
5426
5768
|
#if defined(IMAGEMAGICK_7)
|
5427
5769
|
exception = AcquireExceptionInfo();
|
@@ -5551,17 +5893,16 @@ Image_dissolve(int argc, VALUE *argv, VALUE self)
|
|
5551
5893
|
* the source image will be taken into account in the mapping.
|
5552
5894
|
*
|
5553
5895
|
* @overload distort(type, points, bestfit = false)
|
5554
|
-
*
|
5555
|
-
*
|
5556
|
-
* - self.define("distort:viewport", "WxH+X+Y")
|
5896
|
+
* When a block is given, distort yields with a block argument you can optionally use to set attributes.
|
5897
|
+
* - options.define("distort:viewport", "WxH+X+Y")
|
5557
5898
|
* - Specify the size and offset of the generated viewport image of the distorted image space. W and
|
5558
5899
|
* H are the width and height, and X and Y are the offset.
|
5559
|
-
* -
|
5900
|
+
* - options.define("distort:scale", N)
|
5560
5901
|
* - N is an integer factor. Scale the output image (viewport or otherwise) by that factor without
|
5561
5902
|
* changing the viewed contents of the distorted image. This can be used either for
|
5562
5903
|
* 'super-sampling' the image for a higher quality result, or for panning and zooming around
|
5563
5904
|
* the image (with appropriate viewport changes, or post-distort cropping and resizing).
|
5564
|
-
* -
|
5905
|
+
* - options.verbose(true)
|
5565
5906
|
* - Attempt to output the internal coefficients, and the -fx equivalent to the distortion, for
|
5566
5907
|
expert study, and debugging purposes. This many not be available for all distorts.
|
5567
5908
|
* @param type [Magick::DistortMethod] a DistortMethod value
|
@@ -5570,13 +5911,13 @@ Image_dissolve(int argc, VALUE *argv, VALUE self)
|
|
5570
5911
|
* image is adjusted to ensure the whole source image will just fit within the final destination
|
5571
5912
|
* image, which will be sized and offset accordingly. Also in many cases the virtual offset of
|
5572
5913
|
* the source image will be taken into account in the mapping.
|
5573
|
-
* @yield []
|
5914
|
+
* @yield [Magick::OptionalMethodArguments]
|
5574
5915
|
*
|
5575
5916
|
* @return [Magick::Image] a new image
|
5576
5917
|
* @example
|
5577
|
-
* img.distort(Magick::ScaleRotateTranslateDistortion, [0]) do
|
5578
|
-
*
|
5579
|
-
*
|
5918
|
+
* img.distort(Magick::ScaleRotateTranslateDistortion, [0]) do |options|
|
5919
|
+
* options.define "distort:viewport", "44x44+15+0"
|
5920
|
+
* options.define "distort:scale", 2
|
5580
5921
|
* end
|
5581
5922
|
*/
|
5582
5923
|
VALUE
|
@@ -5625,7 +5966,8 @@ Image_distort(int argc, VALUE *argv, VALUE self)
|
|
5625
5966
|
}
|
5626
5967
|
|
5627
5968
|
exception = AcquireExceptionInfo();
|
5628
|
-
|
5969
|
+
GVL_STRUCT_TYPE(DistortImage) args = { image, distortion_method, npoints, points, bestfit, exception };
|
5970
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(DistortImage), &args);
|
5629
5971
|
xfree(points);
|
5630
5972
|
rm_check_exception(exception, new_image, DestroyOnError);
|
5631
5973
|
DestroyExceptionInfo(exception);
|
@@ -5684,11 +6026,13 @@ Image_distortion_channel(int argc, VALUE *argv, VALUE self)
|
|
5684
6026
|
exception = AcquireExceptionInfo();
|
5685
6027
|
#if defined(IMAGEMAGICK_7)
|
5686
6028
|
BEGIN_CHANNEL_MASK(image, channels);
|
5687
|
-
|
6029
|
+
GVL_STRUCT_TYPE(CompareImages) args = { image, reconstruct, metric, &distortion, exception };
|
6030
|
+
difference_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompareImages), &args);
|
5688
6031
|
END_CHANNEL_MASK(image);
|
5689
6032
|
DestroyImage(difference_image);
|
5690
6033
|
#else
|
5691
|
-
GetImageChannelDistortion
|
6034
|
+
GVL_STRUCT_TYPE(GetImageChannelDistortion) args = { image, reconstruct, channels, metric, &distortion, exception };
|
6035
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageChannelDistortion), &args);
|
5692
6036
|
#endif
|
5693
6037
|
|
5694
6038
|
CHECK_EXCEPTION();
|
@@ -5728,7 +6072,8 @@ Image__dump(VALUE self, VALUE depth ATTRIBUTE_UNUSED)
|
|
5728
6072
|
strlcpy(info->magick, image->magick, sizeof(info->magick));
|
5729
6073
|
|
5730
6074
|
exception = AcquireExceptionInfo();
|
5731
|
-
|
6075
|
+
GVL_STRUCT_TYPE(ImageToBlob) args = { info, image, &length, exception };
|
6076
|
+
blob = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ImageToBlob), &args);
|
5732
6077
|
|
5733
6078
|
// Free ImageInfo first - error handling may raise an exception
|
5734
6079
|
DestroyImageInfo(info);
|
@@ -5774,7 +6119,7 @@ Image_dup(VALUE self)
|
|
5774
6119
|
VALUE dup;
|
5775
6120
|
|
5776
6121
|
rm_check_destroyed(self);
|
5777
|
-
dup =
|
6122
|
+
dup = TypedData_Wrap_Struct(CLASS_OF(self), &rm_image_data_type, NULL);
|
5778
6123
|
RB_GC_GUARD(dup);
|
5779
6124
|
|
5780
6125
|
return rb_funcall(dup, rm_ID_initialize_copy, 1, self);
|
@@ -5856,7 +6201,8 @@ Image_edge(int argc, VALUE *argv, VALUE self)
|
|
5856
6201
|
|
5857
6202
|
exception = AcquireExceptionInfo();
|
5858
6203
|
|
5859
|
-
|
6204
|
+
GVL_STRUCT_TYPE(EdgeImage) args = { image, radius, exception };
|
6205
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EdgeImage), &args);
|
5860
6206
|
rm_check_exception(exception, new_image, DestroyOnError);
|
5861
6207
|
DestroyExceptionInfo(exception);
|
5862
6208
|
|
@@ -5864,6 +6210,9 @@ Image_edge(int argc, VALUE *argv, VALUE self)
|
|
5864
6210
|
}
|
5865
6211
|
|
5866
6212
|
|
6213
|
+
// aliases for common use of structure types; BlurImage, CharcoalImage, EmbossImage, GaussianBlurImage, SharpenImage
|
6214
|
+
typedef GVL_STRUCT_TYPE(BlurImage) GVL_STRUCT_TYPE(effect_image);
|
6215
|
+
|
5867
6216
|
/**
|
5868
6217
|
* Call one of the effects methods.
|
5869
6218
|
*
|
@@ -5876,7 +6225,7 @@ Image_edge(int argc, VALUE *argv, VALUE self)
|
|
5876
6225
|
* @return a new image
|
5877
6226
|
*/
|
5878
6227
|
static VALUE
|
5879
|
-
effect_image(VALUE self, int argc, VALUE *argv,
|
6228
|
+
effect_image(VALUE self, int argc, VALUE *argv, gvl_function_t fp)
|
5880
6229
|
{
|
5881
6230
|
Image *image, *new_image;
|
5882
6231
|
ExceptionInfo *exception;
|
@@ -5903,7 +6252,8 @@ effect_image(VALUE self, int argc, VALUE *argv, effector_t effector)
|
|
5903
6252
|
}
|
5904
6253
|
|
5905
6254
|
exception = AcquireExceptionInfo();
|
5906
|
-
|
6255
|
+
GVL_STRUCT_TYPE(effect_image) args = { image, radius, sigma, exception };
|
6256
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
5907
6257
|
rm_check_exception(exception, new_image, DestroyOnError);
|
5908
6258
|
DestroyExceptionInfo(exception);
|
5909
6259
|
|
@@ -5922,7 +6272,7 @@ effect_image(VALUE self, int argc, VALUE *argv, effector_t effector)
|
|
5922
6272
|
VALUE
|
5923
6273
|
Image_emboss(int argc, VALUE *argv, VALUE self)
|
5924
6274
|
{
|
5925
|
-
return effect_image(self, argc, argv, EmbossImage);
|
6275
|
+
return effect_image(self, argc, argv, GVL_FUNC(EmbossImage));
|
5926
6276
|
}
|
5927
6277
|
|
5928
6278
|
|
@@ -5948,7 +6298,8 @@ Image_encipher(VALUE self, VALUE passphrase)
|
|
5948
6298
|
|
5949
6299
|
new_image = rm_clone_image(image);
|
5950
6300
|
|
5951
|
-
|
6301
|
+
GVL_STRUCT_TYPE(EncipherImage) args = { new_image, pf, exception };
|
6302
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EncipherImage), &args);
|
5952
6303
|
rm_check_exception(exception, new_image, DestroyOnError);
|
5953
6304
|
if (!okay)
|
5954
6305
|
{
|
@@ -6004,7 +6355,8 @@ Image_enhance(VALUE self)
|
|
6004
6355
|
image = rm_check_destroyed(self);
|
6005
6356
|
exception = AcquireExceptionInfo();
|
6006
6357
|
|
6007
|
-
|
6358
|
+
GVL_STRUCT_TYPE(EnhanceImage) args = { image, exception };
|
6359
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EnhanceImage), &args);
|
6008
6360
|
rm_check_exception(exception, new_image, DestroyOnError);
|
6009
6361
|
DestroyExceptionInfo(exception);
|
6010
6362
|
|
@@ -6030,11 +6382,13 @@ Image_equalize(VALUE self)
|
|
6030
6382
|
|
6031
6383
|
#if defined(IMAGEMAGICK_7)
|
6032
6384
|
exception = AcquireExceptionInfo();
|
6033
|
-
EqualizeImage
|
6385
|
+
GVL_STRUCT_TYPE(EqualizeImage) args = { new_image, exception };
|
6386
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EqualizeImage), &args);
|
6034
6387
|
rm_check_exception(exception, new_image, DestroyOnError);
|
6035
6388
|
DestroyExceptionInfo(exception);
|
6036
6389
|
#else
|
6037
|
-
EqualizeImage
|
6390
|
+
GVL_STRUCT_TYPE(EqualizeImage) args = { new_image };
|
6391
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EqualizeImage), &args);
|
6038
6392
|
rm_check_image_exception(new_image, DestroyOnError);
|
6039
6393
|
#endif
|
6040
6394
|
|
@@ -6074,12 +6428,14 @@ Image_equalize_channel(int argc, VALUE *argv, VALUE self)
|
|
6074
6428
|
#if defined(IMAGEMAGICK_7)
|
6075
6429
|
exception = AcquireExceptionInfo();
|
6076
6430
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
6077
|
-
EqualizeImage
|
6431
|
+
GVL_STRUCT_TYPE(EqualizeImage) args = { new_image, exception };
|
6432
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EqualizeImage), &args);
|
6078
6433
|
END_CHANNEL_MASK(new_image);
|
6079
6434
|
rm_check_exception(exception, new_image, DestroyOnError);
|
6080
6435
|
DestroyExceptionInfo(exception);
|
6081
6436
|
#else
|
6082
|
-
EqualizeImageChannel
|
6437
|
+
GVL_STRUCT_TYPE(EqualizeImageChannel) args = { new_image, channels };
|
6438
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EqualizeImageChannel), &args);
|
6083
6439
|
|
6084
6440
|
rm_check_image_exception(new_image, DestroyOnError);
|
6085
6441
|
#endif
|
@@ -6105,11 +6461,13 @@ Image_erase_bang(VALUE self)
|
|
6105
6461
|
|
6106
6462
|
#if defined(IMAGEMAGICK_7)
|
6107
6463
|
exception = AcquireExceptionInfo();
|
6108
|
-
SetImageBackgroundColor
|
6464
|
+
GVL_STRUCT_TYPE(SetImageBackgroundColor) args = { image, exception };
|
6465
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageBackgroundColor), &args);
|
6109
6466
|
CHECK_EXCEPTION();
|
6110
6467
|
DestroyExceptionInfo(exception);
|
6111
6468
|
#else
|
6112
|
-
SetImageBackgroundColor
|
6469
|
+
GVL_STRUCT_TYPE(SetImageBackgroundColor) args = { image };
|
6470
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageBackgroundColor), &args);
|
6113
6471
|
rm_check_image_exception(image, RetainOnError);
|
6114
6472
|
#endif
|
6115
6473
|
|
@@ -6151,10 +6509,11 @@ excerpt(int bang, VALUE self, VALUE x, VALUE y, VALUE width, VALUE height)
|
|
6151
6509
|
rect.width = NUM2ULONG(width);
|
6152
6510
|
rect.height = NUM2ULONG(height);
|
6153
6511
|
|
6154
|
-
|
6512
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
6155
6513
|
|
6156
6514
|
exception = AcquireExceptionInfo();
|
6157
|
-
|
6515
|
+
GVL_STRUCT_TYPE(ExcerptImage) args = { image, &rect, exception };
|
6516
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ExcerptImage), &args);
|
6158
6517
|
rm_check_exception(exception, new_image, DestroyOnError);
|
6159
6518
|
DestroyExceptionInfo(exception);
|
6160
6519
|
|
@@ -6242,7 +6601,7 @@ Image_export_pixels(int argc, VALUE *argv, VALUE self)
|
|
6242
6601
|
long x_off = 0L, y_off = 0L;
|
6243
6602
|
unsigned long cols, rows;
|
6244
6603
|
long n, npixels;
|
6245
|
-
|
6604
|
+
MagickBooleanType okay;
|
6246
6605
|
const char *map = "RGB";
|
6247
6606
|
Quantum *pixels;
|
6248
6607
|
VALUE ary;
|
@@ -6289,7 +6648,8 @@ Image_export_pixels(int argc, VALUE *argv, VALUE self)
|
|
6289
6648
|
|
6290
6649
|
exception = AcquireExceptionInfo();
|
6291
6650
|
|
6292
|
-
|
6651
|
+
GVL_STRUCT_TYPE(ExportImagePixels) args = { image, x_off, y_off, cols, rows, map, QuantumPixel, (void *)pixels, exception };
|
6652
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ExportImagePixels), &args);
|
6293
6653
|
if (!okay)
|
6294
6654
|
{
|
6295
6655
|
xfree((void *)pixels);
|
@@ -6371,10 +6731,11 @@ Image_extent(int argc, VALUE *argv, VALUE self)
|
|
6371
6731
|
}
|
6372
6732
|
|
6373
6733
|
|
6374
|
-
|
6734
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
6375
6735
|
exception = AcquireExceptionInfo();
|
6376
6736
|
|
6377
|
-
|
6737
|
+
GVL_STRUCT_TYPE(ExtentImage) args = { image, &geometry, exception };
|
6738
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ExtentImage), &args);
|
6378
6739
|
rm_check_exception(exception, new_image, DestroyOnError);
|
6379
6740
|
DestroyExceptionInfo(exception);
|
6380
6741
|
|
@@ -6406,7 +6767,7 @@ Image_export_pixels_to_str(int argc, VALUE *argv, VALUE self)
|
|
6406
6767
|
unsigned long cols, rows;
|
6407
6768
|
unsigned long npixels;
|
6408
6769
|
size_t sz;
|
6409
|
-
|
6770
|
+
MagickBooleanType okay;
|
6410
6771
|
const char *map = "RGB";
|
6411
6772
|
StorageType type = CharPixel;
|
6412
6773
|
VALUE string;
|
@@ -6479,7 +6840,8 @@ Image_export_pixels_to_str(int argc, VALUE *argv, VALUE self)
|
|
6479
6840
|
|
6480
6841
|
exception = AcquireExceptionInfo();
|
6481
6842
|
|
6482
|
-
|
6843
|
+
GVL_STRUCT_TYPE(ExportImagePixels) args = { image, x_off, y_off, cols, rows, map, type, (void *)RSTRING_PTR(string), exception };
|
6844
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ExportImagePixels), &args);
|
6483
6845
|
if (!okay)
|
6484
6846
|
{
|
6485
6847
|
// Let GC have the string buffer.
|
@@ -6534,7 +6896,7 @@ Image_extract_info_eq(VALUE self, VALUE rect)
|
|
6534
6896
|
VALUE
|
6535
6897
|
Image_filename(VALUE self)
|
6536
6898
|
{
|
6537
|
-
|
6899
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, filename, str, &rm_image_data_type);
|
6538
6900
|
}
|
6539
6901
|
|
6540
6902
|
|
@@ -6601,7 +6963,7 @@ Image_find_similar_region(int argc, VALUE *argv, VALUE self)
|
|
6601
6963
|
VALUE region, targ;
|
6602
6964
|
ssize_t x = 0L, y = 0L;
|
6603
6965
|
ExceptionInfo *exception;
|
6604
|
-
|
6966
|
+
MagickBooleanType okay;
|
6605
6967
|
|
6606
6968
|
image = rm_check_destroyed(self);
|
6607
6969
|
|
@@ -6621,7 +6983,13 @@ Image_find_similar_region(int argc, VALUE *argv, VALUE self)
|
|
6621
6983
|
}
|
6622
6984
|
|
6623
6985
|
exception = AcquireExceptionInfo();
|
6624
|
-
|
6986
|
+
#if defined(IMAGEMAGICK_7)
|
6987
|
+
GVL_STRUCT_TYPE(IsEquivalentImage) args = { image, target, &x, &y, exception };
|
6988
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(IsEquivalentImage), &args);
|
6989
|
+
#else
|
6990
|
+
GVL_STRUCT_TYPE(IsImageSimilar) args = { image, target, &x, &y, exception };
|
6991
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(IsImageSimilar), &args);
|
6992
|
+
#endif
|
6625
6993
|
CHECK_EXCEPTION();
|
6626
6994
|
DestroyExceptionInfo(exception);
|
6627
6995
|
|
@@ -6641,6 +7009,9 @@ Image_find_similar_region(int argc, VALUE *argv, VALUE self)
|
|
6641
7009
|
}
|
6642
7010
|
|
6643
7011
|
|
7012
|
+
// aliases for common use of structure types; FlopImage, FlipImage
|
7013
|
+
typedef GVL_STRUCT_TYPE(FlipImage) GVL_STRUCT_TYPE(flipflop);
|
7014
|
+
|
6644
7015
|
/**
|
6645
7016
|
* Call a flipflopper (a function that either flips or flops the image).
|
6646
7017
|
*
|
@@ -6656,15 +7027,16 @@ Image_find_similar_region(int argc, VALUE *argv, VALUE self)
|
|
6656
7027
|
* @see Image_flop_bang
|
6657
7028
|
*/
|
6658
7029
|
static VALUE
|
6659
|
-
flipflop(int bang, VALUE self,
|
7030
|
+
flipflop(int bang, VALUE self, gvl_function_t fp)
|
6660
7031
|
{
|
6661
7032
|
Image *image, *new_image;
|
6662
7033
|
ExceptionInfo *exception;
|
6663
7034
|
|
6664
|
-
|
7035
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
6665
7036
|
exception = AcquireExceptionInfo();
|
6666
7037
|
|
6667
|
-
|
7038
|
+
GVL_STRUCT_TYPE(flipflop) args = { image, exception };
|
7039
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
6668
7040
|
rm_check_exception(exception, new_image, DestroyOnError);
|
6669
7041
|
DestroyExceptionInfo(exception);
|
6670
7042
|
|
@@ -6692,7 +7064,7 @@ VALUE
|
|
6692
7064
|
Image_flip(VALUE self)
|
6693
7065
|
{
|
6694
7066
|
rm_check_destroyed(self);
|
6695
|
-
return flipflop(False, self, FlipImage);
|
7067
|
+
return flipflop(False, self, GVL_FUNC(FlipImage));
|
6696
7068
|
}
|
6697
7069
|
|
6698
7070
|
|
@@ -6709,7 +7081,7 @@ VALUE
|
|
6709
7081
|
Image_flip_bang(VALUE self)
|
6710
7082
|
{
|
6711
7083
|
rm_check_frozen(self);
|
6712
|
-
return flipflop(True, self, FlipImage);
|
7084
|
+
return flipflop(True, self, GVL_FUNC(FlipImage));
|
6713
7085
|
}
|
6714
7086
|
|
6715
7087
|
|
@@ -6725,7 +7097,7 @@ VALUE
|
|
6725
7097
|
Image_flop(VALUE self)
|
6726
7098
|
{
|
6727
7099
|
rm_check_destroyed(self);
|
6728
|
-
return flipflop(False, self, FlopImage);
|
7100
|
+
return flipflop(False, self, GVL_FUNC(FlopImage));
|
6729
7101
|
}
|
6730
7102
|
|
6731
7103
|
|
@@ -6742,7 +7114,7 @@ VALUE
|
|
6742
7114
|
Image_flop_bang(VALUE self)
|
6743
7115
|
{
|
6744
7116
|
rm_check_frozen(self);
|
6745
|
-
return flipflop(True, self, FlopImage);
|
7117
|
+
return flipflop(True, self, GVL_FUNC(FlopImage));
|
6746
7118
|
}
|
6747
7119
|
|
6748
7120
|
|
@@ -6862,10 +7234,11 @@ Image_frame(int argc, VALUE *argv, VALUE self)
|
|
6862
7234
|
|
6863
7235
|
exception = AcquireExceptionInfo();
|
6864
7236
|
#if defined(IMAGEMAGICK_7)
|
6865
|
-
|
7237
|
+
GVL_STRUCT_TYPE(FrameImage) args = { image, &frame_info, image->compose, exception };
|
6866
7238
|
#else
|
6867
|
-
|
7239
|
+
GVL_STRUCT_TYPE(FrameImage) args = { image, &frame_info, exception };
|
6868
7240
|
#endif
|
7241
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FrameImage), &args);
|
6869
7242
|
rm_check_exception(exception, new_image, DestroyOnError);
|
6870
7243
|
DestroyExceptionInfo(exception);
|
6871
7244
|
|
@@ -6882,7 +7255,7 @@ Image_frame(int argc, VALUE *argv, VALUE self)
|
|
6882
7255
|
* @overload from_blob(blob)
|
6883
7256
|
* This yields {Magick::Image::Info} to block with its object's scope.
|
6884
7257
|
* @param blob [String] the blob data
|
6885
|
-
* @yield []
|
7258
|
+
* @yield [Magick::Image::Info]
|
6886
7259
|
*
|
6887
7260
|
* @return [Array<Magick::Image>] an array of new images
|
6888
7261
|
* @see Image#to_blob
|
@@ -6901,10 +7274,11 @@ Image_from_blob(VALUE class ATTRIBUTE_UNUSED, VALUE blob_arg)
|
|
6901
7274
|
|
6902
7275
|
// Get a new Info object - run the parm block if supplied
|
6903
7276
|
info_obj = rm_info_new();
|
6904
|
-
|
7277
|
+
TypedData_Get_Struct(info_obj, Info, &rm_info_data_type, info);
|
6905
7278
|
|
6906
7279
|
exception = AcquireExceptionInfo();
|
6907
|
-
|
7280
|
+
GVL_STRUCT_TYPE(BlobToImage) args = { info, blob, (size_t)length, exception };
|
7281
|
+
images = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlobToImage), &args);
|
6908
7282
|
rm_check_exception(exception, images, DestroyOnError);
|
6909
7283
|
|
6910
7284
|
DestroyExceptionInfo(exception);
|
@@ -7004,10 +7378,12 @@ Image_function_channel(int argc, VALUE *argv, VALUE self)
|
|
7004
7378
|
new_image = rm_clone_image(image);
|
7005
7379
|
#if defined(IMAGEMAGICK_7)
|
7006
7380
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
7007
|
-
FunctionImage
|
7381
|
+
GVL_STRUCT_TYPE(FunctionImage) args = { new_image, function, nparms, parms, exception };
|
7382
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FunctionImage), &args);
|
7008
7383
|
END_CHANNEL_MASK(new_image);
|
7009
7384
|
#else
|
7010
|
-
FunctionImageChannel
|
7385
|
+
GVL_STRUCT_TYPE(FunctionImageChannel) args = { new_image, channels, function, nparms, parms, exception };
|
7386
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FunctionImageChannel), &args);
|
7011
7387
|
#endif
|
7012
7388
|
xfree(parms);
|
7013
7389
|
rm_check_exception(exception, new_image, DestroyOnError);
|
@@ -7028,7 +7404,7 @@ Image_function_channel(int argc, VALUE *argv, VALUE self)
|
|
7028
7404
|
VALUE
|
7029
7405
|
Image_fuzz(VALUE self)
|
7030
7406
|
{
|
7031
|
-
|
7407
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, fuzz, dbl, &rm_image_data_type);
|
7032
7408
|
}
|
7033
7409
|
|
7034
7410
|
|
@@ -7088,11 +7464,13 @@ Image_fx(int argc, VALUE *argv, VALUE self)
|
|
7088
7464
|
exception = AcquireExceptionInfo();
|
7089
7465
|
#if defined(IMAGEMAGICK_7)
|
7090
7466
|
BEGIN_CHANNEL_MASK(image, channels);
|
7091
|
-
|
7467
|
+
GVL_STRUCT_TYPE(FxImage) args = { image, expression, exception };
|
7468
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FxImage), &args);
|
7092
7469
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
7093
7470
|
END_CHANNEL_MASK(image);
|
7094
7471
|
#else
|
7095
|
-
|
7472
|
+
GVL_STRUCT_TYPE(FxImageChannel) args = { image, channels, expression, exception };
|
7473
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FxImageChannel), &args);
|
7096
7474
|
#endif
|
7097
7475
|
rm_check_exception(exception, new_image, DestroyOnError);
|
7098
7476
|
DestroyExceptionInfo(exception);
|
@@ -7108,7 +7486,7 @@ Image_fx(int argc, VALUE *argv, VALUE self)
|
|
7108
7486
|
VALUE
|
7109
7487
|
Image_gamma(VALUE self)
|
7110
7488
|
{
|
7111
|
-
|
7489
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, gamma, dbl, &rm_image_data_type);
|
7112
7490
|
}
|
7113
7491
|
|
7114
7492
|
/**
|
@@ -7120,7 +7498,7 @@ Image_gamma(VALUE self)
|
|
7120
7498
|
VALUE
|
7121
7499
|
Image_gamma_eq(VALUE self, VALUE val)
|
7122
7500
|
{
|
7123
|
-
|
7501
|
+
IMPLEMENT_TYPED_ATTR_WRITER(Image, gamma, dbl, &rm_image_data_type);
|
7124
7502
|
}
|
7125
7503
|
|
7126
7504
|
|
@@ -7168,12 +7546,14 @@ Image_gamma_channel(int argc, VALUE *argv, VALUE self)
|
|
7168
7546
|
#if defined(IMAGEMAGICK_7)
|
7169
7547
|
exception = AcquireExceptionInfo();
|
7170
7548
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
7171
|
-
GammaImage
|
7549
|
+
GVL_STRUCT_TYPE(GammaImage) args = { new_image, gamma, exception };
|
7550
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImage), &args);
|
7172
7551
|
END_CHANNEL_MASK(new_image);
|
7173
7552
|
rm_check_exception(exception, new_image, DestroyOnError);
|
7174
7553
|
DestroyExceptionInfo(exception);
|
7175
7554
|
#else
|
7176
|
-
GammaImageChannel
|
7555
|
+
GVL_STRUCT_TYPE(GammaImageChannel) args = { new_image, channels, gamma };
|
7556
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImageChannel), &args);
|
7177
7557
|
rm_check_image_exception(new_image, DestroyOnError);
|
7178
7558
|
#endif
|
7179
7559
|
|
@@ -7229,30 +7609,40 @@ Image_gamma_correct(int argc, VALUE *argv, VALUE self)
|
|
7229
7609
|
{
|
7230
7610
|
#if defined(IMAGEMAGICK_7)
|
7231
7611
|
BEGIN_CHANNEL_MASK(new_image, (ChannelType) (RedChannel | GreenChannel | BlueChannel));
|
7232
|
-
GammaImage
|
7612
|
+
GVL_STRUCT_TYPE(GammaImage) args = { new_image, red_gamma, exception };
|
7613
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImage), &args);
|
7233
7614
|
END_CHANNEL_MASK(new_image);
|
7234
7615
|
#else
|
7235
|
-
GammaImageChannel
|
7616
|
+
GVL_STRUCT_TYPE(GammaImageChannel) args = { new_image, (ChannelType) (RedChannel | GreenChannel | BlueChannel), red_gamma };
|
7617
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImageChannel), &args);
|
7236
7618
|
#endif
|
7237
7619
|
}
|
7238
7620
|
else
|
7239
7621
|
{
|
7240
7622
|
#if defined(IMAGEMAGICK_7)
|
7241
7623
|
BEGIN_CHANNEL_MASK(new_image, RedChannel);
|
7242
|
-
GammaImage
|
7624
|
+
GVL_STRUCT_TYPE(GammaImage) args1 = { new_image, red_gamma, exception };
|
7625
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImage), &args1);
|
7243
7626
|
END_CHANNEL_MASK(new_image);
|
7244
7627
|
|
7245
7628
|
BEGIN_CHANNEL_MASK(new_image, GreenChannel);
|
7246
|
-
GammaImage
|
7629
|
+
GVL_STRUCT_TYPE(GammaImage) args2 = { new_image, green_gamma, exception };
|
7630
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImage), &args2);
|
7247
7631
|
END_CHANNEL_MASK(new_image);
|
7248
7632
|
|
7249
7633
|
BEGIN_CHANNEL_MASK(new_image, BlueChannel);
|
7250
|
-
GammaImage
|
7634
|
+
GVL_STRUCT_TYPE(GammaImage) args3 = { new_image, blue_gamma, exception };
|
7635
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImage), &args3);
|
7251
7636
|
END_CHANNEL_MASK(new_image);
|
7252
7637
|
#else
|
7253
|
-
GammaImageChannel
|
7254
|
-
GammaImageChannel
|
7255
|
-
|
7638
|
+
GVL_STRUCT_TYPE(GammaImageChannel) args1 = { new_image, RedChannel, red_gamma };
|
7639
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImageChannel), &args1);
|
7640
|
+
|
7641
|
+
GVL_STRUCT_TYPE(GammaImageChannel) args2 = { new_image, GreenChannel, green_gamma };
|
7642
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImageChannel), &args2);
|
7643
|
+
|
7644
|
+
GVL_STRUCT_TYPE(GammaImageChannel) args3 = { new_image, BlueChannel, blue_gamma };
|
7645
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GammaImageChannel), &args3);
|
7256
7646
|
#endif
|
7257
7647
|
}
|
7258
7648
|
|
@@ -7278,7 +7668,7 @@ Image_gamma_correct(int argc, VALUE *argv, VALUE self)
|
|
7278
7668
|
VALUE
|
7279
7669
|
Image_gaussian_blur(int argc, VALUE *argv, VALUE self)
|
7280
7670
|
{
|
7281
|
-
return effect_image(self, argc, argv, GaussianBlurImage);
|
7671
|
+
return effect_image(self, argc, argv, GVL_FUNC(GaussianBlurImage));
|
7282
7672
|
}
|
7283
7673
|
|
7284
7674
|
|
@@ -7326,12 +7716,14 @@ Image_gaussian_blur_channel(int argc, VALUE *argv, VALUE self)
|
|
7326
7716
|
exception = AcquireExceptionInfo();
|
7327
7717
|
#if defined(IMAGEMAGICK_7)
|
7328
7718
|
BEGIN_CHANNEL_MASK(image, channels);
|
7329
|
-
|
7719
|
+
GVL_STRUCT_TYPE(GaussianBlurImage) args = { image, radius, sigma, exception };
|
7720
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GaussianBlurImage), &args);
|
7330
7721
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
7331
7722
|
END_CHANNEL_MASK(image);
|
7332
7723
|
rm_check_exception(exception, new_image, DestroyOnError);
|
7333
7724
|
#else
|
7334
|
-
|
7725
|
+
GVL_STRUCT_TYPE(GaussianBlurImageChannel) args = { image, channels, radius, sigma, exception };
|
7726
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GaussianBlurImageChannel), &args);
|
7335
7727
|
rm_check_exception(exception, new_image, DestroyOnError);
|
7336
7728
|
#endif
|
7337
7729
|
|
@@ -7350,7 +7742,7 @@ Image_gaussian_blur_channel(int argc, VALUE *argv, VALUE self)
|
|
7350
7742
|
VALUE
|
7351
7743
|
Image_geometry(VALUE self)
|
7352
7744
|
{
|
7353
|
-
|
7745
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, geometry, str, &rm_image_data_type);
|
7354
7746
|
}
|
7355
7747
|
|
7356
7748
|
|
@@ -7434,7 +7826,8 @@ Image_get_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg, VALUE row
|
|
7434
7826
|
// Cast AcquireImagePixels to get rid of the const qualifier. We're not going
|
7435
7827
|
// to change the pixels but I don't want to make "pixels" const.
|
7436
7828
|
exception = AcquireExceptionInfo();
|
7437
|
-
|
7829
|
+
GVL_STRUCT_TYPE(GetVirtualPixels) args = { image, x, y, columns, rows, exception };
|
7830
|
+
pixels = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetVirtualPixels), &args);
|
7438
7831
|
CHECK_EXCEPTION();
|
7439
7832
|
|
7440
7833
|
DestroyExceptionInfo(exception);
|
@@ -7611,10 +8004,11 @@ Image_implode(int argc, VALUE *argv, VALUE self)
|
|
7611
8004
|
exception = AcquireExceptionInfo();
|
7612
8005
|
|
7613
8006
|
#if defined(IMAGEMAGICK_7)
|
7614
|
-
|
8007
|
+
GVL_STRUCT_TYPE(ImplodeImage) args = { image, amount, image->interpolate, exception };
|
7615
8008
|
#else
|
7616
|
-
|
8009
|
+
GVL_STRUCT_TYPE(ImplodeImage) args = { image, amount, exception };
|
7617
8010
|
#endif
|
8011
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ImplodeImage), &args);
|
7618
8012
|
rm_check_exception(exception, new_image, DestroyOnError);
|
7619
8013
|
DestroyExceptionInfo(exception);
|
7620
8014
|
|
@@ -7654,7 +8048,7 @@ Image_import_pixels(int argc, VALUE *argv, VALUE self)
|
|
7654
8048
|
Quantum *pixels = NULL;
|
7655
8049
|
double *fpixels = NULL;
|
7656
8050
|
void *buffer;
|
7657
|
-
|
8051
|
+
MagickBooleanType okay;
|
7658
8052
|
#if defined(IMAGEMAGICK_7)
|
7659
8053
|
ExceptionInfo *exception;
|
7660
8054
|
#endif
|
@@ -7791,10 +8185,11 @@ Image_import_pixels(int argc, VALUE *argv, VALUE self)
|
|
7791
8185
|
|
7792
8186
|
#if defined(IMAGEMAGICK_7)
|
7793
8187
|
exception = AcquireExceptionInfo();
|
7794
|
-
|
8188
|
+
GVL_STRUCT_TYPE(ImportImagePixels) args = { image, x_off, y_off, cols, rows, map, stg_type, buffer, exception };
|
7795
8189
|
#else
|
7796
|
-
|
8190
|
+
GVL_STRUCT_TYPE(ImportImagePixels) args = { image, x_off, y_off, cols, rows, map, stg_type, buffer };
|
7797
8191
|
#endif
|
8192
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ImportImagePixels), &args);
|
7798
8193
|
|
7799
8194
|
// Free pixel array before checking for errors.
|
7800
8195
|
if (pixels)
|
@@ -7981,7 +8376,7 @@ Image_inspect(VALUE self)
|
|
7981
8376
|
Image *image;
|
7982
8377
|
char buffer[MaxTextExtent]; // image description buffer
|
7983
8378
|
|
7984
|
-
|
8379
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
7985
8380
|
if (!image)
|
7986
8381
|
{
|
7987
8382
|
return rb_str_new2("#<Magick::Image: (destroyed)>");
|
@@ -8074,12 +8469,12 @@ Image_iptc_profile_eq(VALUE self, VALUE profile)
|
|
8074
8469
|
VALUE
|
8075
8470
|
Image_iterations(VALUE self)
|
8076
8471
|
{
|
8077
|
-
|
8472
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, iterations, int, &rm_image_data_type);
|
8078
8473
|
}
|
8079
8474
|
VALUE
|
8080
8475
|
Image_iterations_eq(VALUE self, VALUE val)
|
8081
8476
|
{
|
8082
|
-
|
8477
|
+
IMPLEMENT_TYPED_ATTR_WRITER(Image, iterations, int, &rm_image_data_type);
|
8083
8478
|
}
|
8084
8479
|
|
8085
8480
|
/**
|
@@ -8130,12 +8525,14 @@ Image_level2(int argc, VALUE *argv, VALUE self)
|
|
8130
8525
|
|
8131
8526
|
#if defined(IMAGEMAGICK_7)
|
8132
8527
|
exception = AcquireExceptionInfo();
|
8133
|
-
LevelImage
|
8528
|
+
GVL_STRUCT_TYPE(LevelImage) args = { new_image, black_point, white_point, gamma_val, exception };
|
8529
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelImage), &args);
|
8134
8530
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8135
8531
|
DestroyExceptionInfo(exception);
|
8136
8532
|
#else
|
8137
8533
|
snprintf(level, sizeof(level), "%gx%g+%g", black_point, white_point, gamma_val);
|
8138
|
-
LevelImage
|
8534
|
+
GVL_STRUCT_TYPE(LevelImage) args = { new_image, level };
|
8535
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelImage), &args);
|
8139
8536
|
rm_check_image_exception(new_image, DestroyOnError);
|
8140
8537
|
#endif
|
8141
8538
|
|
@@ -8194,12 +8591,14 @@ Image_level_channel(int argc, VALUE *argv, VALUE self)
|
|
8194
8591
|
#if defined(IMAGEMAGICK_7)
|
8195
8592
|
exception = AcquireExceptionInfo();
|
8196
8593
|
BEGIN_CHANNEL_MASK(new_image, channel);
|
8197
|
-
LevelImage
|
8594
|
+
GVL_STRUCT_TYPE(LevelImage) args = { new_image, black_point, white_point, gamma_val, exception };
|
8595
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelImage), &args);
|
8198
8596
|
END_CHANNEL_MASK(new_image);
|
8199
8597
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8200
8598
|
DestroyExceptionInfo(exception);
|
8201
8599
|
#else
|
8202
|
-
LevelImageChannel
|
8600
|
+
GVL_STRUCT_TYPE(LevelImageChannel) args = { new_image, channel, black_point, white_point, gamma_val };
|
8601
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelImageChannel), &args);
|
8203
8602
|
rm_check_image_exception(new_image, DestroyOnError);
|
8204
8603
|
#endif
|
8205
8604
|
|
@@ -8275,12 +8674,14 @@ Image_level_colors(int argc, VALUE *argv, VALUE self)
|
|
8275
8674
|
#if defined(IMAGEMAGICK_7)
|
8276
8675
|
exception = AcquireExceptionInfo();
|
8277
8676
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
8278
|
-
|
8677
|
+
GVL_STRUCT_TYPE(LevelImageColors) args = { new_image, &black_color, &white_color, invert, exception };
|
8678
|
+
status = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelImageColors), &args);
|
8279
8679
|
END_CHANNEL_MASK(new_image);
|
8280
8680
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8281
8681
|
DestroyExceptionInfo(exception);
|
8282
8682
|
#else
|
8283
|
-
|
8683
|
+
GVL_STRUCT_TYPE(LevelColorsImageChannel) args = { new_image, channels, &black_color, &white_color, invert };
|
8684
|
+
status = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelColorsImageChannel), &args);
|
8284
8685
|
rm_check_image_exception(new_image, DestroyOnError);
|
8285
8686
|
#endif
|
8286
8687
|
if (!status)
|
@@ -8350,12 +8751,14 @@ Image_levelize_channel(int argc, VALUE *argv, VALUE self)
|
|
8350
8751
|
#if defined(IMAGEMAGICK_7)
|
8351
8752
|
exception = AcquireExceptionInfo();
|
8352
8753
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
8353
|
-
|
8754
|
+
GVL_STRUCT_TYPE(LevelizeImage) args = { new_image, black_point, white_point, gamma, exception };
|
8755
|
+
status = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelizeImage), &args);
|
8354
8756
|
END_CHANNEL_MASK(new_image);
|
8355
8757
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8356
8758
|
DestroyExceptionInfo(exception);
|
8357
8759
|
#else
|
8358
|
-
|
8760
|
+
GVL_STRUCT_TYPE(LevelizeImageChannel) args = { new_image, channels, black_point, white_point, gamma };
|
8761
|
+
status = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelizeImageChannel), &args);
|
8359
8762
|
rm_check_image_exception(new_image, DestroyOnError);
|
8360
8763
|
#endif
|
8361
8764
|
|
@@ -8396,11 +8799,13 @@ Image_linear_stretch(int argc, VALUE *argv, VALUE self)
|
|
8396
8799
|
|
8397
8800
|
#if defined(IMAGEMAGICK_7)
|
8398
8801
|
exception = AcquireExceptionInfo();
|
8399
|
-
LinearStretchImage
|
8802
|
+
GVL_STRUCT_TYPE(LinearStretchImage) args = { new_image, black_point, white_point, exception };
|
8803
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LinearStretchImage), &args);
|
8400
8804
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8401
8805
|
DestroyExceptionInfo(exception);
|
8402
8806
|
#else
|
8403
|
-
LinearStretchImage
|
8807
|
+
GVL_STRUCT_TYPE(LinearStretchImage) args = { new_image, black_point, white_point };
|
8808
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LinearStretchImage), &args);
|
8404
8809
|
rm_check_image_exception(new_image, DestroyOnError);
|
8405
8810
|
#endif
|
8406
8811
|
|
@@ -8446,7 +8851,8 @@ Image_liquid_rescale(int argc, VALUE *argv, VALUE self)
|
|
8446
8851
|
}
|
8447
8852
|
|
8448
8853
|
exception = AcquireExceptionInfo();
|
8449
|
-
|
8854
|
+
GVL_STRUCT_TYPE(LiquidRescaleImage) args = { image, cols, rows, delta_x, rigidity, exception };
|
8855
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LiquidRescaleImage), &args);
|
8450
8856
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8451
8857
|
DestroyExceptionInfo(exception);
|
8452
8858
|
|
@@ -8514,7 +8920,8 @@ Image__load(VALUE class ATTRIBUTE_UNUSED, VALUE str)
|
|
8514
8920
|
|
8515
8921
|
blob += offsetof(DumpedImage, magick) + mi.len;
|
8516
8922
|
length -= offsetof(DumpedImage, magick) + mi.len;
|
8517
|
-
|
8923
|
+
GVL_STRUCT_TYPE(BlobToImage) args = { info, blob, (size_t)length, exception };
|
8924
|
+
image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlobToImage), &args);
|
8518
8925
|
DestroyImageInfo(info);
|
8519
8926
|
|
8520
8927
|
rm_check_exception(exception, image, DestroyOnError);
|
@@ -8524,6 +8931,9 @@ Image__load(VALUE class ATTRIBUTE_UNUSED, VALUE str)
|
|
8524
8931
|
}
|
8525
8932
|
|
8526
8933
|
|
8934
|
+
// aliases for common use of structure types; MagnifyImage, MinifyImage
|
8935
|
+
typedef GVL_STRUCT_TYPE(MagnifyImage) GVL_STRUCT_TYPE(magnify);
|
8936
|
+
|
8527
8937
|
/**
|
8528
8938
|
* Scale an image proportionally to twice its size.
|
8529
8939
|
*
|
@@ -8535,16 +8945,17 @@ Image__load(VALUE class ATTRIBUTE_UNUSED, VALUE str)
|
|
8535
8945
|
* @return self if bang, otherwise a new image
|
8536
8946
|
*/
|
8537
8947
|
static VALUE
|
8538
|
-
magnify(int bang, VALUE self,
|
8948
|
+
magnify(int bang, VALUE self, gvl_function_t fp)
|
8539
8949
|
{
|
8540
8950
|
Image *image;
|
8541
8951
|
Image *new_image;
|
8542
8952
|
ExceptionInfo *exception;
|
8543
8953
|
|
8544
|
-
|
8954
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
8545
8955
|
exception = AcquireExceptionInfo();
|
8546
8956
|
|
8547
|
-
|
8957
|
+
GVL_STRUCT_TYPE(magnify) args = { image, exception };
|
8958
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
8548
8959
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8549
8960
|
|
8550
8961
|
DestroyExceptionInfo(exception);
|
@@ -8571,7 +8982,7 @@ VALUE
|
|
8571
8982
|
Image_magnify(VALUE self)
|
8572
8983
|
{
|
8573
8984
|
rm_check_destroyed(self);
|
8574
|
-
return magnify(False, self, MagnifyImage);
|
8985
|
+
return magnify(False, self, GVL_FUNC(MagnifyImage));
|
8575
8986
|
}
|
8576
8987
|
|
8577
8988
|
|
@@ -8586,7 +8997,7 @@ VALUE
|
|
8586
8997
|
Image_magnify_bang(VALUE self)
|
8587
8998
|
{
|
8588
8999
|
rm_check_frozen(self);
|
8589
|
-
return magnify(True, self, MagnifyImage);
|
9000
|
+
return magnify(True, self, GVL_FUNC(MagnifyImage));
|
8590
9001
|
}
|
8591
9002
|
|
8592
9003
|
|
@@ -8618,7 +9029,8 @@ Image_marshal_dump(VALUE self)
|
|
8618
9029
|
rb_ary_store(ary, 0, rb_str_new2(image->filename));
|
8619
9030
|
|
8620
9031
|
exception = AcquireExceptionInfo();
|
8621
|
-
|
9032
|
+
GVL_STRUCT_TYPE(ImageToBlob) args = { info, image, &length, exception };
|
9033
|
+
blob = (unsigned char *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ImageToBlob), &args);
|
8622
9034
|
|
8623
9035
|
// Destroy info before raising an exception
|
8624
9036
|
DestroyImageInfo(info);
|
@@ -8663,7 +9075,8 @@ Image_marshal_load(VALUE self, VALUE ary)
|
|
8663
9075
|
{
|
8664
9076
|
strlcpy(info->filename, RSTRING_PTR(filename), sizeof(info->filename));
|
8665
9077
|
}
|
8666
|
-
|
9078
|
+
GVL_STRUCT_TYPE(BlobToImage) args = { info, RSTRING_PTR(blob), RSTRING_LEN(blob), exception };
|
9079
|
+
image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlobToImage), &args);
|
8667
9080
|
|
8668
9081
|
// Destroy info before raising an exception
|
8669
9082
|
DestroyImageInfo(info);
|
@@ -8696,9 +9109,11 @@ get_image_mask(Image *image)
|
|
8696
9109
|
|
8697
9110
|
// The returned clip mask is a clone, ours to keep.
|
8698
9111
|
#if defined(IMAGEMAGICK_7)
|
8699
|
-
|
9112
|
+
GVL_STRUCT_TYPE(GetImageMask) args = { image, WritePixelMask, exception };
|
9113
|
+
mask = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageMask), &args);
|
8700
9114
|
#else
|
8701
|
-
|
9115
|
+
GVL_STRUCT_TYPE(GetImageClipMask) args = { image, exception };
|
9116
|
+
mask = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageClipMask), &args);
|
8702
9117
|
#endif
|
8703
9118
|
rm_check_exception(exception, mask, DestroyOnError);
|
8704
9119
|
|
@@ -8736,19 +9151,22 @@ set_image_mask(Image *image, VALUE mask)
|
|
8736
9151
|
// Resize if necessary
|
8737
9152
|
if (clip_mask->columns != image->columns || clip_mask->rows != image->rows)
|
8738
9153
|
{
|
8739
|
-
|
9154
|
+
GVL_STRUCT_TYPE(ResizeImage) args = { clip_mask, image->columns, image->rows, image->filter, exception };
|
9155
|
+
resized_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ResizeImage), &args);
|
8740
9156
|
DestroyImage(clip_mask);
|
8741
9157
|
rm_check_exception(exception, resized_image, DestroyOnError);
|
8742
9158
|
rm_ensure_result(resized_image);
|
8743
9159
|
clip_mask = resized_image;
|
8744
9160
|
}
|
8745
9161
|
|
8746
|
-
SetImageMask
|
9162
|
+
GVL_STRUCT_TYPE(SetImageMask) args = { image, WritePixelMask, clip_mask, exception };
|
9163
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageMask), &args);
|
8747
9164
|
DestroyImage(clip_mask);
|
8748
9165
|
}
|
8749
9166
|
else
|
8750
9167
|
{
|
8751
|
-
SetImageMask
|
9168
|
+
GVL_STRUCT_TYPE(SetImageMask) args = { image, WritePixelMask, NULL, exception };
|
9169
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageMask), &args);
|
8752
9170
|
}
|
8753
9171
|
CHECK_EXCEPTION();
|
8754
9172
|
DestroyExceptionInfo(exception);
|
@@ -8776,8 +9194,8 @@ set_image_mask(Image *image, VALUE mask)
|
|
8776
9194
|
if (clip_mask->columns != image->columns || clip_mask->rows != image->rows)
|
8777
9195
|
{
|
8778
9196
|
exception = AcquireExceptionInfo();
|
8779
|
-
|
8780
|
-
|
9197
|
+
GVL_STRUCT_TYPE(ResizeImage) args = { clip_mask, image->columns, image->rows, UndefinedFilter, 0.0, exception };
|
9198
|
+
resized_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ResizeImage), &args);
|
8781
9199
|
rm_check_exception(exception, resized_image, DestroyOnError);
|
8782
9200
|
DestroyExceptionInfo(exception);
|
8783
9201
|
rm_ensure_result(resized_image);
|
@@ -8790,7 +9208,8 @@ set_image_mask(Image *image, VALUE mask)
|
|
8790
9208
|
|
8791
9209
|
for (y = 0; y < (long) clip_mask->rows; y++)
|
8792
9210
|
{
|
8793
|
-
|
9211
|
+
GVL_STRUCT_TYPE(GetAuthenticPixels) args_GetAuthenticPixels = { clip_mask, 0, y, clip_mask->columns, 1, exception };
|
9212
|
+
q = (PixelPacket *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetAuthenticPixels), &args_GetAuthenticPixels);
|
8794
9213
|
rm_check_exception(exception, clip_mask, DestroyOnError);
|
8795
9214
|
|
8796
9215
|
if (!q)
|
@@ -8809,12 +9228,14 @@ set_image_mask(Image *image, VALUE mask)
|
|
8809
9228
|
q += 1;
|
8810
9229
|
}
|
8811
9230
|
|
8812
|
-
SyncAuthenticPixels
|
9231
|
+
GVL_STRUCT_TYPE(SyncAuthenticPixels) args_SyncAuthenticPixels = { clip_mask, exception };
|
9232
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SyncAuthenticPixels), &args_SyncAuthenticPixels);
|
8813
9233
|
rm_check_exception(exception, clip_mask, DestroyOnError);
|
8814
9234
|
}
|
8815
9235
|
DestroyExceptionInfo(exception);
|
8816
9236
|
|
8817
|
-
SetImageStorageClass
|
9237
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args_SetImageStorageClass = { clip_mask, DirectClass };
|
9238
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args_SetImageStorageClass);
|
8818
9239
|
rm_check_image_exception(clip_mask, DestroyOnError);
|
8819
9240
|
|
8820
9241
|
clip_mask->matte = MagickTrue;
|
@@ -8822,12 +9243,14 @@ set_image_mask(Image *image, VALUE mask)
|
|
8822
9243
|
// SetImageClipMask clones the clip_mask image. We can
|
8823
9244
|
// destroy our copy after SetImageClipMask is done with it.
|
8824
9245
|
|
8825
|
-
SetImageClipMask
|
9246
|
+
GVL_STRUCT_TYPE(SetImageClipMask) args_SetImageClipMask = { image, clip_mask };
|
9247
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageClipMask), &args_SetImageClipMask);
|
8826
9248
|
DestroyImage(clip_mask);
|
8827
9249
|
}
|
8828
9250
|
else
|
8829
9251
|
{
|
8830
|
-
SetImageClipMask
|
9252
|
+
GVL_STRUCT_TYPE(SetImageClipMask) args_SetImageClipMask = { image, NULL };
|
9253
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageClipMask), &args_SetImageClipMask);
|
8831
9254
|
}
|
8832
9255
|
|
8833
9256
|
RB_GC_GUARD(mask);
|
@@ -8968,7 +9391,7 @@ Image_matte_flood_fill(int argc, VALUE *argv, VALUE self)
|
|
8968
9391
|
rb_raise(rb_eNoMemError, "not enough memory to continue");
|
8969
9392
|
}
|
8970
9393
|
#if defined(IMAGEMAGICK_7)
|
8971
|
-
draw_info->fill
|
9394
|
+
rm_set_pixelinfo_alpha(&draw_info->fill, alpha);
|
8972
9395
|
#else
|
8973
9396
|
draw_info->fill.opacity = QuantumRange - alpha;
|
8974
9397
|
#endif
|
@@ -8979,6 +9402,11 @@ Image_matte_flood_fill(int argc, VALUE *argv, VALUE self)
|
|
8979
9402
|
target_mpp.red = (MagickRealType) image->border_color.red;
|
8980
9403
|
target_mpp.green = (MagickRealType) image->border_color.green;
|
8981
9404
|
target_mpp.blue = (MagickRealType) image->border_color.blue;
|
9405
|
+
#if defined(IMAGEMAGICK_7)
|
9406
|
+
rm_set_pixelinfo_alpha(&target_mpp, (MagickRealType) image->border_color.alpha);
|
9407
|
+
#else
|
9408
|
+
target_mpp.opacity = (MagickRealType) image->border_color.opacity;
|
9409
|
+
#endif
|
8982
9410
|
}
|
8983
9411
|
else
|
8984
9412
|
{
|
@@ -8986,18 +9414,25 @@ Image_matte_flood_fill(int argc, VALUE *argv, VALUE self)
|
|
8986
9414
|
target_mpp.red = (MagickRealType) target.red;
|
8987
9415
|
target_mpp.green = (MagickRealType) target.green;
|
8988
9416
|
target_mpp.blue = (MagickRealType) target.blue;
|
9417
|
+
#if defined(IMAGEMAGICK_7)
|
9418
|
+
rm_set_pixelinfo_alpha(&target_mpp, (MagickRealType) target.alpha);
|
9419
|
+
#else
|
9420
|
+
target_mpp.opacity = (MagickRealType) target.opacity;
|
9421
|
+
#endif
|
8989
9422
|
}
|
8990
9423
|
|
8991
9424
|
#if defined(IMAGEMAGICK_7)
|
8992
9425
|
exception = AcquireExceptionInfo();
|
8993
9426
|
BEGIN_CHANNEL_MASK(new_image, OpacityChannel);
|
8994
|
-
FloodfillPaintImage
|
9427
|
+
GVL_STRUCT_TYPE(FloodfillPaintImage) args = { new_image, draw_info, &target_mpp, x, y, invert, exception };
|
9428
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FloodfillPaintImage), &args);
|
8995
9429
|
END_CHANNEL_MASK(new_image);
|
8996
9430
|
DestroyDrawInfo(draw_info);
|
8997
9431
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8998
9432
|
DestroyExceptionInfo(exception);
|
8999
9433
|
#else
|
9000
|
-
FloodfillPaintImage
|
9434
|
+
GVL_STRUCT_TYPE(FloodfillPaintImage) args = { new_image, OpacityChannel, draw_info, &target_mpp, x, y, invert };
|
9435
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FloodfillPaintImage), &args);
|
9001
9436
|
DestroyDrawInfo(draw_info);
|
9002
9437
|
|
9003
9438
|
rm_check_image_exception(new_image, DestroyOnError);
|
@@ -9035,7 +9470,8 @@ Image_median_filter(int argc, VALUE *argv, VALUE self)
|
|
9035
9470
|
}
|
9036
9471
|
|
9037
9472
|
exception = AcquireExceptionInfo();
|
9038
|
-
|
9473
|
+
GVL_STRUCT_TYPE(StatisticImage) args = { image, MedianStatistic, (size_t)radius, (size_t)radius, exception };
|
9474
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(StatisticImage), &args);
|
9039
9475
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9040
9476
|
DestroyExceptionInfo(exception);
|
9041
9477
|
|
@@ -9051,7 +9487,7 @@ Image_median_filter(int argc, VALUE *argv, VALUE self)
|
|
9051
9487
|
VALUE
|
9052
9488
|
Image_mean_error_per_pixel(VALUE self)
|
9053
9489
|
{
|
9054
|
-
|
9490
|
+
IMPLEMENT_TYPED_ATTR_READERF(Image, mean_error_per_pixel, error.mean_error_per_pixel, dbl, &rm_image_data_type);
|
9055
9491
|
}
|
9056
9492
|
|
9057
9493
|
|
@@ -9094,7 +9530,7 @@ VALUE
|
|
9094
9530
|
Image_minify(VALUE self)
|
9095
9531
|
{
|
9096
9532
|
rm_check_destroyed(self);
|
9097
|
-
return magnify(False, self, MinifyImage);
|
9533
|
+
return magnify(False, self, GVL_FUNC(MinifyImage));
|
9098
9534
|
}
|
9099
9535
|
|
9100
9536
|
|
@@ -9108,7 +9544,7 @@ VALUE
|
|
9108
9544
|
Image_minify_bang(VALUE self)
|
9109
9545
|
{
|
9110
9546
|
rm_check_frozen(self);
|
9111
|
-
return magnify(True, self, MinifyImage);
|
9547
|
+
return magnify(True, self, GVL_FUNC(MinifyImage));
|
9112
9548
|
}
|
9113
9549
|
|
9114
9550
|
|
@@ -9160,11 +9596,13 @@ Image_modulate(int argc, VALUE *argv, VALUE self)
|
|
9160
9596
|
|
9161
9597
|
#if defined(IMAGEMAGICK_7)
|
9162
9598
|
exception = AcquireExceptionInfo();
|
9163
|
-
ModulateImage
|
9599
|
+
GVL_STRUCT_TYPE(ModulateImage) args = { new_image, modulate, exception };
|
9600
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ModulateImage), &args);
|
9164
9601
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9165
9602
|
DestroyExceptionInfo(exception);
|
9166
9603
|
#else
|
9167
|
-
ModulateImage
|
9604
|
+
GVL_STRUCT_TYPE(ModulateImage) args = { new_image, modulate };
|
9605
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ModulateImage), &args);
|
9168
9606
|
rm_check_image_exception(new_image, DestroyOnError);
|
9169
9607
|
#endif
|
9170
9608
|
|
@@ -9172,39 +9610,6 @@ Image_modulate(int argc, VALUE *argv, VALUE self)
|
|
9172
9610
|
}
|
9173
9611
|
|
9174
9612
|
|
9175
|
-
/**
|
9176
|
-
* Establish a progress monitor.
|
9177
|
-
*
|
9178
|
-
* - A progress monitor is a callable object. Save the monitor proc as the client_data and establish
|
9179
|
-
* `progress_monitor' as the monitor exit. When `progress_monitor' is called, retrieve the proc
|
9180
|
-
* and call it.
|
9181
|
-
*
|
9182
|
-
* @param monitor [Proc] the progress monitor
|
9183
|
-
* @return [Proc] the given value
|
9184
|
-
* @example
|
9185
|
-
* img.monitor = Proc.new do |method, offset, span|
|
9186
|
-
* print "%s is %3.0f%% complete.\n", method, (offset.to_f/span)*100)
|
9187
|
-
* true
|
9188
|
-
* end
|
9189
|
-
*/
|
9190
|
-
VALUE
|
9191
|
-
Image_monitor_eq(VALUE self, VALUE monitor)
|
9192
|
-
{
|
9193
|
-
Image *image = rm_check_frozen(self);
|
9194
|
-
|
9195
|
-
if (NIL_P(monitor))
|
9196
|
-
{
|
9197
|
-
image->progress_monitor = NULL;
|
9198
|
-
}
|
9199
|
-
else
|
9200
|
-
{
|
9201
|
-
SetImageProgressMonitor(image, rm_progress_monitor, (void *)monitor);
|
9202
|
-
}
|
9203
|
-
|
9204
|
-
return monitor;
|
9205
|
-
}
|
9206
|
-
|
9207
|
-
|
9208
9613
|
/**
|
9209
9614
|
* Return true if all the pixels in the image have the same red, green, and blue intensities and the
|
9210
9615
|
* intensity is either 0 or {Magick::QuantumRange}.
|
@@ -9230,10 +9635,13 @@ Image_monochrome_q(VALUE self)
|
|
9230
9635
|
VALUE
|
9231
9636
|
Image_montage(VALUE self)
|
9232
9637
|
{
|
9233
|
-
|
9638
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, montage, str, &rm_image_data_type);
|
9234
9639
|
}
|
9235
9640
|
|
9236
9641
|
|
9642
|
+
// aliases for common use of structure types; MotionBlurImage, SketchImage
|
9643
|
+
typedef GVL_STRUCT_TYPE(MotionBlurImage) GVL_STRUCT_TYPE(motion_blur);
|
9644
|
+
|
9237
9645
|
/**
|
9238
9646
|
* Called from Image_motion_blur and Image_sketch.
|
9239
9647
|
*
|
@@ -9248,8 +9656,7 @@ Image_montage(VALUE self)
|
|
9248
9656
|
* @see Image_sketch
|
9249
9657
|
*/
|
9250
9658
|
static VALUE
|
9251
|
-
motion_blur(int argc, VALUE *argv, VALUE self,
|
9252
|
-
Image *fp(const Image *, const double, const double, const double, ExceptionInfo *))
|
9659
|
+
motion_blur(int argc, VALUE *argv, VALUE self, gvl_function_t fp)
|
9253
9660
|
{
|
9254
9661
|
Image *image, *new_image;
|
9255
9662
|
double radius = 0.0;
|
@@ -9277,10 +9684,11 @@ motion_blur(int argc, VALUE *argv, VALUE self,
|
|
9277
9684
|
rb_raise(rb_eArgError, "sigma must be != 0.0");
|
9278
9685
|
}
|
9279
9686
|
|
9280
|
-
|
9687
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
9281
9688
|
|
9282
9689
|
exception = AcquireExceptionInfo();
|
9283
|
-
|
9690
|
+
GVL_STRUCT_TYPE(motion_blur) args = { image, radius, sigma, angle, exception };
|
9691
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
9284
9692
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9285
9693
|
DestroyExceptionInfo(exception);
|
9286
9694
|
|
@@ -9304,7 +9712,7 @@ VALUE
|
|
9304
9712
|
Image_motion_blur(int argc, VALUE *argv, VALUE self)
|
9305
9713
|
{
|
9306
9714
|
rm_check_destroyed(self);
|
9307
|
-
return motion_blur(argc, argv, self, MotionBlurImage);
|
9715
|
+
return motion_blur(argc, argv, self, GVL_FUNC(MotionBlurImage));
|
9308
9716
|
}
|
9309
9717
|
|
9310
9718
|
|
@@ -9339,11 +9747,13 @@ Image_negate(int argc, VALUE *argv, VALUE self)
|
|
9339
9747
|
|
9340
9748
|
#if defined(IMAGEMAGICK_7)
|
9341
9749
|
exception = AcquireExceptionInfo();
|
9342
|
-
NegateImage
|
9750
|
+
GVL_STRUCT_TYPE(NegateImage) args = { new_image, grayscale, exception };
|
9751
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NegateImage), &args);
|
9343
9752
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9344
9753
|
DestroyExceptionInfo(exception);
|
9345
9754
|
#else
|
9346
|
-
NegateImage
|
9755
|
+
GVL_STRUCT_TYPE(NegateImage) args = { new_image, grayscale };
|
9756
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NegateImage), &args);
|
9347
9757
|
rm_check_image_exception(new_image, DestroyOnError);
|
9348
9758
|
#endif
|
9349
9759
|
|
@@ -9396,12 +9806,14 @@ Image_negate_channel(int argc, VALUE *argv, VALUE self)
|
|
9396
9806
|
#if defined(IMAGEMAGICK_7)
|
9397
9807
|
exception = AcquireExceptionInfo();
|
9398
9808
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
9399
|
-
NegateImage
|
9809
|
+
GVL_STRUCT_TYPE(NegateImage) args = { new_image, grayscale, exception };
|
9810
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NegateImage), &args);
|
9400
9811
|
END_CHANNEL_MASK(new_image);
|
9401
9812
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9402
9813
|
DestroyExceptionInfo(exception);
|
9403
9814
|
#else
|
9404
|
-
NegateImageChannel
|
9815
|
+
GVL_STRUCT_TYPE(NegateImageChannel) args = { new_image, channels, grayscale };
|
9816
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NegateImageChannel), &args);
|
9405
9817
|
rm_check_image_exception(new_image, DestroyOnError);
|
9406
9818
|
#endif
|
9407
9819
|
|
@@ -9419,7 +9831,7 @@ Image_alloc(VALUE class)
|
|
9419
9831
|
{
|
9420
9832
|
VALUE image_obj;
|
9421
9833
|
|
9422
|
-
image_obj =
|
9834
|
+
image_obj = TypedData_Wrap_Struct(class, &rm_image_data_type, NULL);
|
9423
9835
|
|
9424
9836
|
RB_GC_GUARD(image_obj);
|
9425
9837
|
|
@@ -9463,7 +9875,7 @@ Image_initialize(int argc, VALUE *argv, VALUE self)
|
|
9463
9875
|
|
9464
9876
|
// Create a new Info object to use when creating this image.
|
9465
9877
|
info_obj = rm_info_new();
|
9466
|
-
|
9878
|
+
TypedData_Get_Struct(info_obj, Info, &rm_info_data_type, info);
|
9467
9879
|
|
9468
9880
|
image = rm_acquire_image(info);
|
9469
9881
|
if (!image)
|
@@ -9478,11 +9890,13 @@ Image_initialize(int argc, VALUE *argv, VALUE self)
|
|
9478
9890
|
|
9479
9891
|
#if defined(IMAGEMAGICK_7)
|
9480
9892
|
exception = AcquireExceptionInfo();
|
9481
|
-
SetImageExtent
|
9893
|
+
GVL_STRUCT_TYPE(SetImageExtent) args = { image, cols, rows, exception };
|
9894
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageExtent), &args);
|
9482
9895
|
CHECK_EXCEPTION();
|
9483
9896
|
DestroyExceptionInfo(exception);
|
9484
9897
|
#else
|
9485
|
-
SetImageExtent
|
9898
|
+
GVL_STRUCT_TYPE(SetImageExtent) args = { image, cols, rows };
|
9899
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageExtent), &args);
|
9486
9900
|
#endif
|
9487
9901
|
|
9488
9902
|
// If the caller did not supply a fill argument, call SetImageBackgroundColor
|
@@ -9492,11 +9906,13 @@ Image_initialize(int argc, VALUE *argv, VALUE self)
|
|
9492
9906
|
{
|
9493
9907
|
#if defined(IMAGEMAGICK_7)
|
9494
9908
|
exception = AcquireExceptionInfo();
|
9495
|
-
SetImageBackgroundColor
|
9909
|
+
GVL_STRUCT_TYPE(SetImageBackgroundColor) args = { image, exception };
|
9910
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageBackgroundColor), &args);
|
9496
9911
|
CHECK_EXCEPTION();
|
9497
9912
|
DestroyExceptionInfo(exception);
|
9498
9913
|
#else
|
9499
|
-
SetImageBackgroundColor
|
9914
|
+
GVL_STRUCT_TYPE(SetImageBackgroundColor) args = { image };
|
9915
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageBackgroundColor), &args);
|
9500
9916
|
#endif
|
9501
9917
|
}
|
9502
9918
|
// fillobj.fill(self)
|
@@ -9529,9 +9945,7 @@ rm_image_new(Image *image)
|
|
9529
9945
|
{
|
9530
9946
|
rm_ensure_result(image);
|
9531
9947
|
|
9532
|
-
|
9533
|
-
|
9534
|
-
return Data_Wrap_Struct(Class_Image, NULL, rm_image_destroy, image);
|
9948
|
+
return TypedData_Wrap_Struct(Class_Image, &rm_image_data_type, image);
|
9535
9949
|
}
|
9536
9950
|
|
9537
9951
|
|
@@ -9554,11 +9968,13 @@ Image_normalize(VALUE self)
|
|
9554
9968
|
|
9555
9969
|
#if defined(IMAGEMAGICK_7)
|
9556
9970
|
exception = AcquireExceptionInfo();
|
9557
|
-
NormalizeImage
|
9971
|
+
GVL_STRUCT_TYPE(NormalizeImage) args = { new_image, exception };
|
9972
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NormalizeImage), &args);
|
9558
9973
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9559
9974
|
DestroyExceptionInfo(exception);
|
9560
9975
|
#else
|
9561
|
-
NormalizeImage
|
9976
|
+
GVL_STRUCT_TYPE(NormalizeImage) args = { new_image };
|
9977
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NormalizeImage), &args);
|
9562
9978
|
rm_check_image_exception(new_image, DestroyOnError);
|
9563
9979
|
#endif
|
9564
9980
|
|
@@ -9596,12 +10012,14 @@ Image_normalize_channel(int argc, VALUE *argv, VALUE self)
|
|
9596
10012
|
#if defined(IMAGEMAGICK_7)
|
9597
10013
|
exception = AcquireExceptionInfo();
|
9598
10014
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
9599
|
-
NormalizeImage
|
10015
|
+
GVL_STRUCT_TYPE(NormalizeImage) args = { new_image, exception };
|
10016
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NormalizeImage), &args);
|
9600
10017
|
END_CHANNEL_MASK(new_image);
|
9601
10018
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9602
10019
|
DestroyExceptionInfo(exception);
|
9603
10020
|
#else
|
9604
|
-
NormalizeImageChannel
|
10021
|
+
GVL_STRUCT_TYPE(NormalizeImageChannel) args = { new_image, channels };
|
10022
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(NormalizeImageChannel), &args);
|
9605
10023
|
rm_check_image_exception(new_image, DestroyOnError);
|
9606
10024
|
#endif
|
9607
10025
|
|
@@ -9617,7 +10035,7 @@ Image_normalize_channel(int argc, VALUE *argv, VALUE self)
|
|
9617
10035
|
VALUE
|
9618
10036
|
Image_normalized_mean_error(VALUE self)
|
9619
10037
|
{
|
9620
|
-
|
10038
|
+
IMPLEMENT_TYPED_ATTR_READERF(Image, normalized_mean_error, error.normalized_mean_error, dbl, &rm_image_data_type);
|
9621
10039
|
}
|
9622
10040
|
|
9623
10041
|
/**
|
@@ -9628,7 +10046,7 @@ Image_normalized_mean_error(VALUE self)
|
|
9628
10046
|
VALUE
|
9629
10047
|
Image_normalized_maximum_error(VALUE self)
|
9630
10048
|
{
|
9631
|
-
|
10049
|
+
IMPLEMENT_TYPED_ATTR_READERF(Image, normalized_maximum_error, error.normalized_maximum_error, dbl, &rm_image_data_type);
|
9632
10050
|
}
|
9633
10051
|
|
9634
10052
|
|
@@ -9642,12 +10060,13 @@ Image_number_colors(VALUE self)
|
|
9642
10060
|
{
|
9643
10061
|
Image *image;
|
9644
10062
|
ExceptionInfo *exception;
|
9645
|
-
|
10063
|
+
size_t n = 0;
|
9646
10064
|
|
9647
10065
|
image = rm_check_destroyed(self);
|
9648
10066
|
exception = AcquireExceptionInfo();
|
9649
10067
|
|
9650
|
-
|
10068
|
+
GVL_STRUCT_TYPE(GetNumberColors) args = { image, NULL, exception };
|
10069
|
+
n = (size_t)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetNumberColors), &args);
|
9651
10070
|
CHECK_EXCEPTION();
|
9652
10071
|
|
9653
10072
|
DestroyExceptionInfo(exception);
|
@@ -9664,7 +10083,7 @@ Image_number_colors(VALUE self)
|
|
9664
10083
|
VALUE
|
9665
10084
|
Image_offset(VALUE self)
|
9666
10085
|
{
|
9667
|
-
|
10086
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, offset, long, &rm_image_data_type);
|
9668
10087
|
}
|
9669
10088
|
|
9670
10089
|
/**
|
@@ -9676,7 +10095,7 @@ Image_offset(VALUE self)
|
|
9676
10095
|
VALUE
|
9677
10096
|
Image_offset_eq(VALUE self, VALUE val)
|
9678
10097
|
{
|
9679
|
-
|
10098
|
+
IMPLEMENT_TYPED_ATTR_WRITER(Image, offset, long, &rm_image_data_type);
|
9680
10099
|
}
|
9681
10100
|
|
9682
10101
|
|
@@ -9712,10 +10131,11 @@ Image_oil_paint(int argc, VALUE *argv, VALUE self)
|
|
9712
10131
|
exception = AcquireExceptionInfo();
|
9713
10132
|
|
9714
10133
|
#if defined(IMAGEMAGICK_7)
|
9715
|
-
|
10134
|
+
GVL_STRUCT_TYPE(OilPaintImage) args = { image, radius, sigma, exception };
|
9716
10135
|
#else
|
9717
|
-
|
10136
|
+
GVL_STRUCT_TYPE(OilPaintImage) args = { image, radius, exception };
|
9718
10137
|
#endif
|
10138
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OilPaintImage), &args);
|
9719
10139
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9720
10140
|
DestroyExceptionInfo(exception);
|
9721
10141
|
|
@@ -9756,11 +10176,13 @@ Image_opaque(VALUE self, VALUE target, VALUE fill)
|
|
9756
10176
|
|
9757
10177
|
#if defined(IMAGEMAGICK_7)
|
9758
10178
|
exception = AcquireExceptionInfo();
|
9759
|
-
|
10179
|
+
GVL_STRUCT_TYPE(OpaquePaintImage) args = { new_image, &target_pp, &fill_pp, MagickFalse, exception };
|
10180
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OpaquePaintImage), &args);
|
9760
10181
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9761
10182
|
DestroyExceptionInfo(exception);
|
9762
10183
|
#else
|
9763
|
-
|
10184
|
+
GVL_STRUCT_TYPE(OpaquePaintImageChannel) args = { new_image, DefaultChannels, &target_pp, &fill_pp, MagickFalse };
|
10185
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OpaquePaintImageChannel), &args);
|
9764
10186
|
rm_check_image_exception(new_image, DestroyOnError);
|
9765
10187
|
#endif
|
9766
10188
|
|
@@ -9846,13 +10268,15 @@ Image_opaque_channel(int argc, VALUE *argv, VALUE self)
|
|
9846
10268
|
#if defined(IMAGEMAGICK_7)
|
9847
10269
|
exception = AcquireExceptionInfo();
|
9848
10270
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
9849
|
-
|
10271
|
+
GVL_STRUCT_TYPE(OpaquePaintImage) args = { new_image, &target_pp, &fill_pp, invert, exception };
|
10272
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OpaquePaintImage), &args);
|
9850
10273
|
END_CHANNEL_MASK(new_image);
|
9851
10274
|
new_image->fuzz = keep;
|
9852
10275
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9853
10276
|
DestroyExceptionInfo(exception);
|
9854
10277
|
#else
|
9855
|
-
|
10278
|
+
GVL_STRUCT_TYPE(OpaquePaintImageChannel) args = { new_image, channels, &target_pp, &fill_pp, invert };
|
10279
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OpaquePaintImageChannel), &args);
|
9856
10280
|
|
9857
10281
|
new_image->fuzz = keep;
|
9858
10282
|
rm_check_image_exception(new_image, DestroyOnError);
|
@@ -9937,7 +10361,13 @@ Image_ordered_dither(int argc, VALUE *argv, VALUE self)
|
|
9937
10361
|
|
9938
10362
|
exception = AcquireExceptionInfo();
|
9939
10363
|
|
9940
|
-
|
10364
|
+
#if defined(IMAGEMAGICK_7)
|
10365
|
+
GVL_STRUCT_TYPE(OrderedDitherImage) args = { new_image, threshold_map, exception };
|
10366
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OrderedDitherImage), &args);
|
10367
|
+
#else
|
10368
|
+
GVL_STRUCT_TYPE(OrderedPosterizeImage) args = { new_image, threshold_map, exception };
|
10369
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OrderedPosterizeImage), &args);
|
10370
|
+
#endif
|
9941
10371
|
rm_check_exception(exception, new_image, DestroyOnError);
|
9942
10372
|
|
9943
10373
|
DestroyExceptionInfo(exception);
|
@@ -10072,12 +10502,14 @@ Image_paint_transparent(int argc, VALUE *argv, VALUE self)
|
|
10072
10502
|
|
10073
10503
|
#if defined(IMAGEMAGICK_7)
|
10074
10504
|
exception = AcquireExceptionInfo();
|
10075
|
-
|
10505
|
+
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, (const MagickPixel *)&color, alpha, invert, exception };
|
10506
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImage), &args);
|
10076
10507
|
new_image->fuzz = keep;
|
10077
10508
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10078
10509
|
DestroyExceptionInfo(exception);
|
10079
10510
|
#else
|
10080
|
-
|
10511
|
+
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, (const MagickPixel *)&color, QuantumRange - alpha, invert };
|
10512
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImage), &args);
|
10081
10513
|
new_image->fuzz = keep;
|
10082
10514
|
|
10083
10515
|
// Is it possible for TransparentPaintImage to silently fail?
|
@@ -10120,7 +10552,7 @@ Image_palette_q(VALUE self)
|
|
10120
10552
|
VALUE
|
10121
10553
|
Image_ping(VALUE class, VALUE file_arg)
|
10122
10554
|
{
|
10123
|
-
return rd_image(class, file_arg, PingImage);
|
10555
|
+
return rd_image(class, file_arg, GVL_FUNC(PingImage));
|
10124
10556
|
}
|
10125
10557
|
|
10126
10558
|
|
@@ -10186,7 +10618,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10186
10618
|
if (!set)
|
10187
10619
|
{
|
10188
10620
|
exception = AcquireExceptionInfo();
|
10189
|
-
|
10621
|
+
GVL_STRUCT_TYPE(GetVirtualPixels) args = { image, x, y, 1, 1, exception };
|
10622
|
+
old_pixel = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetVirtualPixels), &args);
|
10190
10623
|
CHECK_EXCEPTION();
|
10191
10624
|
|
10192
10625
|
DestroyExceptionInfo(exception);
|
@@ -10238,7 +10671,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10238
10671
|
if (image->storage_class == PseudoClass)
|
10239
10672
|
{
|
10240
10673
|
#if defined(IMAGEMAGICK_7)
|
10241
|
-
|
10674
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, DirectClass, exception };
|
10675
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
10242
10676
|
CHECK_EXCEPTION();
|
10243
10677
|
if (!okay)
|
10244
10678
|
{
|
@@ -10246,7 +10680,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10246
10680
|
rb_raise(Class_ImageMagickError, "SetImageStorageClass failed. Can't set pixel color.");
|
10247
10681
|
}
|
10248
10682
|
#else
|
10249
|
-
|
10683
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, DirectClass };
|
10684
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
10250
10685
|
rm_check_image_exception(image, RetainOnError);
|
10251
10686
|
if (!okay)
|
10252
10687
|
{
|
@@ -10259,7 +10694,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10259
10694
|
exception = AcquireExceptionInfo();
|
10260
10695
|
#endif
|
10261
10696
|
|
10262
|
-
|
10697
|
+
GVL_STRUCT_TYPE(GetAuthenticPixels) args = { image, x, y, 1, 1, exception };
|
10698
|
+
pixel = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetAuthenticPixels), &args);
|
10263
10699
|
CHECK_EXCEPTION();
|
10264
10700
|
|
10265
10701
|
if (pixel)
|
@@ -10294,7 +10730,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10294
10730
|
}
|
10295
10731
|
#endif
|
10296
10732
|
|
10297
|
-
SyncAuthenticPixels
|
10733
|
+
GVL_STRUCT_TYPE(SyncAuthenticPixels) args = { image, exception };
|
10734
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SyncAuthenticPixels), &args);
|
10298
10735
|
CHECK_EXCEPTION();
|
10299
10736
|
}
|
10300
10737
|
|
@@ -10349,11 +10786,11 @@ Image_pixel_interpolation_method_eq(VALUE self, VALUE method)
|
|
10349
10786
|
* If present a block, optional arguments may be specified in a block associated with the method.
|
10350
10787
|
* These arguments control the shadow color and how the label is rendered.
|
10351
10788
|
* By default the shadow color is gray75. To specify a different shadow color,
|
10352
|
-
* use
|
10353
|
-
* To specify a different border color (that is, the color of the image border) use
|
10789
|
+
* use options.shadow_color.
|
10790
|
+
* To specify a different border color (that is, the color of the image border) use options.border_color.
|
10354
10791
|
* Both of these methods accept either a color name or a Pixel argument.
|
10355
10792
|
* @param angle [Float] The resulting image is rotated by this amount, measured in degrees.
|
10356
|
-
* @yield []
|
10793
|
+
* @yield [Magick::Image::Info]
|
10357
10794
|
*
|
10358
10795
|
* @return [Magick::Image] a new image
|
10359
10796
|
*/
|
@@ -10383,7 +10820,7 @@ Image_polaroid(int argc, VALUE *argv, VALUE self)
|
|
10383
10820
|
}
|
10384
10821
|
|
10385
10822
|
options = rm_polaroid_new();
|
10386
|
-
|
10823
|
+
TypedData_Get_Struct(options, Draw, &rm_draw_data_type, draw);
|
10387
10824
|
|
10388
10825
|
clone = rm_clone_image(image);
|
10389
10826
|
clone->background_color = draw->shadow_color;
|
@@ -10392,9 +10829,11 @@ Image_polaroid(int argc, VALUE *argv, VALUE self)
|
|
10392
10829
|
exception = AcquireExceptionInfo();
|
10393
10830
|
#if defined(IMAGEMAGICK_7)
|
10394
10831
|
caption = GetImageProperty(clone, "Caption", exception);
|
10395
|
-
|
10832
|
+
GVL_STRUCT_TYPE(PolaroidImage) args = { clone, draw->info, caption, angle, image->interpolate, exception };
|
10833
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(PolaroidImage), &args);
|
10396
10834
|
#else
|
10397
|
-
|
10835
|
+
GVL_STRUCT_TYPE(PolaroidImage) args = { clone, draw->info, angle, exception };
|
10836
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(PolaroidImage), &args);
|
10398
10837
|
#endif
|
10399
10838
|
rm_check_exception(exception, clone, DestroyOnError);
|
10400
10839
|
|
@@ -10446,11 +10885,13 @@ Image_posterize(int argc, VALUE *argv, VALUE self)
|
|
10446
10885
|
#if defined(IMAGEMAGICK_7)
|
10447
10886
|
exception = AcquireExceptionInfo();
|
10448
10887
|
dither_method = dither ? RiemersmaDitherMethod : NoDitherMethod;
|
10449
|
-
PosterizeImage
|
10888
|
+
GVL_STRUCT_TYPE(PosterizeImage) args = { new_image, levels, dither_method, exception };
|
10889
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(PosterizeImage), &args);
|
10450
10890
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10451
10891
|
DestroyExceptionInfo(exception);
|
10452
10892
|
#else
|
10453
|
-
PosterizeImage
|
10893
|
+
GVL_STRUCT_TYPE(PosterizeImage) args = { new_image, levels, dither };
|
10894
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(PosterizeImage), &args);
|
10454
10895
|
rm_check_image_exception(new_image, DestroyOnError);
|
10455
10896
|
#endif
|
10456
10897
|
|
@@ -10476,7 +10917,8 @@ Image_preview(VALUE self, VALUE preview)
|
|
10476
10917
|
VALUE_TO_ENUM(preview, preview_type, PreviewType);
|
10477
10918
|
|
10478
10919
|
exception = AcquireExceptionInfo();
|
10479
|
-
|
10920
|
+
GVL_STRUCT_TYPE(PreviewImage) args = { image, preview_type, exception };
|
10921
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(PreviewImage), &args);
|
10480
10922
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10481
10923
|
|
10482
10924
|
DestroyExceptionInfo(exception);
|
@@ -10517,7 +10959,7 @@ Image_profile_bang(VALUE self, VALUE name, VALUE profile)
|
|
10517
10959
|
VALUE
|
10518
10960
|
Image_quality(VALUE self)
|
10519
10961
|
{
|
10520
|
-
|
10962
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, quality, ulong, &rm_image_data_type);
|
10521
10963
|
}
|
10522
10964
|
|
10523
10965
|
|
@@ -10703,10 +11145,12 @@ Image_quantum_operator(int argc, VALUE *argv, VALUE self)
|
|
10703
11145
|
exception = AcquireExceptionInfo();
|
10704
11146
|
#if defined(IMAGEMAGICK_7)
|
10705
11147
|
BEGIN_CHANNEL_MASK(image, channel);
|
10706
|
-
EvaluateImage
|
11148
|
+
GVL_STRUCT_TYPE(EvaluateImage) args = { image, qop, rvalue, exception };
|
11149
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EvaluateImage), &args);
|
10707
11150
|
END_CHANNEL_MASK(image);
|
10708
11151
|
#else
|
10709
|
-
EvaluateImageChannel
|
11152
|
+
GVL_STRUCT_TYPE(EvaluateImageChannel) args = { image, channel, qop, rvalue, exception };
|
11153
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EvaluateImageChannel), &args);
|
10710
11154
|
#endif
|
10711
11155
|
CHECK_EXCEPTION();
|
10712
11156
|
|
@@ -10783,11 +11227,13 @@ Image_quantize(int argc, VALUE *argv, VALUE self)
|
|
10783
11227
|
|
10784
11228
|
#if defined(IMAGEMAGICK_7)
|
10785
11229
|
exception = AcquireExceptionInfo();
|
10786
|
-
QuantizeImage
|
11230
|
+
GVL_STRUCT_TYPE(QuantizeImage) args = { &quantize_info, new_image, exception };
|
11231
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(QuantizeImage), &args);
|
10787
11232
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10788
11233
|
DestroyExceptionInfo(exception);
|
10789
11234
|
#else
|
10790
|
-
QuantizeImage
|
11235
|
+
GVL_STRUCT_TYPE(QuantizeImage) args = { &quantize_info, new_image };
|
11236
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(QuantizeImage), &args);
|
10791
11237
|
rm_check_image_exception(new_image, DestroyOnError);
|
10792
11238
|
#endif
|
10793
11239
|
|
@@ -10812,9 +11258,11 @@ Image_radial_blur(VALUE self, VALUE angle_obj)
|
|
10812
11258
|
exception = AcquireExceptionInfo();
|
10813
11259
|
|
10814
11260
|
#if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
10815
|
-
|
11261
|
+
GVL_STRUCT_TYPE(RotationalBlurImage) args = { image, angle, exception };
|
11262
|
+
new_image = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RotationalBlurImage), &args);
|
10816
11263
|
#else
|
10817
|
-
|
11264
|
+
GVL_STRUCT_TYPE(RadialBlurImage) args = { image, angle, exception };
|
11265
|
+
new_image = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RadialBlurImage), &args);
|
10818
11266
|
#endif
|
10819
11267
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10820
11268
|
DestroyExceptionInfo(exception);
|
@@ -10862,13 +11310,16 @@ Image_radial_blur_channel(int argc, VALUE *argv, VALUE self)
|
|
10862
11310
|
|
10863
11311
|
#if defined(IMAGEMAGICK_7)
|
10864
11312
|
BEGIN_CHANNEL_MASK(image, channels);
|
10865
|
-
|
11313
|
+
GVL_STRUCT_TYPE(RotationalBlurImage) args = { image, angle, exception };
|
11314
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RotationalBlurImage), &args);
|
10866
11315
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
10867
11316
|
END_CHANNEL_MASK(image);
|
10868
11317
|
#elif defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
10869
|
-
|
11318
|
+
GVL_STRUCT_TYPE(RotationalBlurImageChannel) args = { image, channels, angle, exception };
|
11319
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RotationalBlurImageChannel), &args);
|
10870
11320
|
#else
|
10871
|
-
|
11321
|
+
GVL_STRUCT_TYPE(RadialBlurImageChannel) args = { image, channels, angle, exception };
|
11322
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RadialBlurImageChannel), &args);
|
10872
11323
|
#endif
|
10873
11324
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10874
11325
|
DestroyExceptionInfo(exception);
|
@@ -10929,11 +11380,13 @@ Image_random_threshold_channel(int argc, VALUE *argv, VALUE self)
|
|
10929
11380
|
GeometryInfo geometry_info;
|
10930
11381
|
|
10931
11382
|
ParseGeometry(thresholds, &geometry_info);
|
10932
|
-
RandomThresholdImage
|
11383
|
+
GVL_STRUCT_TYPE(RandomThresholdImage) args = { new_image, geometry_info.rho, geometry_info.sigma, exception };
|
11384
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RandomThresholdImage), &args);
|
10933
11385
|
}
|
10934
11386
|
END_CHANNEL_MASK(new_image);
|
10935
11387
|
#else
|
10936
|
-
RandomThresholdImageChannel
|
11388
|
+
GVL_STRUCT_TYPE(RandomThresholdImageChannel) args = { new_image, channels, thresholds, exception };
|
11389
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RandomThresholdImageChannel), &args);
|
10937
11390
|
#endif
|
10938
11391
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10939
11392
|
|
@@ -10990,11 +11443,13 @@ Image_raise(int argc, VALUE *argv, VALUE self)
|
|
10990
11443
|
|
10991
11444
|
#if defined(IMAGEMAGICK_7)
|
10992
11445
|
exception = AcquireExceptionInfo();
|
10993
|
-
RaiseImage
|
11446
|
+
GVL_STRUCT_TYPE(RaiseImage) args = { new_image, &rect, raised, exception };
|
11447
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RaiseImage), &args);
|
10994
11448
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10995
11449
|
DestroyExceptionInfo(exception);
|
10996
11450
|
#else
|
10997
|
-
RaiseImage
|
11451
|
+
GVL_STRUCT_TYPE(RaiseImage) args = { new_image, &rect, raised };
|
11452
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RaiseImage), &args);
|
10998
11453
|
rm_check_image_exception(new_image, DestroyOnError);
|
10999
11454
|
#endif
|
11000
11455
|
|
@@ -11011,7 +11466,7 @@ Image_raise(int argc, VALUE *argv, VALUE self)
|
|
11011
11466
|
VALUE
|
11012
11467
|
Image_read(VALUE class, VALUE file_arg)
|
11013
11468
|
{
|
11014
|
-
return rd_image(class, file_arg, ReadImage);
|
11469
|
+
return rd_image(class, file_arg, GVL_FUNC(ReadImage));
|
11015
11470
|
}
|
11016
11471
|
|
11017
11472
|
|
@@ -11031,6 +11486,9 @@ file_arg_rescue(VALUE arg, VALUE raised_exc ATTRIBUTE_UNUSED)
|
|
11031
11486
|
}
|
11032
11487
|
|
11033
11488
|
|
11489
|
+
// aliases for common use of structure types; PingImage, ReadImage
|
11490
|
+
typedef GVL_STRUCT_TYPE(PingImage) GVL_STRUCT_TYPE(rd_image);
|
11491
|
+
|
11034
11492
|
/**
|
11035
11493
|
* Transform arguments, call either ReadImage or PingImage.
|
11036
11494
|
*
|
@@ -11056,7 +11514,7 @@ void sig_handler(int sig ATTRIBUTE_UNUSED)
|
|
11056
11514
|
#endif
|
11057
11515
|
|
11058
11516
|
static VALUE
|
11059
|
-
rd_image(VALUE class ATTRIBUTE_UNUSED, VALUE file,
|
11517
|
+
rd_image(VALUE class ATTRIBUTE_UNUSED, VALUE file, gvl_function_t fp)
|
11060
11518
|
{
|
11061
11519
|
char *filename;
|
11062
11520
|
long filename_l;
|
@@ -11067,7 +11525,7 @@ rd_image(VALUE class ATTRIBUTE_UNUSED, VALUE file, reader_t reader)
|
|
11067
11525
|
|
11068
11526
|
// Create a new Info structure for this read/ping
|
11069
11527
|
info_obj = rm_info_new();
|
11070
|
-
|
11528
|
+
TypedData_Get_Struct(info_obj, Info, &rm_info_data_type, info);
|
11071
11529
|
|
11072
11530
|
if (TYPE(file) == T_FILE)
|
11073
11531
|
{
|
@@ -11107,7 +11565,8 @@ rd_image(VALUE class ATTRIBUTE_UNUSED, VALUE file, reader_t reader)
|
|
11107
11565
|
}
|
11108
11566
|
#endif
|
11109
11567
|
|
11110
|
-
|
11568
|
+
GVL_STRUCT_TYPE(rd_image) args = { info, exception };
|
11569
|
+
images = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
11111
11570
|
|
11112
11571
|
#if defined(__APPLE__) || defined(__FreeBSD__)
|
11113
11572
|
if (sigaction(SIGCHLD, &oldact, NULL) < 0)
|
@@ -11192,7 +11651,8 @@ Image_recolor(VALUE self, VALUE color_matrix)
|
|
11192
11651
|
kernel_info->height = order;
|
11193
11652
|
kernel_info->values = (double *) matrix;
|
11194
11653
|
|
11195
|
-
|
11654
|
+
GVL_STRUCT_TYPE(ColorMatrixImage) args = { image, kernel_info, exception };
|
11655
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ColorMatrixImage), &args);
|
11196
11656
|
kernel_info->values = (double *) NULL;
|
11197
11657
|
DestroyKernelInfo(kernel_info);
|
11198
11658
|
xfree((void *) matrix);
|
@@ -11239,7 +11699,8 @@ Image_read_inline(VALUE self ATTRIBUTE_UNUSED, VALUE content)
|
|
11239
11699
|
image_data += x + 1;
|
11240
11700
|
}
|
11241
11701
|
|
11242
|
-
|
11702
|
+
GVL_STRUCT_TYPE(Base64Decode) args_Base64Decode = { image_data, &blob_l };
|
11703
|
+
blob = (unsigned char *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(Base64Decode), &args_Base64Decode);
|
11243
11704
|
if (blob_l == 0)
|
11244
11705
|
{
|
11245
11706
|
rb_raise(rb_eArgError, "can't decode image");
|
@@ -11250,9 +11711,10 @@ Image_read_inline(VALUE self ATTRIBUTE_UNUSED, VALUE content)
|
|
11250
11711
|
// Create a new Info structure for this read. About the
|
11251
11712
|
// only useful attribute that can be set is `format'.
|
11252
11713
|
info_obj = rm_info_new();
|
11253
|
-
|
11714
|
+
TypedData_Get_Struct(info_obj, Info, &rm_info_data_type, info);
|
11254
11715
|
|
11255
|
-
|
11716
|
+
GVL_STRUCT_TYPE(BlobToImage) args_BlobToImage = { info, blob, blob_l, exception };
|
11717
|
+
images = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlobToImage), &args_BlobToImage);
|
11256
11718
|
magick_free((void *)blob);
|
11257
11719
|
|
11258
11720
|
rm_check_exception(exception, images, DestroyOnError);
|
@@ -11314,7 +11776,8 @@ Image_reduce_noise(VALUE self, VALUE radius)
|
|
11314
11776
|
image = rm_check_destroyed(self);
|
11315
11777
|
|
11316
11778
|
exception = AcquireExceptionInfo();
|
11317
|
-
|
11779
|
+
GVL_STRUCT_TYPE(StatisticImage) args = { image, NonpeakStatistic, radius_size, radius_size, exception };
|
11780
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(StatisticImage), &args);
|
11318
11781
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11319
11782
|
|
11320
11783
|
DestroyExceptionInfo(exception);
|
@@ -11366,11 +11829,13 @@ Image_remap(int argc, VALUE *argv, VALUE self)
|
|
11366
11829
|
|
11367
11830
|
#if defined(IMAGEMAGICK_7)
|
11368
11831
|
exception = AcquireExceptionInfo();
|
11369
|
-
RemapImage
|
11832
|
+
GVL_STRUCT_TYPE(RemapImage) args = { &quantize_info, image, remap_image, exception };
|
11833
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RemapImage), &args);
|
11370
11834
|
CHECK_EXCEPTION();
|
11371
11835
|
DestroyExceptionInfo(exception);
|
11372
11836
|
#else
|
11373
|
-
RemapImage
|
11837
|
+
GVL_STRUCT_TYPE(RemapImage) args = { &quantize_info, image, remap_image };
|
11838
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RemapImage), &args);
|
11374
11839
|
rm_check_image_exception(image, RetainOnError);
|
11375
11840
|
#endif
|
11376
11841
|
|
@@ -11425,11 +11890,13 @@ blurred_image(Image* image, double blur)
|
|
11425
11890
|
exception = AcquireExceptionInfo();
|
11426
11891
|
if (blur > 1.0)
|
11427
11892
|
{
|
11428
|
-
|
11893
|
+
GVL_STRUCT_TYPE(BlurImage) args = { image, blur, blur, exception };
|
11894
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlurImage), &args);
|
11429
11895
|
}
|
11430
11896
|
else
|
11431
11897
|
{
|
11432
|
-
|
11898
|
+
GVL_STRUCT_TYPE(SharpenImage) args = { image, blur, blur, exception };
|
11899
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SharpenImage), &args);
|
11433
11900
|
}
|
11434
11901
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11435
11902
|
DestroyExceptionInfo(exception);
|
@@ -11462,7 +11929,7 @@ resample(int bang, int argc, VALUE *argv, VALUE self)
|
|
11462
11929
|
double width, height;
|
11463
11930
|
ExceptionInfo *exception;
|
11464
11931
|
|
11465
|
-
|
11932
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
11466
11933
|
|
11467
11934
|
// Set up defaults
|
11468
11935
|
filter = image->filter;
|
@@ -11522,10 +11989,12 @@ resample(int bang, int argc, VALUE *argv, VALUE self)
|
|
11522
11989
|
exception = AcquireExceptionInfo();
|
11523
11990
|
#if defined(IMAGEMAGICK_7)
|
11524
11991
|
Image *preprocess = blurred_image(image, blur);
|
11525
|
-
|
11992
|
+
GVL_STRUCT_TYPE(ResampleImage) args = { preprocess, x_resolution, y_resolution, filter, exception };
|
11993
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ResampleImage), &args);
|
11526
11994
|
DestroyImage(preprocess);
|
11527
11995
|
#else
|
11528
|
-
|
11996
|
+
GVL_STRUCT_TYPE(ResampleImage) args = { image, x_resolution, y_resolution, filter, blur, exception };
|
11997
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ResampleImage), &args);
|
11529
11998
|
#endif
|
11530
11999
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11531
12000
|
|
@@ -11612,7 +12081,7 @@ resize(int bang, int argc, VALUE *argv, VALUE self)
|
|
11612
12081
|
double blur, drows, dcols;
|
11613
12082
|
ExceptionInfo *exception;
|
11614
12083
|
|
11615
|
-
|
12084
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
11616
12085
|
|
11617
12086
|
// Set up defaults
|
11618
12087
|
filter = image->filter;
|
@@ -11661,13 +12130,15 @@ resize(int bang, int argc, VALUE *argv, VALUE self)
|
|
11661
12130
|
exception = AcquireExceptionInfo();
|
11662
12131
|
#if defined(IMAGEMAGICK_7)
|
11663
12132
|
Image *preprocess = (argc == 4) ? blurred_image(image, blur) : image;
|
11664
|
-
|
12133
|
+
GVL_STRUCT_TYPE(ResizeImage) args = { preprocess, columns, rows, filter, exception };
|
12134
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ResizeImage), &args);
|
11665
12135
|
if (argc == 4)
|
11666
12136
|
{
|
11667
12137
|
DestroyImage(preprocess);
|
11668
12138
|
}
|
11669
12139
|
#else
|
11670
|
-
|
12140
|
+
GVL_STRUCT_TYPE(ResizeImage) args = { image, columns, rows, filter, blur, exception };
|
12141
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ResizeImage), &args);
|
11671
12142
|
#endif
|
11672
12143
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11673
12144
|
|
@@ -11753,7 +12224,8 @@ Image_roll(VALUE self, VALUE x_offset, VALUE y_offset)
|
|
11753
12224
|
image = rm_check_destroyed(self);
|
11754
12225
|
|
11755
12226
|
exception = AcquireExceptionInfo();
|
11756
|
-
|
12227
|
+
GVL_STRUCT_TYPE(RollImage) args = { image, x, y, exception };
|
12228
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RollImage), &args);
|
11757
12229
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11758
12230
|
DestroyExceptionInfo(exception);
|
11759
12231
|
|
@@ -11783,7 +12255,7 @@ rotate(int bang, int argc, VALUE *argv, VALUE self)
|
|
11783
12255
|
long arrow_l;
|
11784
12256
|
ExceptionInfo *exception;
|
11785
12257
|
|
11786
|
-
|
12258
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
11787
12259
|
|
11788
12260
|
switch (argc)
|
11789
12261
|
{
|
@@ -11811,7 +12283,8 @@ rotate(int bang, int argc, VALUE *argv, VALUE self)
|
|
11811
12283
|
|
11812
12284
|
exception = AcquireExceptionInfo();
|
11813
12285
|
|
11814
|
-
|
12286
|
+
GVL_STRUCT_TYPE(RotateImage) args = { image, degrees, exception };
|
12287
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RotateImage), &args);
|
11815
12288
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11816
12289
|
DestroyExceptionInfo(exception);
|
11817
12290
|
|
@@ -11884,7 +12357,7 @@ Image_rotate_bang(int argc, VALUE *argv, VALUE self)
|
|
11884
12357
|
VALUE
|
11885
12358
|
Image_rows(VALUE self)
|
11886
12359
|
{
|
11887
|
-
|
12360
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, rows, int, &rm_image_data_type);
|
11888
12361
|
}
|
11889
12362
|
|
11890
12363
|
|
@@ -11908,7 +12381,7 @@ VALUE
|
|
11908
12381
|
Image_sample(int argc, VALUE *argv, VALUE self)
|
11909
12382
|
{
|
11910
12383
|
rm_check_destroyed(self);
|
11911
|
-
return scale(False, argc, argv, self, SampleImage);
|
12384
|
+
return scale(False, argc, argv, self, GVL_FUNC(SampleImage));
|
11912
12385
|
}
|
11913
12386
|
|
11914
12387
|
|
@@ -11932,7 +12405,7 @@ VALUE
|
|
11932
12405
|
Image_sample_bang(int argc, VALUE *argv, VALUE self)
|
11933
12406
|
{
|
11934
12407
|
rm_check_frozen(self);
|
11935
|
-
return scale(True, argc, argv, self, SampleImage);
|
12408
|
+
return scale(True, argc, argv, self, GVL_FUNC(SampleImage));
|
11936
12409
|
}
|
11937
12410
|
|
11938
12411
|
|
@@ -11956,7 +12429,7 @@ VALUE
|
|
11956
12429
|
Image_scale(int argc, VALUE *argv, VALUE self)
|
11957
12430
|
{
|
11958
12431
|
rm_check_destroyed(self);
|
11959
|
-
return scale(False, argc, argv, self, ScaleImage);
|
12432
|
+
return scale(False, argc, argv, self, GVL_FUNC(ScaleImage));
|
11960
12433
|
}
|
11961
12434
|
|
11962
12435
|
|
@@ -11980,10 +12453,13 @@ VALUE
|
|
11980
12453
|
Image_scale_bang(int argc, VALUE *argv, VALUE self)
|
11981
12454
|
{
|
11982
12455
|
rm_check_frozen(self);
|
11983
|
-
return scale(True, argc, argv, self, ScaleImage);
|
12456
|
+
return scale(True, argc, argv, self, GVL_FUNC(ScaleImage));
|
11984
12457
|
}
|
11985
12458
|
|
11986
12459
|
|
12460
|
+
// aliases for common use of structure types; SampleImage, ScaleImage,
|
12461
|
+
typedef GVL_STRUCT_TYPE(SampleImage) GVL_STRUCT_TYPE(scale);
|
12462
|
+
|
11987
12463
|
/**
|
11988
12464
|
* Call ScaleImage or SampleImage
|
11989
12465
|
*
|
@@ -12005,14 +12481,14 @@ Image_scale_bang(int argc, VALUE *argv, VALUE self)
|
|
12005
12481
|
* @see Image_scale_bang
|
12006
12482
|
*/
|
12007
12483
|
static VALUE
|
12008
|
-
scale(int bang, int argc, VALUE *argv, VALUE self,
|
12484
|
+
scale(int bang, int argc, VALUE *argv, VALUE self, gvl_function_t fp)
|
12009
12485
|
{
|
12010
12486
|
Image *image, *new_image;
|
12011
12487
|
unsigned long columns, rows;
|
12012
12488
|
double scale_arg, drows, dcols;
|
12013
12489
|
ExceptionInfo *exception;
|
12014
12490
|
|
12015
|
-
|
12491
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
12016
12492
|
|
12017
12493
|
switch (argc)
|
12018
12494
|
{
|
@@ -12045,7 +12521,8 @@ scale(int bang, int argc, VALUE *argv, VALUE self, scaler_t scaler)
|
|
12045
12521
|
}
|
12046
12522
|
|
12047
12523
|
exception = AcquireExceptionInfo();
|
12048
|
-
|
12524
|
+
GVL_STRUCT_TYPE(scale) args = { image, columns, rows, exception };
|
12525
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
12049
12526
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12050
12527
|
DestroyExceptionInfo(exception);
|
12051
12528
|
|
@@ -12070,7 +12547,7 @@ scale(int bang, int argc, VALUE *argv, VALUE self, scaler_t scaler)
|
|
12070
12547
|
VALUE
|
12071
12548
|
Image_scene(VALUE self)
|
12072
12549
|
{
|
12073
|
-
|
12550
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, scene, ulong, &rm_image_data_type);
|
12074
12551
|
}
|
12075
12552
|
|
12076
12553
|
|
@@ -12121,11 +12598,13 @@ Image_selective_blur_channel(int argc, VALUE *argv, VALUE self)
|
|
12121
12598
|
exception = AcquireExceptionInfo();
|
12122
12599
|
#if defined(IMAGEMAGICK_7)
|
12123
12600
|
BEGIN_CHANNEL_MASK(image, channels);
|
12124
|
-
|
12601
|
+
GVL_STRUCT_TYPE(SelectiveBlurImage) args = { image, radius, sigma, threshold, exception };
|
12602
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SelectiveBlurImage), &args);
|
12125
12603
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
12126
12604
|
END_CHANNEL_MASK(image);
|
12127
12605
|
#else
|
12128
|
-
|
12606
|
+
GVL_STRUCT_TYPE(SelectiveBlurImageChannel) args = { image, channels, radius, sigma, threshold, exception };
|
12607
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SelectiveBlurImageChannel), &args);
|
12129
12608
|
#endif
|
12130
12609
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12131
12610
|
DestroyExceptionInfo(exception);
|
@@ -12159,12 +12638,14 @@ Image_set_channel_depth(VALUE self, VALUE channel_arg, VALUE depth)
|
|
12159
12638
|
#if defined(IMAGEMAGICK_7)
|
12160
12639
|
exception = AcquireExceptionInfo();
|
12161
12640
|
BEGIN_CHANNEL_MASK(image, channel);
|
12162
|
-
SetImageDepth
|
12641
|
+
GVL_STRUCT_TYPE(SetImageDepth) args = { image, channel_depth, exception };
|
12642
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageDepth), &args);
|
12163
12643
|
END_CHANNEL_MASK(image);
|
12164
12644
|
CHECK_EXCEPTION();
|
12165
12645
|
DestroyExceptionInfo(exception);
|
12166
12646
|
#else
|
12167
|
-
SetImageChannelDepth
|
12647
|
+
GVL_STRUCT_TYPE(SetImageChannelDepth) args = { image, channel, channel_depth };
|
12648
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageChannelDepth), &args);
|
12168
12649
|
rm_check_image_exception(image, RetainOnError);
|
12169
12650
|
#endif
|
12170
12651
|
|
@@ -12202,11 +12683,13 @@ Image_separate(int argc, VALUE *argv, VALUE self)
|
|
12202
12683
|
exception = AcquireExceptionInfo();
|
12203
12684
|
#if defined(IMAGEMAGICK_7)
|
12204
12685
|
BEGIN_CHANNEL_MASK(image, channels);
|
12205
|
-
|
12686
|
+
GVL_STRUCT_TYPE(SeparateImages) args = { image, exception };
|
12687
|
+
new_images = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SeparateImages), &args);
|
12206
12688
|
CHANGE_RESULT_CHANNEL_MASK(new_images);
|
12207
12689
|
END_CHANNEL_MASK(image);
|
12208
12690
|
#else
|
12209
|
-
|
12691
|
+
GVL_STRUCT_TYPE(SeparateImages) args = { image, channels, exception };
|
12692
|
+
new_images = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SeparateImages), &args);
|
12210
12693
|
#endif
|
12211
12694
|
rm_check_exception(exception, new_images, DestroyOnError);
|
12212
12695
|
DestroyExceptionInfo(exception);
|
@@ -12245,7 +12728,8 @@ Image_sepiatone(int argc, VALUE *argv, VALUE self)
|
|
12245
12728
|
}
|
12246
12729
|
|
12247
12730
|
exception = AcquireExceptionInfo();
|
12248
|
-
|
12731
|
+
GVL_STRUCT_TYPE(SepiaToneImage) args = { image, threshold, exception };
|
12732
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SepiaToneImage), &args);
|
12249
12733
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12250
12734
|
DestroyExceptionInfo(exception);
|
12251
12735
|
|
@@ -12303,11 +12787,13 @@ Image_segment(int argc, VALUE *argv, VALUE self)
|
|
12303
12787
|
|
12304
12788
|
#if defined(IMAGEMAGICK_7)
|
12305
12789
|
exception = AcquireExceptionInfo();
|
12306
|
-
SegmentImage
|
12790
|
+
GVL_STRUCT_TYPE(SegmentImage) args = { new_image, colorspace, verbose, cluster_threshold, smoothing_threshold, exception };
|
12791
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SegmentImage), &args);
|
12307
12792
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12308
12793
|
DestroyExceptionInfo(exception);
|
12309
12794
|
#else
|
12310
|
-
SegmentImage
|
12795
|
+
GVL_STRUCT_TYPE(SegmentImage) args = { new_image, colorspace, verbose, cluster_threshold, smoothing_threshold };
|
12796
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SegmentImage), &args);
|
12311
12797
|
rm_check_image_exception(new_image, DestroyOnError);
|
12312
12798
|
#endif
|
12313
12799
|
|
@@ -12325,7 +12811,7 @@ Image_segment(int argc, VALUE *argv, VALUE self)
|
|
12325
12811
|
* @return [Hash] the properties
|
12326
12812
|
*
|
12327
12813
|
* @overload properties
|
12328
|
-
* @yield []
|
12814
|
+
* @yield [Magick::Image::Info]
|
12329
12815
|
* @return [Magick::Image] self
|
12330
12816
|
*/
|
12331
12817
|
VALUE
|
@@ -12443,7 +12929,8 @@ Image_shade(int argc, VALUE *argv, VALUE self)
|
|
12443
12929
|
}
|
12444
12930
|
|
12445
12931
|
exception = AcquireExceptionInfo();
|
12446
|
-
|
12932
|
+
GVL_STRUCT_TYPE(ShadeImage) args = { image, shading, azimuth, elevation, exception };
|
12933
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ShadeImage), &args);
|
12447
12934
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12448
12935
|
DestroyExceptionInfo(exception);
|
12449
12936
|
|
@@ -12501,7 +12988,8 @@ Image_shadow(int argc, VALUE *argv, VALUE self)
|
|
12501
12988
|
}
|
12502
12989
|
|
12503
12990
|
exception = AcquireExceptionInfo();
|
12504
|
-
|
12991
|
+
GVL_STRUCT_TYPE(ShadowImage) args = { image, alpha, sigma, x_offset, y_offset, exception };
|
12992
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ShadowImage), &args);
|
12505
12993
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12506
12994
|
DestroyExceptionInfo(exception);
|
12507
12995
|
|
@@ -12520,7 +13008,7 @@ Image_shadow(int argc, VALUE *argv, VALUE self)
|
|
12520
13008
|
VALUE
|
12521
13009
|
Image_sharpen(int argc, VALUE *argv, VALUE self)
|
12522
13010
|
{
|
12523
|
-
return effect_image(self, argc, argv, SharpenImage);
|
13011
|
+
return effect_image(self, argc, argv, GVL_FUNC(SharpenImage));
|
12524
13012
|
}
|
12525
13013
|
|
12526
13014
|
|
@@ -12568,11 +13056,13 @@ Image_sharpen_channel(int argc, VALUE *argv, VALUE self)
|
|
12568
13056
|
exception = AcquireExceptionInfo();
|
12569
13057
|
#if defined(IMAGEMAGICK_7)
|
12570
13058
|
BEGIN_CHANNEL_MASK(image, channels);
|
12571
|
-
|
13059
|
+
GVL_STRUCT_TYPE(SharpenImage) args = { image, radius, sigma, exception };
|
13060
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SharpenImage), &args);
|
12572
13061
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
12573
13062
|
END_CHANNEL_MASK(image);
|
12574
13063
|
#else
|
12575
|
-
|
13064
|
+
GVL_STRUCT_TYPE(SharpenImageChannel) args = { image, channels, radius, sigma, exception };
|
13065
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SharpenImageChannel), &args);
|
12576
13066
|
#endif
|
12577
13067
|
|
12578
13068
|
rm_check_exception(exception, new_image, DestroyOnError);
|
@@ -12595,7 +13085,7 @@ VALUE
|
|
12595
13085
|
Image_shave(VALUE self, VALUE width, VALUE height)
|
12596
13086
|
{
|
12597
13087
|
rm_check_destroyed(self);
|
12598
|
-
return xform_image(False, self, INT2FIX(0), INT2FIX(0), width, height, ShaveImage);
|
13088
|
+
return xform_image(False, self, INT2FIX(0), INT2FIX(0), width, height, GVL_FUNC(ShaveImage));
|
12599
13089
|
}
|
12600
13090
|
|
12601
13091
|
|
@@ -12613,7 +13103,7 @@ VALUE
|
|
12613
13103
|
Image_shave_bang(VALUE self, VALUE width, VALUE height)
|
12614
13104
|
{
|
12615
13105
|
rm_check_frozen(self);
|
12616
|
-
return xform_image(True, self, INT2FIX(0), INT2FIX(0), width, height, ShaveImage);
|
13106
|
+
return xform_image(True, self, INT2FIX(0), INT2FIX(0), width, height, GVL_FUNC(ShaveImage));
|
12617
13107
|
}
|
12618
13108
|
|
12619
13109
|
|
@@ -12640,7 +13130,8 @@ Image_shear(VALUE self, VALUE x_shear, VALUE y_shear)
|
|
12640
13130
|
image = rm_check_destroyed(self);
|
12641
13131
|
|
12642
13132
|
exception = AcquireExceptionInfo();
|
12643
|
-
|
13133
|
+
GVL_STRUCT_TYPE(ShearImage) args = { image, x, y, exception };
|
13134
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ShearImage), &args);
|
12644
13135
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12645
13136
|
DestroyExceptionInfo(exception);
|
12646
13137
|
|
@@ -12711,12 +13202,14 @@ Image_sigmoidal_contrast_channel(int argc, VALUE *argv, VALUE self)
|
|
12711
13202
|
#if defined(IMAGEMAGICK_7)
|
12712
13203
|
exception = AcquireExceptionInfo();
|
12713
13204
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
12714
|
-
SigmoidalContrastImage
|
13205
|
+
GVL_STRUCT_TYPE(SigmoidalContrastImage) args = { new_image, sharpen, contrast, midpoint, exception };
|
13206
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SigmoidalContrastImage), &args);
|
12715
13207
|
END_CHANNEL_MASK(new_image);
|
12716
13208
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12717
13209
|
DestroyExceptionInfo(exception);
|
12718
13210
|
#else
|
12719
|
-
SigmoidalContrastImageChannel
|
13211
|
+
GVL_STRUCT_TYPE(SigmoidalContrastImageChannel) args = { new_image, channels, sharpen, contrast, midpoint };
|
13212
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SigmoidalContrastImageChannel), &args);
|
12720
13213
|
rm_check_image_exception(new_image, DestroyOnError);
|
12721
13214
|
#endif
|
12722
13215
|
|
@@ -12743,11 +13236,13 @@ Image_signature(VALUE self)
|
|
12743
13236
|
|
12744
13237
|
#if defined(IMAGEMAGICK_7)
|
12745
13238
|
exception = AcquireExceptionInfo();
|
12746
|
-
SignatureImage
|
13239
|
+
GVL_STRUCT_TYPE(SignatureImage) args = { image, exception };
|
13240
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SignatureImage), &args);
|
12747
13241
|
CHECK_EXCEPTION();
|
12748
13242
|
DestroyExceptionInfo(exception);
|
12749
13243
|
#else
|
12750
|
-
SignatureImage
|
13244
|
+
GVL_STRUCT_TYPE(SignatureImage) args = { image };
|
13245
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SignatureImage), &args);
|
12751
13246
|
rm_check_image_exception(image, RetainOnError);
|
12752
13247
|
#endif
|
12753
13248
|
signature = rm_get_property(image, "signature");
|
@@ -12773,7 +13268,7 @@ VALUE
|
|
12773
13268
|
Image_sketch(int argc, VALUE *argv, VALUE self)
|
12774
13269
|
{
|
12775
13270
|
rm_check_destroyed(self);
|
12776
|
-
return motion_blur(argc, argv, self, SketchImage);
|
13271
|
+
return motion_blur(argc, argv, self, GVL_FUNC(SketchImage));
|
12777
13272
|
}
|
12778
13273
|
|
12779
13274
|
|
@@ -12816,11 +13311,13 @@ Image_solarize(int argc, VALUE *argv, VALUE self)
|
|
12816
13311
|
|
12817
13312
|
#if defined(IMAGEMAGICK_7)
|
12818
13313
|
exception = AcquireExceptionInfo();
|
12819
|
-
SolarizeImage
|
13314
|
+
GVL_STRUCT_TYPE(SolarizeImage) args = { new_image, threshold, exception };
|
13315
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SolarizeImage), &args);
|
12820
13316
|
rm_check_exception(exception, new_image, DestroyOnError);
|
12821
13317
|
DestroyExceptionInfo(exception);
|
12822
13318
|
#else
|
12823
|
-
SolarizeImage
|
13319
|
+
GVL_STRUCT_TYPE(SolarizeImage) args = { new_image, threshold };
|
13320
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SolarizeImage), &args);
|
12824
13321
|
rm_check_image_exception(new_image, DestroyOnError);
|
12825
13322
|
#endif
|
12826
13323
|
|
@@ -12856,14 +13353,18 @@ Image_spaceship(VALUE self, VALUE other)
|
|
12856
13353
|
|
12857
13354
|
#if defined(IMAGEMAGICK_7)
|
12858
13355
|
exception = AcquireExceptionInfo();
|
12859
|
-
SignatureImage
|
13356
|
+
GVL_STRUCT_TYPE(SignatureImage) args1 = { imageA, exception };
|
13357
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SignatureImage), &args1);
|
12860
13358
|
CHECK_EXCEPTION();
|
12861
|
-
SignatureImage
|
13359
|
+
GVL_STRUCT_TYPE(SignatureImage) args2 = { imageB, exception };
|
13360
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SignatureImage), &args2);
|
12862
13361
|
CHECK_EXCEPTION();
|
12863
13362
|
DestroyExceptionInfo(exception);
|
12864
13363
|
#else
|
12865
|
-
SignatureImage
|
12866
|
-
SignatureImage
|
13364
|
+
GVL_STRUCT_TYPE(SignatureImage) args1 = { imageA };
|
13365
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SignatureImage), &args1);
|
13366
|
+
GVL_STRUCT_TYPE(SignatureImage) args2 = { imageB };
|
13367
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SignatureImage), &args2);
|
12867
13368
|
#endif
|
12868
13369
|
sigA = rm_get_property(imageA, "signature");
|
12869
13370
|
sigB = rm_get_property(imageB, "signature");
|
@@ -13040,11 +13541,13 @@ Image_sparse_color(int argc, VALUE *argv, VALUE self)
|
|
13040
13541
|
exception = AcquireExceptionInfo();
|
13041
13542
|
#if defined(IMAGEMAGICK_7)
|
13042
13543
|
BEGIN_CHANNEL_MASK(image, channels);
|
13043
|
-
|
13544
|
+
GVL_STRUCT_TYPE(SparseColorImage) args_SparseColorImage = { image, method, nargs, args, exception };
|
13545
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SparseColorImage), &args_SparseColorImage);
|
13044
13546
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
13045
13547
|
END_CHANNEL_MASK(image);
|
13046
13548
|
#else
|
13047
|
-
|
13549
|
+
GVL_STRUCT_TYPE(SparseColorImage) args_SparseColorImage = { image, channels, method, nargs, args, exception };
|
13550
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SparseColorImage), &args_SparseColorImage);
|
13048
13551
|
#endif
|
13049
13552
|
xfree((void *) args);
|
13050
13553
|
rm_check_exception(exception, new_image, DestroyOnError);
|
@@ -13103,7 +13606,8 @@ Image_splice(int argc, VALUE *argv, VALUE self)
|
|
13103
13606
|
// Swap in color for the duration of this call.
|
13104
13607
|
old_color = image->background_color;
|
13105
13608
|
image->background_color = color;
|
13106
|
-
|
13609
|
+
GVL_STRUCT_TYPE(SpliceImage) args = { image, &rectangle, exception };
|
13610
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SpliceImage), &args);
|
13107
13611
|
image->background_color = old_color;
|
13108
13612
|
|
13109
13613
|
rm_check_exception(exception, new_image, DestroyOnError);
|
@@ -13141,10 +13645,11 @@ Image_spread(int argc, VALUE *argv, VALUE self)
|
|
13141
13645
|
|
13142
13646
|
exception = AcquireExceptionInfo();
|
13143
13647
|
#if defined(IMAGEMAGICK_7)
|
13144
|
-
|
13648
|
+
GVL_STRUCT_TYPE(SpreadImage) args = { image, image->interpolate, radius, exception };
|
13145
13649
|
#else
|
13146
|
-
|
13650
|
+
GVL_STRUCT_TYPE(SpreadImage) args = { image, radius, exception };
|
13147
13651
|
#endif
|
13652
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SpreadImage), &args);
|
13148
13653
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13149
13654
|
DestroyExceptionInfo(exception);
|
13150
13655
|
|
@@ -13160,7 +13665,7 @@ Image_spread(int argc, VALUE *argv, VALUE self)
|
|
13160
13665
|
VALUE
|
13161
13666
|
Image_start_loop(VALUE self)
|
13162
13667
|
{
|
13163
|
-
|
13668
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, start_loop, boolean, &rm_image_data_type);
|
13164
13669
|
}
|
13165
13670
|
|
13166
13671
|
/**
|
@@ -13172,7 +13677,7 @@ Image_start_loop(VALUE self)
|
|
13172
13677
|
VALUE
|
13173
13678
|
Image_start_loop_eq(VALUE self, VALUE val)
|
13174
13679
|
{
|
13175
|
-
|
13680
|
+
IMPLEMENT_TYPED_ATTR_WRITER(Image, start_loop, boolean, &rm_image_data_type);
|
13176
13681
|
}
|
13177
13682
|
|
13178
13683
|
|
@@ -13204,7 +13709,8 @@ Image_stegano(VALUE self, VALUE watermark_image, VALUE offset)
|
|
13204
13709
|
image->offset = NUM2LONG(offset);
|
13205
13710
|
|
13206
13711
|
exception = AcquireExceptionInfo();
|
13207
|
-
|
13712
|
+
GVL_STRUCT_TYPE(SteganoImage) args = { image, watermark, exception };
|
13713
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SteganoImage), &args);
|
13208
13714
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13209
13715
|
|
13210
13716
|
DestroyExceptionInfo(exception);
|
@@ -13236,7 +13742,8 @@ Image_stereo(VALUE self, VALUE offset_image_arg)
|
|
13236
13742
|
offset = rm_check_destroyed(offset_image);
|
13237
13743
|
|
13238
13744
|
exception = AcquireExceptionInfo();
|
13239
|
-
|
13745
|
+
GVL_STRUCT_TYPE(StereoImage) args = { image, offset, exception };
|
13746
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(StereoImage), &args);
|
13240
13747
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13241
13748
|
|
13242
13749
|
DestroyExceptionInfo(exception);
|
@@ -13294,10 +13801,12 @@ Image_class_type_eq(VALUE self, VALUE new_class_type)
|
|
13294
13801
|
if (image->storage_class == PseudoClass && class_type == DirectClass)
|
13295
13802
|
{
|
13296
13803
|
#if defined(IMAGEMAGICK_7)
|
13297
|
-
SyncImage
|
13804
|
+
GVL_STRUCT_TYPE(SyncImage) args = { image, exception };
|
13805
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SyncImage), &args);
|
13298
13806
|
CHECK_EXCEPTION();
|
13299
13807
|
#else
|
13300
|
-
SyncImage
|
13808
|
+
GVL_STRUCT_TYPE(SyncImage) args = { image };
|
13809
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SyncImage), &args);
|
13301
13810
|
#endif
|
13302
13811
|
magick_free(image->colormap);
|
13303
13812
|
image->colormap = NULL;
|
@@ -13307,19 +13816,23 @@ Image_class_type_eq(VALUE self, VALUE new_class_type)
|
|
13307
13816
|
GetQuantizeInfo(&qinfo);
|
13308
13817
|
qinfo.number_colors = QuantumRange+1;
|
13309
13818
|
#if defined(IMAGEMAGICK_7)
|
13310
|
-
QuantizeImage
|
13819
|
+
GVL_STRUCT_TYPE(QuantizeImage) args = { &qinfo, image, exception };
|
13820
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(QuantizeImage), &args);
|
13311
13821
|
CHECK_EXCEPTION();
|
13312
13822
|
#else
|
13313
|
-
QuantizeImage
|
13823
|
+
GVL_STRUCT_TYPE(QuantizeImage) args = { &qinfo, image };
|
13824
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(QuantizeImage), &args);
|
13314
13825
|
#endif
|
13315
13826
|
}
|
13316
13827
|
|
13317
13828
|
#if defined(IMAGEMAGICK_7)
|
13318
|
-
SetImageStorageClass
|
13829
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, class_type, exception };
|
13830
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
13319
13831
|
CHECK_EXCEPTION();
|
13320
13832
|
DestroyExceptionInfo(exception);
|
13321
13833
|
#else
|
13322
|
-
SetImageStorageClass
|
13834
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, class_type };
|
13835
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
13323
13836
|
#endif
|
13324
13837
|
return new_class_type;
|
13325
13838
|
}
|
@@ -13348,7 +13861,7 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13348
13861
|
long n, size;
|
13349
13862
|
long x, y;
|
13350
13863
|
unsigned long cols, rows;
|
13351
|
-
|
13864
|
+
MagickBooleanType okay;
|
13352
13865
|
ExceptionInfo *exception;
|
13353
13866
|
#if defined(IMAGEMAGICK_7)
|
13354
13867
|
Quantum *pixels;
|
@@ -13374,7 +13887,8 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13374
13887
|
|
13375
13888
|
#if defined(IMAGEMAGICK_7)
|
13376
13889
|
exception = AcquireExceptionInfo();
|
13377
|
-
|
13890
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, DirectClass, exception };
|
13891
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
13378
13892
|
CHECK_EXCEPTION();
|
13379
13893
|
if (!okay)
|
13380
13894
|
{
|
@@ -13382,7 +13896,8 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13382
13896
|
rb_raise(Class_ImageMagickError, "SetImageStorageClass failed. Can't store pixels.");
|
13383
13897
|
}
|
13384
13898
|
#else
|
13385
|
-
|
13899
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, DirectClass };
|
13900
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
13386
13901
|
rm_check_image_exception(image, RetainOnError);
|
13387
13902
|
if (!okay)
|
13388
13903
|
{
|
@@ -13394,7 +13909,8 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13394
13909
|
// Get a pointer to the pixels. Replace the values with the PixelPackets
|
13395
13910
|
// from the pixels argument.
|
13396
13911
|
{
|
13397
|
-
|
13912
|
+
GVL_STRUCT_TYPE(GetAuthenticPixels) args = { image, x, y, cols, rows, exception };
|
13913
|
+
pixels = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetAuthenticPixels), &args);
|
13398
13914
|
CHECK_EXCEPTION();
|
13399
13915
|
|
13400
13916
|
if (pixels)
|
@@ -13410,7 +13926,7 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13410
13926
|
DestroyExceptionInfo(exception);
|
13411
13927
|
rb_raise(rb_eTypeError, "Item in array should be a Pixel.");
|
13412
13928
|
}
|
13413
|
-
|
13929
|
+
TypedData_Get_Struct(new_pixel, Pixel, &rm_pixel_data_type, pixel);
|
13414
13930
|
#if defined(IMAGEMAGICK_7)
|
13415
13931
|
SetPixelRed(image, pixel->red, pixels);
|
13416
13932
|
SetPixelGreen(image, pixel->green, pixels);
|
@@ -13430,7 +13946,8 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13430
13946
|
pixels++;
|
13431
13947
|
#endif
|
13432
13948
|
}
|
13433
|
-
SyncAuthenticPixels
|
13949
|
+
GVL_STRUCT_TYPE(SyncAuthenticPixels) args = { image, exception };
|
13950
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SyncAuthenticPixels), &args);
|
13434
13951
|
CHECK_EXCEPTION();
|
13435
13952
|
}
|
13436
13953
|
|
@@ -13490,10 +14007,11 @@ Image_swirl(VALUE self, VALUE degrees_obj)
|
|
13490
14007
|
exception = AcquireExceptionInfo();
|
13491
14008
|
|
13492
14009
|
#if defined(IMAGEMAGICK_7)
|
13493
|
-
|
14010
|
+
GVL_STRUCT_TYPE(SwirlImage) args = { image, degrees, image->interpolate, exception };
|
13494
14011
|
#else
|
13495
|
-
|
14012
|
+
GVL_STRUCT_TYPE(SwirlImage) args = { image, degrees, exception };
|
13496
14013
|
#endif
|
14014
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SwirlImage), &args);
|
13497
14015
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13498
14016
|
DestroyExceptionInfo(exception);
|
13499
14017
|
|
@@ -13584,12 +14102,14 @@ Image_texture_flood_fill(VALUE self, VALUE color_obj, VALUE texture_obj,
|
|
13584
14102
|
|
13585
14103
|
#if defined(IMAGEMAGICK_7)
|
13586
14104
|
exception = AcquireExceptionInfo();
|
13587
|
-
FloodfillPaintImage
|
14105
|
+
GVL_STRUCT_TYPE(FloodfillPaintImage) args = { new_image, draw_info, &color_mpp, x, y, invert, exception };
|
14106
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FloodfillPaintImage), &args);
|
13588
14107
|
DestroyDrawInfo(draw_info);
|
13589
14108
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13590
14109
|
DestroyExceptionInfo(exception);
|
13591
14110
|
#else
|
13592
|
-
FloodfillPaintImage
|
14111
|
+
GVL_STRUCT_TYPE(FloodfillPaintImage) args = { new_image, DefaultChannels, draw_info, &color_mpp, x, y, invert };
|
14112
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FloodfillPaintImage), &args);
|
13593
14113
|
|
13594
14114
|
DestroyDrawInfo(draw_info);
|
13595
14115
|
rm_check_image_exception(new_image, DestroyOnError);
|
@@ -13622,11 +14142,13 @@ Image_threshold(VALUE self, VALUE threshold_obj)
|
|
13622
14142
|
|
13623
14143
|
#if defined(IMAGEMAGICK_7)
|
13624
14144
|
exception = AcquireExceptionInfo();
|
13625
|
-
BilevelImage
|
14145
|
+
GVL_STRUCT_TYPE(BilevelImage) args = { new_image, threshold, exception };
|
14146
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BilevelImage), &args);
|
13626
14147
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13627
14148
|
DestroyExceptionInfo(exception);
|
13628
14149
|
#else
|
13629
|
-
BilevelImageChannel
|
14150
|
+
GVL_STRUCT_TYPE(BilevelImageChannel) args = { new_image, DefaultChannels, threshold };
|
14151
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BilevelImageChannel), &args);
|
13630
14152
|
rm_check_image_exception(new_image, DestroyOnError);
|
13631
14153
|
#endif
|
13632
14154
|
|
@@ -13634,6 +14156,9 @@ Image_threshold(VALUE self, VALUE threshold_obj)
|
|
13634
14156
|
}
|
13635
14157
|
|
13636
14158
|
|
14159
|
+
// aliases for common use of structure types; WhiteThresholdImage
|
14160
|
+
typedef GVL_STRUCT_TYPE(WhiteThresholdImage) GVL_STRUCT_TYPE(threshold_image);
|
14161
|
+
|
13637
14162
|
/**
|
13638
14163
|
* Call one of the xxxxThresholdImage methods.
|
13639
14164
|
*
|
@@ -13645,8 +14170,8 @@ Image_threshold(VALUE self, VALUE threshold_obj)
|
|
13645
14170
|
* @param thresholder which xxxxThresholdImage method to call
|
13646
14171
|
* @return a new image
|
13647
14172
|
*/
|
13648
|
-
static
|
13649
|
-
|
14173
|
+
static VALUE
|
14174
|
+
threshold_image(int argc, VALUE *argv, VALUE self, gvl_function_t fp)
|
13650
14175
|
{
|
13651
14176
|
Image *image, *new_image;
|
13652
14177
|
double red, green, blue, alpha;
|
@@ -13689,11 +14214,13 @@ VALUE threshold_image(int argc, VALUE *argv, VALUE self, thresholder_t threshold
|
|
13689
14214
|
|
13690
14215
|
#if defined(IMAGEMAGICK_7)
|
13691
14216
|
exception = AcquireExceptionInfo();
|
13692
|
-
(
|
14217
|
+
GVL_STRUCT_TYPE(threshold_image) args = { new_image, ctarg, exception };
|
14218
|
+
CALL_FUNC_WITHOUT_GVL(fp, &args);
|
13693
14219
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13694
14220
|
DestroyExceptionInfo(exception);
|
13695
14221
|
#else
|
13696
|
-
(
|
14222
|
+
GVL_STRUCT_TYPE(threshold_image) args = { new_image, ctarg };
|
14223
|
+
CALL_FUNC_WITHOUT_GVL(fp, &args);
|
13697
14224
|
rm_check_image_exception(new_image, DestroyOnError);
|
13698
14225
|
#endif
|
13699
14226
|
|
@@ -13727,7 +14254,7 @@ thumbnail(int bang, int argc, VALUE *argv, VALUE self)
|
|
13727
14254
|
RectangleInfo geometry;
|
13728
14255
|
ExceptionInfo *exception;
|
13729
14256
|
|
13730
|
-
|
14257
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
13731
14258
|
|
13732
14259
|
switch (argc)
|
13733
14260
|
{
|
@@ -13765,7 +14292,8 @@ thumbnail(int bang, int argc, VALUE *argv, VALUE self)
|
|
13765
14292
|
ParseRegionGeometry(image, image_geometry, &geometry, exception);
|
13766
14293
|
rm_check_exception(exception, image, RetainOnError);
|
13767
14294
|
|
13768
|
-
|
14295
|
+
GVL_STRUCT_TYPE(ThumbnailImage) args = { image, geometry.width, geometry.height, exception };
|
14296
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ThumbnailImage), &args);
|
13769
14297
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13770
14298
|
DestroyExceptionInfo(exception);
|
13771
14299
|
|
@@ -13923,10 +14451,11 @@ Image_tint(int argc, VALUE *argv, VALUE self)
|
|
13923
14451
|
exception = AcquireExceptionInfo();
|
13924
14452
|
|
13925
14453
|
#if defined(IMAGEMAGICK_7)
|
13926
|
-
|
14454
|
+
GVL_STRUCT_TYPE(TintImage) args = { image, alpha, &tint, exception };
|
13927
14455
|
#else
|
13928
|
-
|
14456
|
+
GVL_STRUCT_TYPE(TintImage) args = { image, alpha, tint, exception };
|
13929
14457
|
#endif
|
14458
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TintImage), &args);
|
13930
14459
|
rm_check_exception(exception, new_image, DestroyOnError);
|
13931
14460
|
DestroyExceptionInfo(exception);
|
13932
14461
|
|
@@ -13959,7 +14488,7 @@ Image_to_blob(VALUE self)
|
|
13959
14488
|
// both) and the image format by setting the depth and format
|
13960
14489
|
// values in the info parm block.
|
13961
14490
|
info_obj = rm_info_new();
|
13962
|
-
|
14491
|
+
TypedData_Get_Struct(info_obj, Info, &rm_info_data_type, info);
|
13963
14492
|
|
13964
14493
|
image = rm_check_destroyed(self);
|
13965
14494
|
|
@@ -13969,10 +14498,12 @@ Image_to_blob(VALUE self)
|
|
13969
14498
|
if (info->depth != 0)
|
13970
14499
|
{
|
13971
14500
|
#if defined(IMAGEMAGICK_7)
|
13972
|
-
SetImageDepth
|
14501
|
+
GVL_STRUCT_TYPE(SetImageDepth) args = { image, info->depth, exception };
|
14502
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageDepth), &args);
|
13973
14503
|
CHECK_EXCEPTION();
|
13974
14504
|
#else
|
13975
|
-
SetImageDepth
|
14505
|
+
GVL_STRUCT_TYPE(SetImageDepth) args = { image, info->depth };
|
14506
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageDepth), &args);
|
13976
14507
|
rm_check_image_exception(image, RetainOnError);
|
13977
14508
|
#endif
|
13978
14509
|
}
|
@@ -14006,7 +14537,8 @@ Image_to_blob(VALUE self)
|
|
14006
14537
|
|
14007
14538
|
rm_sync_image_options(image, info);
|
14008
14539
|
|
14009
|
-
|
14540
|
+
GVL_STRUCT_TYPE(ImageToBlob) args = { info, image, &length, exception };
|
14541
|
+
blob = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ImageToBlob), &args);
|
14010
14542
|
CHECK_EXCEPTION();
|
14011
14543
|
|
14012
14544
|
DestroyExceptionInfo(exception);
|
@@ -14152,11 +14684,13 @@ Image_transparent(int argc, VALUE *argv, VALUE self)
|
|
14152
14684
|
|
14153
14685
|
#if defined(IMAGEMAGICK_7)
|
14154
14686
|
exception = AcquireExceptionInfo();
|
14155
|
-
|
14687
|
+
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, &color, alpha, MagickFalse, exception };
|
14688
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImage), &args);
|
14156
14689
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14157
14690
|
DestroyExceptionInfo(exception);
|
14158
14691
|
#else
|
14159
|
-
|
14692
|
+
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, &color, QuantumRange - alpha, MagickFalse };
|
14693
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImage), &args);
|
14160
14694
|
rm_check_image_exception(new_image, DestroyOnError);
|
14161
14695
|
#endif
|
14162
14696
|
if (!okay)
|
@@ -14226,11 +14760,13 @@ Image_transparent_chroma(int argc, VALUE *argv, VALUE self)
|
|
14226
14760
|
|
14227
14761
|
#if defined(IMAGEMAGICK_7)
|
14228
14762
|
exception = AcquireExceptionInfo();
|
14229
|
-
|
14763
|
+
GVL_STRUCT_TYPE(TransparentPaintImageChroma) args = { new_image, &low, &high, alpha, invert, exception };
|
14764
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImageChroma), &args);
|
14230
14765
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14231
14766
|
DestroyExceptionInfo(exception);
|
14232
14767
|
#else
|
14233
|
-
|
14768
|
+
GVL_STRUCT_TYPE(TransparentPaintImageChroma) args = { new_image, &low, &high, QuantumRange - alpha, invert };
|
14769
|
+
okay = (MagickBooleanType)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImageChroma), &args);
|
14234
14770
|
rm_check_image_exception(new_image, DestroyOnError);
|
14235
14771
|
#endif
|
14236
14772
|
if (!okay)
|
@@ -14283,7 +14819,7 @@ VALUE
|
|
14283
14819
|
Image_transpose(VALUE self)
|
14284
14820
|
{
|
14285
14821
|
rm_check_destroyed(self);
|
14286
|
-
return crisscross(False, self, TransposeImage);
|
14822
|
+
return crisscross(False, self, GVL_FUNC(TransposeImage));
|
14287
14823
|
}
|
14288
14824
|
|
14289
14825
|
|
@@ -14299,7 +14835,7 @@ VALUE
|
|
14299
14835
|
Image_transpose_bang(VALUE self)
|
14300
14836
|
{
|
14301
14837
|
rm_check_frozen(self);
|
14302
|
-
return crisscross(True, self, TransposeImage);
|
14838
|
+
return crisscross(True, self, GVL_FUNC(TransposeImage));
|
14303
14839
|
}
|
14304
14840
|
|
14305
14841
|
|
@@ -14314,7 +14850,7 @@ VALUE
|
|
14314
14850
|
Image_transverse(VALUE self)
|
14315
14851
|
{
|
14316
14852
|
rm_check_destroyed(self);
|
14317
|
-
return crisscross(False, self, TransverseImage);
|
14853
|
+
return crisscross(False, self, GVL_FUNC(TransverseImage));
|
14318
14854
|
}
|
14319
14855
|
|
14320
14856
|
/**
|
@@ -14329,7 +14865,7 @@ VALUE
|
|
14329
14865
|
Image_transverse_bang(VALUE self)
|
14330
14866
|
{
|
14331
14867
|
rm_check_frozen(self);
|
14332
|
-
return crisscross(True, self, TransverseImage);
|
14868
|
+
return crisscross(True, self, GVL_FUNC(TransverseImage));
|
14333
14869
|
}
|
14334
14870
|
|
14335
14871
|
|
@@ -14367,10 +14903,11 @@ trimmer(int bang, int argc, VALUE *argv, VALUE self)
|
|
14367
14903
|
break;
|
14368
14904
|
}
|
14369
14905
|
|
14370
|
-
|
14906
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
14371
14907
|
|
14372
14908
|
exception = AcquireExceptionInfo();
|
14373
|
-
|
14909
|
+
GVL_STRUCT_TYPE(TrimImage) args = { image, exception };
|
14910
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TrimImage), &args);
|
14374
14911
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14375
14912
|
DestroyExceptionInfo(exception);
|
14376
14913
|
|
@@ -14551,7 +15088,8 @@ Image_unique_colors(VALUE self)
|
|
14551
15088
|
image = rm_check_destroyed(self);
|
14552
15089
|
exception = AcquireExceptionInfo();
|
14553
15090
|
|
14554
|
-
|
15091
|
+
GVL_STRUCT_TYPE(UniqueImageColors) args = { image, exception };
|
15092
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(UniqueImageColors), &args);
|
14555
15093
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14556
15094
|
DestroyExceptionInfo(exception);
|
14557
15095
|
|
@@ -14717,7 +15255,8 @@ Image_unsharp_mask(int argc, VALUE *argv, VALUE self)
|
|
14717
15255
|
unsharp_mask_args(argc, argv, &radius, &sigma, &amount, &threshold);
|
14718
15256
|
|
14719
15257
|
exception = AcquireExceptionInfo();
|
14720
|
-
|
15258
|
+
GVL_STRUCT_TYPE(UnsharpMaskImage) args = { image, radius, sigma, amount, threshold, exception };
|
15259
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(UnsharpMaskImage), &args);
|
14721
15260
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14722
15261
|
DestroyExceptionInfo(exception);
|
14723
15262
|
|
@@ -14772,11 +15311,13 @@ Image_unsharp_mask_channel(int argc, VALUE *argv, VALUE self)
|
|
14772
15311
|
exception = AcquireExceptionInfo();
|
14773
15312
|
#if defined(IMAGEMAGICK_7)
|
14774
15313
|
BEGIN_CHANNEL_MASK(image, channels);
|
14775
|
-
|
15314
|
+
GVL_STRUCT_TYPE(UnsharpMaskImage) args = { image, radius, sigma, amount, threshold, exception };
|
15315
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(UnsharpMaskImage), &args);
|
14776
15316
|
CHANGE_RESULT_CHANNEL_MASK(new_image);
|
14777
15317
|
END_CHANNEL_MASK(image);
|
14778
15318
|
#else
|
14779
|
-
|
15319
|
+
GVL_STRUCT_TYPE(UnsharpMaskImageChannel) args = { image, channels, radius, sigma, amount, threshold, exception };
|
15320
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(UnsharpMaskImageChannel), &args);
|
14780
15321
|
#endif
|
14781
15322
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14782
15323
|
DestroyExceptionInfo(exception);
|
@@ -14827,7 +15368,8 @@ Image_vignette(int argc, VALUE *argv, VALUE self)
|
|
14827
15368
|
|
14828
15369
|
exception = AcquireExceptionInfo();
|
14829
15370
|
|
14830
|
-
|
15371
|
+
GVL_STRUCT_TYPE(VignetteImage) args = { image, radius, sigma, horz_radius, vert_radius, exception };
|
15372
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(VignetteImage), &args);
|
14831
15373
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14832
15374
|
DestroyExceptionInfo(exception);
|
14833
15375
|
|
@@ -14973,11 +15515,13 @@ Image_watermark(int argc, VALUE *argv, VALUE self)
|
|
14973
15515
|
new_image = rm_clone_image(image);
|
14974
15516
|
#if defined(IMAGEMAGICK_7)
|
14975
15517
|
exception = AcquireExceptionInfo();
|
14976
|
-
CompositeImage
|
15518
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { new_image, overlay, ModulateCompositeOp, MagickTrue, x_offset, y_offset, exception };
|
15519
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
14977
15520
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14978
15521
|
DestroyExceptionInfo(exception);
|
14979
15522
|
#else
|
14980
|
-
CompositeImage
|
15523
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { new_image, ModulateCompositeOp, overlay, x_offset, y_offset };
|
15524
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
14981
15525
|
|
14982
15526
|
rm_check_image_exception(new_image, DestroyOnError);
|
14983
15527
|
#endif
|
@@ -15020,10 +15564,11 @@ Image_wave(int argc, VALUE *argv, VALUE self)
|
|
15020
15564
|
|
15021
15565
|
exception = AcquireExceptionInfo();
|
15022
15566
|
#if defined(IMAGEMAGICK_7)
|
15023
|
-
|
15567
|
+
GVL_STRUCT_TYPE(WaveImage) args = { image, amplitude, wavelength, image->interpolate, exception };
|
15024
15568
|
#else
|
15025
|
-
|
15569
|
+
GVL_STRUCT_TYPE(WaveImage) args = { image, amplitude, wavelength, exception };
|
15026
15570
|
#endif
|
15571
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(WaveImage), &args);
|
15027
15572
|
rm_check_exception(exception, new_image, DestroyOnError);
|
15028
15573
|
DestroyExceptionInfo(exception);
|
15029
15574
|
|
@@ -15119,7 +15664,8 @@ Image_wet_floor(int argc, VALUE *argv, VALUE self)
|
|
15119
15664
|
|
15120
15665
|
|
15121
15666
|
exception = AcquireExceptionInfo();
|
15122
|
-
|
15667
|
+
GVL_STRUCT_TYPE(FlipImage) args_FlipImage = { image, exception };
|
15668
|
+
flip_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(FlipImage), &args_FlipImage);
|
15123
15669
|
CHECK_EXCEPTION();
|
15124
15670
|
|
15125
15671
|
|
@@ -15127,18 +15673,22 @@ Image_wet_floor(int argc, VALUE *argv, VALUE self)
|
|
15127
15673
|
geometry.y = 0;
|
15128
15674
|
geometry.width = image->columns;
|
15129
15675
|
geometry.height = max_rows;
|
15130
|
-
|
15676
|
+
GVL_STRUCT_TYPE(CropImage) args_CropImage = { flip_image, &geometry, exception };
|
15677
|
+
reflection = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CropImage), &args_CropImage);
|
15131
15678
|
DestroyImage(flip_image);
|
15132
15679
|
CHECK_EXCEPTION();
|
15133
15680
|
|
15134
15681
|
|
15135
15682
|
#if defined(IMAGEMAGICK_7)
|
15136
|
-
SetImageStorageClass
|
15683
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args_SetImageStorageClass = { reflection, DirectClass, exception };
|
15684
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args_SetImageStorageClass);
|
15137
15685
|
rm_check_exception(exception, reflection, DestroyOnError);
|
15138
|
-
SetImageAlphaChannel
|
15686
|
+
GVL_STRUCT_TYPE(SetImageAlphaChannel) args_SetImageAlphaChannel = { reflection, ActivateAlphaChannel, exception };
|
15687
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageAlphaChannel), &args_SetImageAlphaChannel);
|
15139
15688
|
rm_check_exception(exception, reflection, DestroyOnError);
|
15140
15689
|
#else
|
15141
|
-
SetImageStorageClass
|
15690
|
+
GVL_STRUCT_TYPE(SetImageStorageClass) args_SetImageStorageClass = { reflection, DirectClass };
|
15691
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args_SetImageStorageClass);
|
15142
15692
|
rm_check_image_exception(reflection, DestroyOnError);
|
15143
15693
|
|
15144
15694
|
|
@@ -15160,7 +15710,8 @@ Image_wet_floor(int argc, VALUE *argv, VALUE self)
|
|
15160
15710
|
}
|
15161
15711
|
#endif
|
15162
15712
|
|
15163
|
-
|
15713
|
+
GVL_STRUCT_TYPE(GetVirtualPixels) args_GetVirtualPixels = { reflection, 0, y, image->columns, 1, exception };
|
15714
|
+
p = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetVirtualPixels), &args_GetVirtualPixels);
|
15164
15715
|
rm_check_exception(exception, reflection, DestroyOnError);
|
15165
15716
|
if (!p)
|
15166
15717
|
{
|
@@ -15192,8 +15743,8 @@ Image_wet_floor(int argc, VALUE *argv, VALUE self)
|
|
15192
15743
|
#endif
|
15193
15744
|
}
|
15194
15745
|
|
15195
|
-
|
15196
|
-
SyncAuthenticPixels
|
15746
|
+
GVL_STRUCT_TYPE(SyncAuthenticPixels) args_SyncAuthenticPixels = { reflection, exception };
|
15747
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SyncAuthenticPixels), &args_SyncAuthenticPixels);
|
15197
15748
|
rm_check_exception(exception, reflection, DestroyOnError);
|
15198
15749
|
|
15199
15750
|
opacity += step;
|
@@ -15226,7 +15777,7 @@ Image_wet_floor(int argc, VALUE *argv, VALUE self)
|
|
15226
15777
|
VALUE
|
15227
15778
|
Image_white_threshold(int argc, VALUE *argv, VALUE self)
|
15228
15779
|
{
|
15229
|
-
return threshold_image(argc, argv, self, WhiteThresholdImage);
|
15780
|
+
return threshold_image(argc, argv, self, GVL_FUNC(WhiteThresholdImage));
|
15230
15781
|
}
|
15231
15782
|
|
15232
15783
|
|
@@ -15253,6 +15804,10 @@ void add_format_prefix(Info *info, VALUE file)
|
|
15253
15804
|
char *p;
|
15254
15805
|
|
15255
15806
|
// Convert arg to string. If an exception occurs raise an error condition.
|
15807
|
+
if (rb_respond_to(file, rb_intern("path")))
|
15808
|
+
{
|
15809
|
+
FilePathStringValue(file);
|
15810
|
+
}
|
15256
15811
|
file = rb_rescue(rb_String, file, file_arg_rescue, file);
|
15257
15812
|
|
15258
15813
|
filename = rm_str2cstr(file, &filename_l);
|
@@ -15339,7 +15894,7 @@ Image_write(VALUE self, VALUE file)
|
|
15339
15894
|
image = rm_check_destroyed(self);
|
15340
15895
|
|
15341
15896
|
info_obj = rm_info_new();
|
15342
|
-
|
15897
|
+
TypedData_Get_Struct(info_obj, Info, &rm_info_data_type, info);
|
15343
15898
|
|
15344
15899
|
if (TYPE(file) == T_FILE)
|
15345
15900
|
{
|
@@ -15348,32 +15903,32 @@ Image_write(VALUE self, VALUE file)
|
|
15348
15903
|
// Ensure file is open - raise error if not
|
15349
15904
|
GetOpenFile(file, fptr);
|
15350
15905
|
rb_io_check_writable(fptr);
|
15351
|
-
#if defined(_WIN32)
|
15352
15906
|
add_format_prefix(info, fptr->pathv);
|
15353
|
-
|
15907
|
+
#if defined(_WIN32)
|
15354
15908
|
SetImageInfoFile(info, NULL);
|
15355
15909
|
#else
|
15356
15910
|
SetImageInfoFile(info, rb_io_stdio_file(fptr));
|
15357
|
-
memset(image->filename, 0, sizeof(image->filename));
|
15358
15911
|
#endif
|
15359
15912
|
}
|
15360
15913
|
else
|
15361
15914
|
{
|
15362
15915
|
add_format_prefix(info, file);
|
15363
|
-
strlcpy(image->filename, info->filename, sizeof(image->filename));
|
15364
15916
|
SetImageInfoFile(info, NULL);
|
15365
15917
|
}
|
15918
|
+
strlcpy(image->filename, info->filename, sizeof(image->filename));
|
15366
15919
|
|
15367
15920
|
rm_sync_image_options(image, info);
|
15368
15921
|
|
15369
15922
|
info->adjoin = MagickFalse;
|
15370
15923
|
#if defined(IMAGEMAGICK_7)
|
15371
15924
|
exception = AcquireExceptionInfo();
|
15372
|
-
WriteImage
|
15925
|
+
GVL_STRUCT_TYPE(WriteImage) args = { info, image, exception };
|
15926
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(WriteImage), &args);
|
15373
15927
|
CHECK_EXCEPTION();
|
15374
15928
|
DestroyExceptionInfo(exception);
|
15375
15929
|
#else
|
15376
|
-
WriteImage
|
15930
|
+
GVL_STRUCT_TYPE(WriteImage) args = { info, image };
|
15931
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(WriteImage), &args);
|
15377
15932
|
rm_check_image_exception(image, RetainOnError);
|
15378
15933
|
#endif
|
15379
15934
|
|
@@ -15391,7 +15946,7 @@ Image_write(VALUE self, VALUE file)
|
|
15391
15946
|
VALUE
|
15392
15947
|
Image_x_resolution(VALUE self)
|
15393
15948
|
{
|
15394
|
-
|
15949
|
+
IMPLEMENT_TYPED_ATTR_READERF(Image, x_resolution, resolution.x, dbl, &rm_image_data_type);
|
15395
15950
|
}
|
15396
15951
|
|
15397
15952
|
/**
|
@@ -15403,7 +15958,7 @@ Image_x_resolution(VALUE self)
|
|
15403
15958
|
VALUE
|
15404
15959
|
Image_x_resolution_eq(VALUE self, VALUE val)
|
15405
15960
|
{
|
15406
|
-
|
15961
|
+
IMPLEMENT_TYPED_ATTR_WRITERF(Image, x_resolution, resolution.x, dbl, &rm_image_data_type);
|
15407
15962
|
}
|
15408
15963
|
|
15409
15964
|
/**
|
@@ -15414,7 +15969,7 @@ Image_x_resolution_eq(VALUE self, VALUE val)
|
|
15414
15969
|
VALUE
|
15415
15970
|
Image_y_resolution(VALUE self)
|
15416
15971
|
{
|
15417
|
-
|
15972
|
+
IMPLEMENT_TYPED_ATTR_READERF(Image, y_resolution, resolution.y, dbl, &rm_image_data_type);
|
15418
15973
|
}
|
15419
15974
|
|
15420
15975
|
/**
|
@@ -15426,7 +15981,7 @@ Image_y_resolution(VALUE self)
|
|
15426
15981
|
VALUE
|
15427
15982
|
Image_y_resolution_eq(VALUE self, VALUE val)
|
15428
15983
|
{
|
15429
|
-
|
15984
|
+
IMPLEMENT_TYPED_ATTR_WRITERF(Image, y_resolution, resolution.y, dbl, &rm_image_data_type);
|
15430
15985
|
}
|
15431
15986
|
#else
|
15432
15987
|
/**
|
@@ -15437,7 +15992,7 @@ Image_y_resolution_eq(VALUE self, VALUE val)
|
|
15437
15992
|
VALUE
|
15438
15993
|
Image_x_resolution(VALUE self)
|
15439
15994
|
{
|
15440
|
-
|
15995
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, x_resolution, dbl, &rm_image_data_type);
|
15441
15996
|
}
|
15442
15997
|
|
15443
15998
|
/**
|
@@ -15449,7 +16004,7 @@ Image_x_resolution(VALUE self)
|
|
15449
16004
|
VALUE
|
15450
16005
|
Image_x_resolution_eq(VALUE self, VALUE val)
|
15451
16006
|
{
|
15452
|
-
|
16007
|
+
IMPLEMENT_TYPED_ATTR_WRITER(Image, x_resolution, dbl, &rm_image_data_type);
|
15453
16008
|
}
|
15454
16009
|
|
15455
16010
|
/**
|
@@ -15460,7 +16015,7 @@ Image_x_resolution_eq(VALUE self, VALUE val)
|
|
15460
16015
|
VALUE
|
15461
16016
|
Image_y_resolution(VALUE self)
|
15462
16017
|
{
|
15463
|
-
|
16018
|
+
IMPLEMENT_TYPED_ATTR_READER(Image, y_resolution, dbl, &rm_image_data_type);
|
15464
16019
|
}
|
15465
16020
|
|
15466
16021
|
/**
|
@@ -15472,7 +16027,7 @@ Image_y_resolution(VALUE self)
|
|
15472
16027
|
VALUE
|
15473
16028
|
Image_y_resolution_eq(VALUE self, VALUE val)
|
15474
16029
|
{
|
15475
|
-
|
16030
|
+
IMPLEMENT_TYPED_ATTR_WRITER(Image, y_resolution, dbl, &rm_image_data_type);
|
15476
16031
|
}
|
15477
16032
|
#endif
|
15478
16033
|
|
@@ -15531,7 +16086,7 @@ cropper(int bang, int argc, VALUE *argv, VALUE self)
|
|
15531
16086
|
switch (argc)
|
15532
16087
|
{
|
15533
16088
|
case 5:
|
15534
|
-
|
16089
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
15535
16090
|
|
15536
16091
|
VALUE_TO_ENUM(argv[0], gravity, GravityType);
|
15537
16092
|
|
@@ -15598,7 +16153,7 @@ cropper(int bang, int argc, VALUE *argv, VALUE self)
|
|
15598
16153
|
columns = NUM2ULONG(width);
|
15599
16154
|
rows = NUM2ULONG(height);
|
15600
16155
|
|
15601
|
-
|
16156
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
15602
16157
|
|
15603
16158
|
switch (gravity)
|
15604
16159
|
{
|
@@ -15661,10 +16216,10 @@ cropper(int bang, int argc, VALUE *argv, VALUE self)
|
|
15661
16216
|
break;
|
15662
16217
|
}
|
15663
16218
|
|
15664
|
-
cropped = xform_image(bang, self, x, y, width, height, CropImage);
|
16219
|
+
cropped = xform_image(bang, self, x, y, width, height, GVL_FUNC(CropImage));
|
15665
16220
|
if (reset_page)
|
15666
16221
|
{
|
15667
|
-
|
16222
|
+
TypedData_Get_Struct(cropped, Image, &rm_image_data_type, image);
|
15668
16223
|
ResetImagePage(image, "0x0+0+0");
|
15669
16224
|
}
|
15670
16225
|
|
@@ -15677,6 +16232,9 @@ cropper(int bang, int argc, VALUE *argv, VALUE self)
|
|
15677
16232
|
}
|
15678
16233
|
|
15679
16234
|
|
16235
|
+
// aliases for common use of structure types; ChopImage, CropImage, ShaveImage
|
16236
|
+
typedef GVL_STRUCT_TYPE(ChopImage) GVL_STRUCT_TYPE(xform_image);
|
16237
|
+
|
15680
16238
|
/**
|
15681
16239
|
* Call one of the image transformation functions.
|
15682
16240
|
*
|
@@ -15692,13 +16250,13 @@ cropper(int bang, int argc, VALUE *argv, VALUE self)
|
|
15692
16250
|
* @return self if bang, otherwise a new image
|
15693
16251
|
*/
|
15694
16252
|
static VALUE
|
15695
|
-
xform_image(int bang, VALUE self, VALUE x, VALUE y, VALUE width, VALUE height,
|
16253
|
+
xform_image(int bang, VALUE self, VALUE x, VALUE y, VALUE width, VALUE height, gvl_function_t fp)
|
15696
16254
|
{
|
15697
16255
|
Image *image, *new_image;
|
15698
16256
|
RectangleInfo rect;
|
15699
16257
|
ExceptionInfo *exception;
|
15700
16258
|
|
15701
|
-
|
16259
|
+
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
15702
16260
|
rect.x = NUM2LONG(x);
|
15703
16261
|
rect.y = NUM2LONG(y);
|
15704
16262
|
rect.width = NUM2ULONG(width);
|
@@ -15706,7 +16264,8 @@ xform_image(int bang, VALUE self, VALUE x, VALUE y, VALUE width, VALUE height, x
|
|
15706
16264
|
|
15707
16265
|
exception = AcquireExceptionInfo();
|
15708
16266
|
|
15709
|
-
|
16267
|
+
GVL_STRUCT_TYPE(xform_image) args = { image, &rect, exception };
|
16268
|
+
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(fp, &args);
|
15710
16269
|
|
15711
16270
|
// An exception can occur in either the old or the new images
|
15712
16271
|
rm_check_exception(exception, new_image, DestroyOnError);
|
@@ -15792,75 +16351,6 @@ raise_ChannelType_error(VALUE arg)
|
|
15792
16351
|
}
|
15793
16352
|
|
15794
16353
|
|
15795
|
-
|
15796
|
-
/**
|
15797
|
-
* If Magick.trace_proc is not nil, build an argument list and call the proc.
|
15798
|
-
*
|
15799
|
-
* No Ruby usage (internal function)
|
15800
|
-
*
|
15801
|
-
* @param image the image
|
15802
|
-
* @param which which operation the proc is being called for
|
15803
|
-
*/
|
15804
|
-
static void call_trace_proc(Image *image, const char *which)
|
15805
|
-
{
|
15806
|
-
VALUE trace;
|
15807
|
-
VALUE trace_args[4];
|
15808
|
-
|
15809
|
-
if (rb_ivar_defined(Module_Magick, rm_ID_trace_proc) == Qtrue)
|
15810
|
-
{
|
15811
|
-
trace = rb_ivar_get(Module_Magick, rm_ID_trace_proc);
|
15812
|
-
if (!NIL_P(trace))
|
15813
|
-
{
|
15814
|
-
// Maybe the stack won't get extended until we need the space.
|
15815
|
-
char buffer[MaxTextExtent];
|
15816
|
-
|
15817
|
-
trace_args[0] = ID2SYM(rb_intern(which));
|
15818
|
-
|
15819
|
-
build_inspect_string(image, buffer, sizeof(buffer));
|
15820
|
-
trace_args[1] = rb_str_new2(buffer);
|
15821
|
-
|
15822
|
-
snprintf(buffer, sizeof(buffer), "%p", (void *)image);
|
15823
|
-
trace_args[2] = rb_str_new2(buffer+2); // don't use leading 0x
|
15824
|
-
trace_args[3] = ID2SYM(rb_frame_this_func());
|
15825
|
-
rb_funcall2(trace, rm_ID_call, 4, (VALUE *)trace_args);
|
15826
|
-
}
|
15827
|
-
}
|
15828
|
-
|
15829
|
-
RB_GC_GUARD(trace);
|
15830
|
-
}
|
15831
|
-
|
15832
|
-
|
15833
|
-
static VALUE
|
15834
|
-
rm_trace_creation_body(VALUE img)
|
15835
|
-
{
|
15836
|
-
Image *image = (Image *)img;
|
15837
|
-
call_trace_proc(image, "c");
|
15838
|
-
return Qnil;
|
15839
|
-
}
|
15840
|
-
|
15841
|
-
static VALUE
|
15842
|
-
rm_trace_creation_handle_exception(VALUE img, VALUE exc)
|
15843
|
-
{
|
15844
|
-
Image *image = (Image *)img;
|
15845
|
-
DestroyImage(image);
|
15846
|
-
rb_exc_raise(exc);
|
15847
|
-
}
|
15848
|
-
|
15849
|
-
/**
|
15850
|
-
* Trace image creation
|
15851
|
-
*
|
15852
|
-
* No Ruby usage (internal function)
|
15853
|
-
*
|
15854
|
-
* @param image the image
|
15855
|
-
* @see call_trace_proc
|
15856
|
-
*/
|
15857
|
-
void rm_trace_creation(Image *image)
|
15858
|
-
{
|
15859
|
-
rb_rescue(rm_trace_creation_body, (VALUE)image, rm_trace_creation_handle_exception, (VALUE)image);
|
15860
|
-
}
|
15861
|
-
|
15862
|
-
|
15863
|
-
|
15864
16354
|
/**
|
15865
16355
|
* Destroy an image. Called from GC when all references to the image have gone
|
15866
16356
|
* out of scope.
|
@@ -15879,9 +16369,19 @@ void rm_image_destroy(void *img)
|
|
15879
16369
|
|
15880
16370
|
if (img != NULL)
|
15881
16371
|
{
|
15882
|
-
call_trace_proc(image, "d");
|
15883
16372
|
DestroyImage(image);
|
15884
16373
|
}
|
15885
16374
|
}
|
15886
16375
|
|
15887
|
-
|
16376
|
+
/**
|
16377
|
+
* Get Image object size.
|
16378
|
+
*
|
16379
|
+
* No Ruby usage (internal function)
|
16380
|
+
*
|
16381
|
+
* @param ptr pointer to the Image object
|
16382
|
+
*/
|
16383
|
+
static size_t
|
16384
|
+
rm_image_memsize(const void *ptr)
|
16385
|
+
{
|
16386
|
+
return sizeof(Image);
|
16387
|
+
}
|