rmagick 5.3.0 → 5.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.devcontainer/ImageMagick6/devcontainer.json +1 -1
- data/.devcontainer/devcontainer.json +1 -1
- data/.devcontainer/setup-user.sh +1 -1
- data/.editorconfig +1 -1
- data/.github/workflows/ci.yml +20 -16
- data/.gitignore +1 -0
- data/.yardopts +1 -1
- data/CHANGELOG.md +13 -0
- data/before_install_osx.sh +1 -1
- data/ext/RMagick/extconf.rb +19 -12
- data/ext/RMagick/{rmagick.c → rmagick.cpp} +19 -22
- data/ext/RMagick/rmagick.h +70 -49
- data/ext/RMagick/{rmdraw.c → rmdraw.cpp} +25 -24
- data/ext/RMagick/{rmenum.c → rmenum.cpp} +42 -42
- data/ext/RMagick/{rmfill.c → rmfill.cpp} +6 -6
- data/ext/RMagick/{rmilist.c → rmilist.cpp} +23 -21
- data/ext/RMagick/{rmimage.c → rmimage.cpp} +202 -157
- data/ext/RMagick/{rminfo.c → rminfo.cpp} +11 -11
- data/ext/RMagick/{rmkinfo.c → rmkinfo.cpp} +4 -9
- data/ext/RMagick/rmmain.cpp +1957 -0
- data/ext/RMagick/{rmmontage.c → rmmontage.cpp} +5 -5
- data/ext/RMagick/{rmpixel.c → rmpixel.cpp} +40 -41
- data/ext/RMagick/{rmstruct.c → rmstruct.cpp} +6 -6
- data/ext/RMagick/{rmutil.c → rmutil.cpp} +33 -13
- data/lib/rmagick/version.rb +1 -1
- data/rmagick.gemspec +1 -0
- metadata +30 -16
- data/ext/RMagick/rmmain.c +0 -1955
@@ -5,8 +5,8 @@
|
|
5
5
|
*
|
6
6
|
* Changes since Nov. 2009 copyright © by Benjamin Thomas and Omer Bar-or
|
7
7
|
*
|
8
|
-
* @file rmimage.
|
9
|
-
* @version $Id: rmimage.
|
8
|
+
* @file rmimage.cpp
|
9
|
+
* @version $Id: rmimage.cpp,v 1.361 2010/05/03 03:34:48 baror Exp $
|
10
10
|
* @author Tim Hunter
|
11
11
|
******************************************************************************/
|
12
12
|
|
@@ -126,6 +126,7 @@ DEFINE_GVL_STUB4(ColorizeImage, const Image *, const char *, const PixelInfo *,
|
|
126
126
|
DEFINE_GVL_STUB5(CompareImages, Image *, const Image *, const MetricType, double *, ExceptionInfo *);
|
127
127
|
DEFINE_GVL_STUB7(CompositeImage, Image *, const Image *, const CompositeOperator, const MagickBooleanType, const ssize_t, const ssize_t, ExceptionInfo *);
|
128
128
|
DEFINE_GVL_STUB2(CompressImageColormap, Image *, ExceptionInfo *);
|
129
|
+
DEFINE_GVL_STUB3(ContrastImage, Image *, const MagickBooleanType, ExceptionInfo *);
|
129
130
|
DEFINE_GVL_STUB4(ContrastStretchImage, Image *, const double, const double, ExceptionInfo *);
|
130
131
|
DEFINE_GVL_STUB3(ConvolveImage, const Image *, const KernelInfo *, ExceptionInfo *);
|
131
132
|
DEFINE_GVL_STUB3(CycleColormapImage, Image *, const ssize_t, ExceptionInfo *);
|
@@ -206,6 +207,7 @@ DEFINE_GVL_STUB6(CompareImageChannels, Image *, const Image *, const ChannelType
|
|
206
207
|
DEFINE_GVL_STUB5(CompositeImage, Image *, const CompositeOperator, const Image *, const ssize_t, const ssize_t);
|
207
208
|
DEFINE_GVL_STUB6(CompositeImageChannel, Image *, const ChannelType, const CompositeOperator, const Image *, const ssize_t, const ssize_t);
|
208
209
|
DEFINE_GVL_STUB1(CompressImageColormap, Image *);
|
210
|
+
DEFINE_GVL_STUB2(ContrastImage, Image *, const MagickBooleanType);
|
209
211
|
DEFINE_GVL_STUB4(ContrastStretchImageChannel, Image *, const ChannelType, const double, const double);
|
210
212
|
DEFINE_GVL_STUB4(ConvolveImage, const Image *, const size_t, const double *, ExceptionInfo *);
|
211
213
|
DEFINE_GVL_STUB5(ConvolveImageChannel, const Image *, const ChannelType, const size_t, const double *, ExceptionInfo *);
|
@@ -597,10 +599,10 @@ Image_adaptive_sharpen_channel(int argc, VALUE *argv, VALUE self)
|
|
597
599
|
* local neighborhood. This allows for thresholding of an image whose global intensity histogram
|
598
600
|
* doesn't contain distinctive peaks.
|
599
601
|
*
|
600
|
-
* @overload adaptive_threshold(width = 3, height = 3,
|
602
|
+
* @overload adaptive_threshold(width = 3, height = 3, bias = 0)
|
601
603
|
* @param width [Numeric] the width of the local neighborhood.
|
602
604
|
* @param height [Numeric] the height of the local neighborhood.
|
603
|
-
* @param
|
605
|
+
* @param bias [Numeric] the mean offset
|
604
606
|
* @return [Magick::Image] a new image
|
605
607
|
*/
|
606
608
|
VALUE
|
@@ -608,7 +610,7 @@ Image_adaptive_threshold(int argc, VALUE *argv, VALUE self)
|
|
608
610
|
{
|
609
611
|
Image *image, *new_image;
|
610
612
|
unsigned long width = 3, height = 3;
|
611
|
-
|
613
|
+
double bias = 0;
|
612
614
|
ExceptionInfo *exception;
|
613
615
|
|
614
616
|
image = rm_check_destroyed(self);
|
@@ -616,7 +618,7 @@ Image_adaptive_threshold(int argc, VALUE *argv, VALUE self)
|
|
616
618
|
switch (argc)
|
617
619
|
{
|
618
620
|
case 3:
|
619
|
-
|
621
|
+
bias = NUM2DBL(argv[2]);
|
620
622
|
case 2:
|
621
623
|
height = NUM2ULONG(argv[1]);
|
622
624
|
case 1:
|
@@ -628,7 +630,7 @@ Image_adaptive_threshold(int argc, VALUE *argv, VALUE self)
|
|
628
630
|
}
|
629
631
|
|
630
632
|
exception = AcquireExceptionInfo();
|
631
|
-
GVL_STRUCT_TYPE(AdaptiveThresholdImage) args = { image, width, height,
|
633
|
+
GVL_STRUCT_TYPE(AdaptiveThresholdImage) args = { image, width, height, bias, exception };
|
632
634
|
new_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(AdaptiveThresholdImage), &args);
|
633
635
|
rm_check_exception(exception, new_image, DestroyOnError);
|
634
636
|
DestroyExceptionInfo(exception);
|
@@ -757,7 +759,7 @@ Image_add_noise_channel(int argc, VALUE *argv, VALUE self)
|
|
757
759
|
}
|
758
760
|
|
759
761
|
VALUE_TO_ENUM(argv[0], noise_type, NoiseType);
|
760
|
-
channels
|
762
|
+
channels = (ChannelType)(channels & ~OpacityChannel);
|
761
763
|
|
762
764
|
exception = AcquireExceptionInfo();
|
763
765
|
#if defined(IMAGEMAGICK_7)
|
@@ -953,7 +955,8 @@ Image_affine_transform(VALUE self, VALUE affine)
|
|
953
955
|
|
954
956
|
exception = AcquireExceptionInfo();
|
955
957
|
GVL_STRUCT_TYPE(AffineTransformImage) args = { image, &matrix, exception };
|
956
|
-
|
958
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(AffineTransformImage), &args);
|
959
|
+
new_image = reinterpret_cast<decltype(new_image)>(ret);
|
957
960
|
rm_check_exception(exception, new_image, DestroyOnError);
|
958
961
|
DestroyExceptionInfo(exception);
|
959
962
|
|
@@ -1098,7 +1101,8 @@ crisscross(int bang, VALUE self, gvl_function_t fp)
|
|
1098
1101
|
exception = AcquireExceptionInfo();
|
1099
1102
|
|
1100
1103
|
GVL_STRUCT_TYPE(crisscross) args = { image, exception };
|
1101
|
-
|
1104
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(fp, &args);
|
1105
|
+
new_image = reinterpret_cast<decltype(new_image)>(ret);
|
1102
1106
|
rm_check_exception(exception, new_image, DestroyOnError);
|
1103
1107
|
DestroyExceptionInfo(exception);
|
1104
1108
|
|
@@ -2801,13 +2805,15 @@ Image_clut_channel(int argc, VALUE *argv, VALUE self)
|
|
2801
2805
|
exception = AcquireExceptionInfo();
|
2802
2806
|
BEGIN_CHANNEL_MASK(image, channels);
|
2803
2807
|
GVL_STRUCT_TYPE(ClutImage) args = { image, clut, image->interpolate, exception };
|
2804
|
-
|
2808
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ClutImage), &args);
|
2809
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
2805
2810
|
END_CHANNEL_MASK(image);
|
2806
2811
|
CHECK_EXCEPTION();
|
2807
2812
|
DestroyExceptionInfo(exception);
|
2808
2813
|
#else
|
2809
2814
|
GVL_STRUCT_TYPE(ClutImageChannel) args = { image, channels, clut };
|
2810
|
-
|
2815
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ClutImageChannel), &args);
|
2816
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
2811
2817
|
rm_check_image_exception(image, RetainOnError);
|
2812
2818
|
rm_check_image_exception(clut, RetainOnError);
|
2813
2819
|
#endif
|
@@ -2857,7 +2863,8 @@ Image_color_histogram(VALUE self)
|
|
2857
2863
|
}
|
2858
2864
|
|
2859
2865
|
GVL_STRUCT_TYPE(GetImageHistogram) args = { image, &colors, exception };
|
2860
|
-
|
2866
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetImageHistogram), &args);
|
2867
|
+
histogram = reinterpret_cast<decltype(histogram)>(ret);
|
2861
2868
|
|
2862
2869
|
if (histogram == NULL)
|
2863
2870
|
{
|
@@ -2927,7 +2934,7 @@ set_profile(VALUE self, const char *name, VALUE profile)
|
|
2927
2934
|
ExceptionInfo *exception;
|
2928
2935
|
char *profile_name;
|
2929
2936
|
char *profile_blob;
|
2930
|
-
|
2937
|
+
size_t profile_length;
|
2931
2938
|
const StringInfo *profile_data;
|
2932
2939
|
|
2933
2940
|
image = rm_check_frozen(self);
|
@@ -2951,7 +2958,7 @@ set_profile(VALUE self, const char *name, VALUE profile)
|
|
2951
2958
|
|
2952
2959
|
strlcpy(info->magick, m->name, sizeof(info->magick));
|
2953
2960
|
|
2954
|
-
GVL_STRUCT_TYPE(BlobToImage) args = { info, profile_blob,
|
2961
|
+
GVL_STRUCT_TYPE(BlobToImage) args = { info, profile_blob, profile_length, exception };
|
2955
2962
|
profile_image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlobToImage), &args);
|
2956
2963
|
DestroyImageInfo(info);
|
2957
2964
|
CHECK_EXCEPTION();
|
@@ -3098,7 +3105,7 @@ Image_color_flood_fill(VALUE self, VALUE target_color, VALUE fill_color,
|
|
3098
3105
|
y = NUM2LONG(yv);
|
3099
3106
|
if ((unsigned long)x > image->columns || (unsigned long)y > image->rows)
|
3100
3107
|
{
|
3101
|
-
rb_raise(rb_eArgError, "target out of range. %lux%lu given, image is %"RMIuSIZE"x%"RMIuSIZE"",
|
3108
|
+
rb_raise(rb_eArgError, "target out of range. %lux%lu given, image is %" RMIuSIZE "x%" RMIuSIZE "",
|
3102
3109
|
x, y, image->columns, image->rows);
|
3103
3110
|
}
|
3104
3111
|
|
@@ -3541,7 +3548,7 @@ composite(int bang, int argc, VALUE *argv, VALUE self, ChannelType channels)
|
|
3541
3548
|
{
|
3542
3549
|
Image *image, *new_image;
|
3543
3550
|
Image *comp_image;
|
3544
|
-
CompositeOperator
|
3551
|
+
CompositeOperator composite_op = UndefinedCompositeOp;
|
3545
3552
|
GravityType gravity;
|
3546
3553
|
VALUE comp;
|
3547
3554
|
signed long x_offset = 0;
|
@@ -3570,7 +3577,7 @@ composite(int bang, int argc, VALUE *argv, VALUE self, ChannelType channels)
|
|
3570
3577
|
{
|
3571
3578
|
case 3: // argv[1] is gravity, argv[2] is composite_op
|
3572
3579
|
VALUE_TO_ENUM(argv[1], gravity, GravityType);
|
3573
|
-
VALUE_TO_ENUM(argv[2],
|
3580
|
+
VALUE_TO_ENUM(argv[2], composite_op, CompositeOperator);
|
3574
3581
|
|
3575
3582
|
// convert gravity to x, y offsets
|
3576
3583
|
switch (gravity)
|
@@ -3620,14 +3627,14 @@ composite(int bang, int argc, VALUE *argv, VALUE self, ChannelType channels)
|
|
3620
3627
|
// argv[3] is composite_op
|
3621
3628
|
x_offset = NUM2LONG(argv[1]);
|
3622
3629
|
y_offset = NUM2LONG(argv[2]);
|
3623
|
-
VALUE_TO_ENUM(argv[3],
|
3630
|
+
VALUE_TO_ENUM(argv[3], composite_op, CompositeOperator);
|
3624
3631
|
break;
|
3625
3632
|
|
3626
3633
|
case 5:
|
3627
3634
|
VALUE_TO_ENUM(argv[1], gravity, GravityType);
|
3628
3635
|
x_offset = NUM2LONG(argv[2]);
|
3629
3636
|
y_offset = NUM2LONG(argv[3]);
|
3630
|
-
VALUE_TO_ENUM(argv[4],
|
3637
|
+
VALUE_TO_ENUM(argv[4], composite_op, CompositeOperator);
|
3631
3638
|
|
3632
3639
|
switch (gravity)
|
3633
3640
|
{
|
@@ -3670,13 +3677,13 @@ composite(int bang, int argc, VALUE *argv, VALUE self, ChannelType channels)
|
|
3670
3677
|
#if defined(IMAGEMAGICK_7)
|
3671
3678
|
exception = AcquireExceptionInfo();
|
3672
3679
|
BEGIN_CHANNEL_MASK(image, channels);
|
3673
|
-
GVL_STRUCT_TYPE(CompositeImage) args = { image, comp_image,
|
3680
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { image, comp_image, composite_op, MagickTrue, x_offset, y_offset, exception };
|
3674
3681
|
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
3675
3682
|
END_CHANNEL_MASK(image);
|
3676
3683
|
CHECK_EXCEPTION();
|
3677
3684
|
DestroyExceptionInfo(exception);
|
3678
3685
|
#else
|
3679
|
-
GVL_STRUCT_TYPE(CompositeImageChannel) args = { image, channels,
|
3686
|
+
GVL_STRUCT_TYPE(CompositeImageChannel) args = { image, channels, composite_op, comp_image, x_offset, y_offset };
|
3680
3687
|
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImageChannel), &args);
|
3681
3688
|
rm_check_image_exception(image, RetainOnError);
|
3682
3689
|
#endif
|
@@ -3690,13 +3697,13 @@ composite(int bang, int argc, VALUE *argv, VALUE self, ChannelType channels)
|
|
3690
3697
|
#if defined(IMAGEMAGICK_7)
|
3691
3698
|
exception = AcquireExceptionInfo();
|
3692
3699
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
3693
|
-
GVL_STRUCT_TYPE(CompositeImage) args = { new_image, comp_image,
|
3700
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { new_image, comp_image, composite_op, MagickTrue, x_offset, y_offset, exception };
|
3694
3701
|
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
3695
3702
|
END_CHANNEL_MASK(new_image);
|
3696
3703
|
rm_check_exception(exception, new_image, DestroyOnError);
|
3697
3704
|
DestroyExceptionInfo(exception);
|
3698
3705
|
#else
|
3699
|
-
GVL_STRUCT_TYPE(CompositeImageChannel) args = { new_image, channels,
|
3706
|
+
GVL_STRUCT_TYPE(CompositeImageChannel) args = { new_image, channels, composite_op, comp_image, x_offset, y_offset };
|
3700
3707
|
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImageChannel), &args);
|
3701
3708
|
rm_check_image_exception(new_image, DestroyOnError);
|
3702
3709
|
#endif
|
@@ -4123,7 +4130,7 @@ composite_tiled(int bang, int argc, VALUE *argv, VALUE self)
|
|
4123
4130
|
{
|
4124
4131
|
Image *image;
|
4125
4132
|
Image *comp_image;
|
4126
|
-
CompositeOperator
|
4133
|
+
CompositeOperator composite_op = OverCompositeOp;
|
4127
4134
|
long x, y;
|
4128
4135
|
unsigned long columns;
|
4129
4136
|
ChannelType channels;
|
@@ -4147,7 +4154,7 @@ composite_tiled(int bang, int argc, VALUE *argv, VALUE self)
|
|
4147
4154
|
switch (argc)
|
4148
4155
|
{
|
4149
4156
|
case 2:
|
4150
|
-
VALUE_TO_ENUM(argv[1],
|
4157
|
+
VALUE_TO_ENUM(argv[1], composite_op, CompositeOperator);
|
4151
4158
|
case 1:
|
4152
4159
|
break;
|
4153
4160
|
case 0:
|
@@ -4181,13 +4188,15 @@ composite_tiled(int bang, int argc, VALUE *argv, VALUE self)
|
|
4181
4188
|
{
|
4182
4189
|
#if defined(IMAGEMAGICK_7)
|
4183
4190
|
BEGIN_CHANNEL_MASK(image, channels);
|
4184
|
-
GVL_STRUCT_TYPE(CompositeImage) args = { image, comp_image,
|
4185
|
-
|
4191
|
+
GVL_STRUCT_TYPE(CompositeImage) args = { image, comp_image, composite_op, MagickTrue, x, y, exception };
|
4192
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImage), &args);
|
4193
|
+
status = reinterpret_cast<MagickStatusType &>(ret);
|
4186
4194
|
END_CHANNEL_MASK(image);
|
4187
4195
|
rm_check_exception(exception, image, bang ? RetainOnError: DestroyOnError);
|
4188
4196
|
#else
|
4189
|
-
GVL_STRUCT_TYPE(CompositeImageChannel) args = { image, channels,
|
4190
|
-
|
4197
|
+
GVL_STRUCT_TYPE(CompositeImageChannel) args = { image, channels, composite_op, comp_image, x, y };
|
4198
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompositeImageChannel), &args);
|
4199
|
+
status = reinterpret_cast<MagickStatusType &>(ret);
|
4191
4200
|
rm_check_image_exception(image, bang ? RetainOnError: DestroyOnError);
|
4192
4201
|
#endif
|
4193
4202
|
}
|
@@ -4301,12 +4310,14 @@ Image_compress_colormap_bang(VALUE self)
|
|
4301
4310
|
#if defined(IMAGEMAGICK_7)
|
4302
4311
|
exception = AcquireExceptionInfo();
|
4303
4312
|
GVL_STRUCT_TYPE(CompressImageColormap) args = { image, exception };
|
4304
|
-
|
4313
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompressImageColormap), &args);
|
4314
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
4305
4315
|
CHECK_EXCEPTION();
|
4306
4316
|
DestroyExceptionInfo(exception);
|
4307
4317
|
#else
|
4308
4318
|
GVL_STRUCT_TYPE(CompressImageColormap) args = { image };
|
4309
|
-
|
4319
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(CompressImageColormap), &args);
|
4320
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
4310
4321
|
rm_check_image_exception(image, RetainOnError);
|
4311
4322
|
#endif
|
4312
4323
|
if (!okay)
|
@@ -4339,12 +4350,13 @@ Image_compress_colormap_bang(VALUE self)
|
|
4339
4350
|
* @return [Magick::Image] a new image
|
4340
4351
|
*/
|
4341
4352
|
VALUE
|
4342
|
-
Image_constitute(VALUE
|
4353
|
+
Image_constitute(VALUE klass ATTRIBUTE_UNUSED, VALUE width_arg, VALUE height_arg,
|
4343
4354
|
VALUE map_arg, VALUE pixels_arg)
|
4344
4355
|
{
|
4345
4356
|
Image *new_image;
|
4346
4357
|
VALUE pixel, pixel0;
|
4347
|
-
long
|
4358
|
+
long x, npixels;
|
4359
|
+
size_t width, height, map_l;
|
4348
4360
|
char *map;
|
4349
4361
|
volatile union
|
4350
4362
|
{
|
@@ -4360,14 +4372,13 @@ Image_constitute(VALUE class ATTRIBUTE_UNUSED, VALUE width_arg, VALUE height_arg
|
|
4360
4372
|
// and raises TypeError if it can't.
|
4361
4373
|
pixels_arg = rb_Array(pixels_arg);
|
4362
4374
|
|
4363
|
-
|
4364
|
-
height = NUM2LONG(height_arg);
|
4365
|
-
|
4366
|
-
if (width <= 0 || height <= 0)
|
4375
|
+
if (NUM2LONG(width_arg) <= 0 || NUM2LONG(height_arg) <= 0)
|
4367
4376
|
{
|
4368
4377
|
rb_raise(rb_eArgError, "width and height must be greater than zero");
|
4369
4378
|
}
|
4370
4379
|
|
4380
|
+
width = NUM2LONG(width_arg);
|
4381
|
+
height = NUM2LONG(height_arg);
|
4371
4382
|
map = rm_str2cstr(map_arg, &map_l);
|
4372
4383
|
|
4373
4384
|
npixels = width * height * map_l;
|
@@ -4507,7 +4518,7 @@ VALUE
|
|
4507
4518
|
Image_contrast(int argc, VALUE *argv, VALUE self)
|
4508
4519
|
{
|
4509
4520
|
Image *image, *new_image;
|
4510
|
-
|
4521
|
+
MagickBooleanType sharpen = MagickFalse;
|
4511
4522
|
#if defined(IMAGEMAGICK_7)
|
4512
4523
|
ExceptionInfo *exception;
|
4513
4524
|
#endif
|
@@ -4519,18 +4530,20 @@ Image_contrast(int argc, VALUE *argv, VALUE self)
|
|
4519
4530
|
}
|
4520
4531
|
else if (argc == 1)
|
4521
4532
|
{
|
4522
|
-
sharpen = RTEST(argv[0]);
|
4533
|
+
sharpen = (MagickBooleanType)RTEST(argv[0]);
|
4523
4534
|
}
|
4524
4535
|
|
4525
4536
|
new_image = rm_clone_image(image);
|
4526
4537
|
|
4527
4538
|
#if defined(IMAGEMAGICK_7)
|
4528
4539
|
exception = AcquireExceptionInfo();
|
4529
|
-
ContrastImage
|
4540
|
+
GVL_STRUCT_TYPE(ContrastImage) args = { new_image, sharpen, exception };
|
4541
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ContrastImage), &args);
|
4530
4542
|
rm_check_exception(exception, new_image, DestroyOnError);
|
4531
4543
|
DestroyExceptionInfo(exception);
|
4532
4544
|
#else
|
4533
|
-
ContrastImage
|
4545
|
+
GVL_STRUCT_TYPE(ContrastImage) args = { new_image, sharpen };
|
4546
|
+
CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ContrastImage), &args);
|
4534
4547
|
rm_check_image_exception(new_image, DestroyOnError);
|
4535
4548
|
#endif
|
4536
4549
|
|
@@ -4805,7 +4818,7 @@ VALUE
|
|
4805
4818
|
Image_convolve(VALUE self, VALUE order_arg, VALUE kernel_arg)
|
4806
4819
|
{
|
4807
4820
|
Image *image, *new_image;
|
4808
|
-
|
4821
|
+
size_t order;
|
4809
4822
|
ExceptionInfo *exception;
|
4810
4823
|
#if defined(IMAGEMAGICK_7)
|
4811
4824
|
KernelInfo *kernel;
|
@@ -4816,13 +4829,12 @@ Image_convolve(VALUE self, VALUE order_arg, VALUE kernel_arg)
|
|
4816
4829
|
|
4817
4830
|
image = rm_check_destroyed(self);
|
4818
4831
|
|
4819
|
-
|
4820
|
-
|
4821
|
-
if (order <= 0)
|
4832
|
+
if (NUM2INT(order_arg) <= 0)
|
4822
4833
|
{
|
4823
4834
|
rb_raise(rb_eArgError, "order must be non-zero and positive");
|
4824
4835
|
}
|
4825
4836
|
|
4837
|
+
order = NUM2INT(order_arg);
|
4826
4838
|
kernel_arg = rb_Array(kernel_arg);
|
4827
4839
|
rm_check_ary_len(kernel_arg, (long)(order*order));
|
4828
4840
|
|
@@ -4886,7 +4898,7 @@ Image_convolve_channel(int argc, VALUE *argv, VALUE self)
|
|
4886
4898
|
{
|
4887
4899
|
Image *image, *new_image;
|
4888
4900
|
VALUE ary;
|
4889
|
-
|
4901
|
+
size_t order;
|
4890
4902
|
ChannelType channels;
|
4891
4903
|
ExceptionInfo *exception;
|
4892
4904
|
#if defined(IMAGEMAGICK_7)
|
@@ -4910,12 +4922,12 @@ Image_convolve_channel(int argc, VALUE *argv, VALUE self)
|
|
4910
4922
|
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or more)", argc);
|
4911
4923
|
}
|
4912
4924
|
|
4913
|
-
|
4914
|
-
if (order <= 0)
|
4925
|
+
if (NUM2INT(argv[0]) <= 0)
|
4915
4926
|
{
|
4916
4927
|
rb_raise(rb_eArgError, "order must be non-zero and positive");
|
4917
4928
|
}
|
4918
4929
|
|
4930
|
+
order = NUM2INT(argv[0]);
|
4919
4931
|
ary = rb_Array(argv[1]);
|
4920
4932
|
rm_check_ary_len(ary, (long)(order*order));
|
4921
4933
|
|
@@ -5236,7 +5248,8 @@ Image_decipher(VALUE self, VALUE passphrase)
|
|
5236
5248
|
new_image = rm_clone_image(image);
|
5237
5249
|
|
5238
5250
|
GVL_STRUCT_TYPE(DecipherImage) args = { new_image, pf, exception };
|
5239
|
-
|
5251
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(DecipherImage), &args);
|
5252
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
5240
5253
|
rm_check_exception(exception, new_image, DestroyOnError);
|
5241
5254
|
if (!okay)
|
5242
5255
|
{
|
@@ -5665,7 +5678,7 @@ Image_dispatch(int argc, VALUE *argv, VALUE self)
|
|
5665
5678
|
VALUE pixels_ary;
|
5666
5679
|
StorageType stg_type = QuantumPixel;
|
5667
5680
|
char *map;
|
5668
|
-
|
5681
|
+
size_t mapL;
|
5669
5682
|
MagickBooleanType okay;
|
5670
5683
|
ExceptionInfo *exception;
|
5671
5684
|
volatile union
|
@@ -5704,7 +5717,8 @@ Image_dispatch(int argc, VALUE *argv, VALUE self)
|
|
5704
5717
|
|
5705
5718
|
exception = AcquireExceptionInfo();
|
5706
5719
|
GVL_STRUCT_TYPE(ExportImagePixels) args = { image, x, y, columns, rows, map, stg_type, (void *)pixels.v, exception };
|
5707
|
-
|
5720
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ExportImagePixels), &args);
|
5721
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
5708
5722
|
|
5709
5723
|
if (!okay)
|
5710
5724
|
{
|
@@ -5759,7 +5773,7 @@ Image_display(VALUE self)
|
|
5759
5773
|
|
5760
5774
|
if (image->rows == 0 || image->columns == 0)
|
5761
5775
|
{
|
5762
|
-
rb_raise(rb_eArgError, "invalid image geometry (%"RMIuSIZE"x%"RMIuSIZE")", image->rows, image->columns);
|
5776
|
+
rb_raise(rb_eArgError, "invalid image geometry (%" RMIuSIZE "x%" RMIuSIZE ")", image->rows, image->columns);
|
5763
5777
|
}
|
5764
5778
|
|
5765
5779
|
info_obj = rm_info_new();
|
@@ -5937,7 +5951,7 @@ Image_distort(int argc, VALUE *argv, VALUE self)
|
|
5937
5951
|
switch (argc)
|
5938
5952
|
{
|
5939
5953
|
case 3:
|
5940
|
-
bestfit = RTEST(argv[2]);
|
5954
|
+
bestfit = (MagickBooleanType)RTEST(argv[2]);
|
5941
5955
|
case 2:
|
5942
5956
|
// Ensure pts is an array
|
5943
5957
|
pts = rb_Array(argv[1]);
|
@@ -6299,7 +6313,8 @@ Image_encipher(VALUE self, VALUE passphrase)
|
|
6299
6313
|
new_image = rm_clone_image(image);
|
6300
6314
|
|
6301
6315
|
GVL_STRUCT_TYPE(EncipherImage) args = { new_image, pf, exception };
|
6302
|
-
|
6316
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(EncipherImage), &args);
|
6317
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
6303
6318
|
rm_check_exception(exception, new_image, DestroyOnError);
|
6304
6319
|
if (!okay)
|
6305
6320
|
{
|
@@ -6649,7 +6664,8 @@ Image_export_pixels(int argc, VALUE *argv, VALUE self)
|
|
6649
6664
|
exception = AcquireExceptionInfo();
|
6650
6665
|
|
6651
6666
|
GVL_STRUCT_TYPE(ExportImagePixels) args = { image, x_off, y_off, cols, rows, map, QuantumPixel, (void *)pixels, exception };
|
6652
|
-
|
6667
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ExportImagePixels), &args);
|
6668
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
6653
6669
|
if (!okay)
|
6654
6670
|
{
|
6655
6671
|
xfree((void *)pixels);
|
@@ -6725,7 +6741,7 @@ Image_extent(int argc, VALUE *argv, VALUE self)
|
|
6725
6741
|
}
|
6726
6742
|
else
|
6727
6743
|
{
|
6728
|
-
rb_raise(rb_eArgError, "invalid extent geometry %ldx%ld+%"RMIdSIZE"+%"RMIdSIZE"",
|
6744
|
+
rb_raise(rb_eArgError, "invalid extent geometry %ldx%ld+%" RMIdSIZE "+%" RMIdSIZE "",
|
6729
6745
|
width, height, geometry.x, geometry.y);
|
6730
6746
|
}
|
6731
6747
|
}
|
@@ -6841,7 +6857,8 @@ Image_export_pixels_to_str(int argc, VALUE *argv, VALUE self)
|
|
6841
6857
|
exception = AcquireExceptionInfo();
|
6842
6858
|
|
6843
6859
|
GVL_STRUCT_TYPE(ExportImagePixels) args = { image, x_off, y_off, cols, rows, map, type, (void *)RSTRING_PTR(string), exception };
|
6844
|
-
|
6860
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ExportImagePixels), &args);
|
6861
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
6845
6862
|
if (!okay)
|
6846
6863
|
{
|
6847
6864
|
// Let GC have the string buffer.
|
@@ -6985,11 +7002,12 @@ Image_find_similar_region(int argc, VALUE *argv, VALUE self)
|
|
6985
7002
|
exception = AcquireExceptionInfo();
|
6986
7003
|
#if defined(IMAGEMAGICK_7)
|
6987
7004
|
GVL_STRUCT_TYPE(IsEquivalentImage) args = { image, target, &x, &y, exception };
|
6988
|
-
|
7005
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(IsEquivalentImage), &args);
|
6989
7006
|
#else
|
6990
7007
|
GVL_STRUCT_TYPE(IsImageSimilar) args = { image, target, &x, &y, exception };
|
6991
|
-
|
7008
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(IsImageSimilar), &args);
|
6992
7009
|
#endif
|
7010
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
6993
7011
|
CHECK_EXCEPTION();
|
6994
7012
|
DestroyExceptionInfo(exception);
|
6995
7013
|
|
@@ -7261,14 +7279,14 @@ Image_frame(int argc, VALUE *argv, VALUE self)
|
|
7261
7279
|
* @see Image#to_blob
|
7262
7280
|
*/
|
7263
7281
|
VALUE
|
7264
|
-
Image_from_blob(VALUE
|
7282
|
+
Image_from_blob(VALUE klass ATTRIBUTE_UNUSED, VALUE blob_arg)
|
7265
7283
|
{
|
7266
7284
|
Image *images;
|
7267
7285
|
Info *info;
|
7268
7286
|
VALUE info_obj;
|
7269
7287
|
ExceptionInfo *exception;
|
7270
7288
|
void *blob;
|
7271
|
-
|
7289
|
+
size_t length;
|
7272
7290
|
|
7273
7291
|
blob = (void *) rm_str2cstr(blob_arg, &length);
|
7274
7292
|
|
@@ -7827,7 +7845,8 @@ Image_get_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg, VALUE row
|
|
7827
7845
|
// to change the pixels but I don't want to make "pixels" const.
|
7828
7846
|
exception = AcquireExceptionInfo();
|
7829
7847
|
GVL_STRUCT_TYPE(GetVirtualPixels) args = { image, x, y, columns, rows, exception };
|
7830
|
-
|
7848
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetVirtualPixels), &args);
|
7849
|
+
pixels = reinterpret_cast<decltype(pixels)>(ret);
|
7831
7850
|
CHECK_EXCEPTION();
|
7832
7851
|
|
7833
7852
|
DestroyExceptionInfo(exception);
|
@@ -8040,7 +8059,7 @@ Image_import_pixels(int argc, VALUE *argv, VALUE self)
|
|
8040
8059
|
long x_off, y_off;
|
8041
8060
|
unsigned long cols, rows;
|
8042
8061
|
unsigned long n, npixels;
|
8043
|
-
|
8062
|
+
size_t buffer_l;
|
8044
8063
|
char *map;
|
8045
8064
|
VALUE pixel_arg, pixel_ary;
|
8046
8065
|
StorageType stg_type = CharPixel;
|
@@ -8120,7 +8139,7 @@ Image_import_pixels(int argc, VALUE *argv, VALUE self)
|
|
8120
8139
|
}
|
8121
8140
|
if ((unsigned long)(buffer_l / type_sz) < npixels)
|
8122
8141
|
{
|
8123
|
-
rb_raise(rb_eArgError, "pixel buffer too small (need %lu channel values, got %"RMIuSIZE")",
|
8142
|
+
rb_raise(rb_eArgError, "pixel buffer too small (need %lu channel values, got %" RMIuSIZE ")",
|
8124
8143
|
npixels, buffer_l/type_sz);
|
8125
8144
|
}
|
8126
8145
|
}
|
@@ -8189,7 +8208,8 @@ Image_import_pixels(int argc, VALUE *argv, VALUE self)
|
|
8189
8208
|
#else
|
8190
8209
|
GVL_STRUCT_TYPE(ImportImagePixels) args = { image, x_off, y_off, cols, rows, map, stg_type, buffer };
|
8191
8210
|
#endif
|
8192
|
-
|
8211
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ImportImagePixels), &args);
|
8212
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
8193
8213
|
|
8194
8214
|
// Free pixel array before checking for errors.
|
8195
8215
|
if (pixels)
|
@@ -8253,7 +8273,7 @@ build_inspect_string(Image *image, char *buffer, size_t len)
|
|
8253
8273
|
// Print scene number.
|
8254
8274
|
if ((GetPreviousImageInList(image) != NULL) && (GetNextImageInList(image) != NULL) && image->scene > 0)
|
8255
8275
|
{
|
8256
|
-
x += snprintf(buffer+x, len-x, "[%"RMIuSIZE"]", image->scene);
|
8276
|
+
x += snprintf(buffer+x, len-x, "[%" RMIuSIZE "]", image->scene);
|
8257
8277
|
}
|
8258
8278
|
// Print format
|
8259
8279
|
x += snprintf(buffer+x, len-x, " %s ", image->magick);
|
@@ -8263,17 +8283,17 @@ build_inspect_string(Image *image, char *buffer, size_t len)
|
|
8263
8283
|
{
|
8264
8284
|
if (image->magick_columns != image->columns || image->magick_rows != image->rows)
|
8265
8285
|
{
|
8266
|
-
x += snprintf(buffer+x, len-x, "%"RMIuSIZE"x%"RMIuSIZE"=>", image->magick_columns, image->magick_rows);
|
8286
|
+
x += snprintf(buffer+x, len-x, "%" RMIuSIZE "x%" RMIuSIZE "=>", image->magick_columns, image->magick_rows);
|
8267
8287
|
}
|
8268
8288
|
}
|
8269
8289
|
|
8270
|
-
x += snprintf(buffer+x, len-x, "%"RMIuSIZE"x%"RMIuSIZE" ", image->columns, image->rows);
|
8290
|
+
x += snprintf(buffer+x, len-x, "%" RMIuSIZE "x%" RMIuSIZE " ", image->columns, image->rows);
|
8271
8291
|
|
8272
8292
|
// Print current columnsXrows
|
8273
8293
|
if ( image->page.width != 0 || image->page.height != 0
|
8274
8294
|
|| image->page.x != 0 || image->page.y != 0)
|
8275
8295
|
{
|
8276
|
-
x += snprintf(buffer+x, len-x, "%"RMIuSIZE"x%"RMIuSIZE"+%"RMIdSIZE"+%"RMIdSIZE" ",
|
8296
|
+
x += snprintf(buffer+x, len-x, "%" RMIuSIZE "x%" RMIuSIZE "+%" RMIdSIZE "+%" RMIdSIZE " ",
|
8277
8297
|
image->page.width, image->page.height,
|
8278
8298
|
image->page.x, image->page.y);
|
8279
8299
|
}
|
@@ -8285,17 +8305,17 @@ build_inspect_string(Image *image, char *buffer, size_t len)
|
|
8285
8305
|
{
|
8286
8306
|
if (image->total_colors >= (unsigned long)(1 << 24))
|
8287
8307
|
{
|
8288
|
-
x += snprintf(buffer+x, len-x, "%"RMIuSIZE"mc ", image->total_colors/1024/1024);
|
8308
|
+
x += snprintf(buffer+x, len-x, "%" RMIuSIZE "mc ", image->total_colors/1024/1024);
|
8289
8309
|
}
|
8290
8310
|
else
|
8291
8311
|
{
|
8292
8312
|
if (image->total_colors >= (unsigned long)(1 << 16))
|
8293
8313
|
{
|
8294
|
-
x += snprintf(buffer+x, len-x, "%"RMIuSIZE"kc ", image->total_colors/1024);
|
8314
|
+
x += snprintf(buffer+x, len-x, "%" RMIuSIZE "kc ", image->total_colors/1024);
|
8295
8315
|
}
|
8296
8316
|
else
|
8297
8317
|
{
|
8298
|
-
x += snprintf(buffer+x, len-x, "%"RMIuSIZE"c ", image->total_colors);
|
8318
|
+
x += snprintf(buffer+x, len-x, "%" RMIuSIZE "c ", image->total_colors);
|
8299
8319
|
}
|
8300
8320
|
}
|
8301
8321
|
}
|
@@ -8310,7 +8330,7 @@ build_inspect_string(Image *image, char *buffer, size_t len)
|
|
8310
8330
|
}
|
8311
8331
|
else
|
8312
8332
|
{
|
8313
|
-
x += snprintf(buffer+x, len-x, "PseudoClass %"RMIuSIZE"=>%"RMIuSIZE"c ", image->total_colors, image->colors);
|
8333
|
+
x += snprintf(buffer+x, len-x, "PseudoClass %" RMIuSIZE "=>%" RMIuSIZE "c ", image->total_colors, image->colors);
|
8314
8334
|
if (image->error.mean_error_per_pixel != 0.0)
|
8315
8335
|
{
|
8316
8336
|
x += snprintf(buffer+x, len-x, "%ld/%.6f/%.6fdb ",
|
@@ -8632,7 +8652,7 @@ Image_level_colors(int argc, VALUE *argv, VALUE self)
|
|
8632
8652
|
MagickPixel black_color, white_color;
|
8633
8653
|
ChannelType channels;
|
8634
8654
|
MagickBooleanType invert = MagickTrue;
|
8635
|
-
MagickBooleanType
|
8655
|
+
MagickBooleanType okay;
|
8636
8656
|
#if defined(IMAGEMAGICK_7)
|
8637
8657
|
ExceptionInfo *exception;
|
8638
8658
|
#endif
|
@@ -8647,7 +8667,7 @@ Image_level_colors(int argc, VALUE *argv, VALUE self)
|
|
8647
8667
|
switch (argc)
|
8648
8668
|
{
|
8649
8669
|
case 3:
|
8650
|
-
invert = RTEST(argv[2]);
|
8670
|
+
invert = (MagickBooleanType)RTEST(argv[2]);
|
8651
8671
|
|
8652
8672
|
case 2:
|
8653
8673
|
Color_to_MagickPixel(image, &white_color, argv[1]);
|
@@ -8675,16 +8695,18 @@ Image_level_colors(int argc, VALUE *argv, VALUE self)
|
|
8675
8695
|
exception = AcquireExceptionInfo();
|
8676
8696
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
8677
8697
|
GVL_STRUCT_TYPE(LevelImageColors) args = { new_image, &black_color, &white_color, invert, exception };
|
8678
|
-
|
8698
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelImageColors), &args);
|
8699
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
8679
8700
|
END_CHANNEL_MASK(new_image);
|
8680
8701
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8681
8702
|
DestroyExceptionInfo(exception);
|
8682
8703
|
#else
|
8683
8704
|
GVL_STRUCT_TYPE(LevelColorsImageChannel) args = { new_image, channels, &black_color, &white_color, invert };
|
8684
|
-
|
8705
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelColorsImageChannel), &args);
|
8706
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
8685
8707
|
rm_check_image_exception(new_image, DestroyOnError);
|
8686
8708
|
#endif
|
8687
|
-
if (!
|
8709
|
+
if (!okay)
|
8688
8710
|
{
|
8689
8711
|
rb_raise(rb_eRuntimeError, "LevelImageColors failed for unknown reason.");
|
8690
8712
|
}
|
@@ -8717,7 +8739,7 @@ Image_levelize_channel(int argc, VALUE *argv, VALUE self)
|
|
8717
8739
|
ChannelType channels;
|
8718
8740
|
double black_point, white_point;
|
8719
8741
|
double gamma = 1.0;
|
8720
|
-
MagickBooleanType
|
8742
|
+
MagickBooleanType okay;
|
8721
8743
|
#if defined(IMAGEMAGICK_7)
|
8722
8744
|
ExceptionInfo *exception;
|
8723
8745
|
#endif
|
@@ -8752,17 +8774,19 @@ Image_levelize_channel(int argc, VALUE *argv, VALUE self)
|
|
8752
8774
|
exception = AcquireExceptionInfo();
|
8753
8775
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
8754
8776
|
GVL_STRUCT_TYPE(LevelizeImage) args = { new_image, black_point, white_point, gamma, exception };
|
8755
|
-
|
8777
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelizeImage), &args);
|
8778
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
8756
8779
|
END_CHANNEL_MASK(new_image);
|
8757
8780
|
rm_check_exception(exception, new_image, DestroyOnError);
|
8758
8781
|
DestroyExceptionInfo(exception);
|
8759
8782
|
#else
|
8760
8783
|
GVL_STRUCT_TYPE(LevelizeImageChannel) args = { new_image, channels, black_point, white_point, gamma };
|
8761
|
-
|
8784
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(LevelizeImageChannel), &args);
|
8785
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
8762
8786
|
rm_check_image_exception(new_image, DestroyOnError);
|
8763
8787
|
#endif
|
8764
8788
|
|
8765
|
-
if (!
|
8789
|
+
if (!okay)
|
8766
8790
|
{
|
8767
8791
|
rb_raise(rb_eRuntimeError, "LevelizeImageChannel failed for unknown reason.");
|
8768
8792
|
}
|
@@ -8868,14 +8892,14 @@ Image_liquid_rescale(int argc, VALUE *argv, VALUE self)
|
|
8868
8892
|
* @see Image#_dump
|
8869
8893
|
*/
|
8870
8894
|
VALUE
|
8871
|
-
Image__load(VALUE
|
8895
|
+
Image__load(VALUE klass ATTRIBUTE_UNUSED, VALUE str)
|
8872
8896
|
{
|
8873
8897
|
Image *image;
|
8874
8898
|
ImageInfo *info;
|
8875
8899
|
DumpedImage mi;
|
8876
8900
|
ExceptionInfo *exception;
|
8877
8901
|
char *blob;
|
8878
|
-
|
8902
|
+
size_t length;
|
8879
8903
|
|
8880
8904
|
blob = rm_str2cstr(str, &length);
|
8881
8905
|
|
@@ -8906,7 +8930,7 @@ Image__load(VALUE class ATTRIBUTE_UNUSED, VALUE str)
|
|
8906
8930
|
mi.len = ((DumpedImage *)blob)->len;
|
8907
8931
|
|
8908
8932
|
// Must be bigger than the header
|
8909
|
-
if (length <= (
|
8933
|
+
if (length <= (mi.len + sizeof(DumpedImage) - MaxTextExtent))
|
8910
8934
|
{
|
8911
8935
|
rb_raise(rb_eTypeError, "image is invalid or corrupted (too short)");
|
8912
8936
|
}
|
@@ -9075,7 +9099,7 @@ Image_marshal_load(VALUE self, VALUE ary)
|
|
9075
9099
|
{
|
9076
9100
|
strlcpy(info->filename, RSTRING_PTR(filename), sizeof(info->filename));
|
9077
9101
|
}
|
9078
|
-
GVL_STRUCT_TYPE(BlobToImage) args = { info, RSTRING_PTR(blob), RSTRING_LEN(blob), exception };
|
9102
|
+
GVL_STRUCT_TYPE(BlobToImage) args = { info, RSTRING_PTR(blob), (size_t)RSTRING_LEN(blob), exception };
|
9079
9103
|
image = (Image *)CALL_FUNC_WITHOUT_GVL(GVL_FUNC(BlobToImage), &args);
|
9080
9104
|
|
9081
9105
|
// Destroy info before raising an exception
|
@@ -9377,7 +9401,7 @@ Image_matte_flood_fill(int argc, VALUE *argv, VALUE self)
|
|
9377
9401
|
y = NUM2LONG(argv[2]);
|
9378
9402
|
if ((unsigned long)x > image->columns || (unsigned long)y > image->rows)
|
9379
9403
|
{
|
9380
|
-
rb_raise(rb_eArgError, "target out of range. %ldx%ld given, image is %"RMIuSIZE"x%"RMIuSIZE"",
|
9404
|
+
rb_raise(rb_eArgError, "target out of range. %ldx%ld given, image is %" RMIuSIZE "x%" RMIuSIZE "",
|
9381
9405
|
x, y, image->columns, image->rows);
|
9382
9406
|
}
|
9383
9407
|
|
@@ -9728,7 +9752,7 @@ VALUE
|
|
9728
9752
|
Image_negate(int argc, VALUE *argv, VALUE self)
|
9729
9753
|
{
|
9730
9754
|
Image *image, *new_image;
|
9731
|
-
|
9755
|
+
MagickBooleanType grayscale = MagickFalse;
|
9732
9756
|
#if defined(IMAGEMAGICK_7)
|
9733
9757
|
ExceptionInfo *exception;
|
9734
9758
|
#endif
|
@@ -9736,7 +9760,7 @@ Image_negate(int argc, VALUE *argv, VALUE self)
|
|
9736
9760
|
image = rm_check_destroyed(self);
|
9737
9761
|
if (argc == 1)
|
9738
9762
|
{
|
9739
|
-
grayscale = RTEST(argv[0]);
|
9763
|
+
grayscale = (MagickBooleanType)RTEST(argv[0]);
|
9740
9764
|
}
|
9741
9765
|
else if (argc > 1)
|
9742
9766
|
{
|
@@ -9783,7 +9807,7 @@ Image_negate_channel(int argc, VALUE *argv, VALUE self)
|
|
9783
9807
|
{
|
9784
9808
|
Image *image, *new_image;
|
9785
9809
|
ChannelType channels;
|
9786
|
-
|
9810
|
+
MagickBooleanType grayscale = MagickFalse;
|
9787
9811
|
#if defined(IMAGEMAGICK_7)
|
9788
9812
|
ExceptionInfo *exception;
|
9789
9813
|
#endif
|
@@ -9798,7 +9822,7 @@ Image_negate_channel(int argc, VALUE *argv, VALUE self)
|
|
9798
9822
|
}
|
9799
9823
|
else if (argc == 1)
|
9800
9824
|
{
|
9801
|
-
grayscale = RTEST(argv[0]);
|
9825
|
+
grayscale = (MagickBooleanType)RTEST(argv[0]);
|
9802
9826
|
}
|
9803
9827
|
|
9804
9828
|
new_image = rm_clone_image(image);
|
@@ -9827,11 +9851,11 @@ Image_negate_channel(int argc, VALUE *argv, VALUE self)
|
|
9827
9851
|
* @return [Magick::Image] a newly allocated image
|
9828
9852
|
*/
|
9829
9853
|
VALUE
|
9830
|
-
Image_alloc(VALUE
|
9854
|
+
Image_alloc(VALUE klass)
|
9831
9855
|
{
|
9832
9856
|
VALUE image_obj;
|
9833
9857
|
|
9834
|
-
image_obj = TypedData_Wrap_Struct(
|
9858
|
+
image_obj = TypedData_Wrap_Struct(klass, &rm_image_data_type, NULL);
|
9835
9859
|
|
9836
9860
|
RB_GC_GUARD(image_obj);
|
9837
9861
|
|
@@ -10177,12 +10201,14 @@ Image_opaque(VALUE self, VALUE target, VALUE fill)
|
|
10177
10201
|
#if defined(IMAGEMAGICK_7)
|
10178
10202
|
exception = AcquireExceptionInfo();
|
10179
10203
|
GVL_STRUCT_TYPE(OpaquePaintImage) args = { new_image, &target_pp, &fill_pp, MagickFalse, exception };
|
10180
|
-
|
10204
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OpaquePaintImage), &args);
|
10205
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
10181
10206
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10182
10207
|
DestroyExceptionInfo(exception);
|
10183
10208
|
#else
|
10184
10209
|
GVL_STRUCT_TYPE(OpaquePaintImageChannel) args = { new_image, DefaultChannels, &target_pp, &fill_pp, MagickFalse };
|
10185
|
-
|
10210
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OpaquePaintImageChannel), &args);
|
10211
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
10186
10212
|
rm_check_image_exception(new_image, DestroyOnError);
|
10187
10213
|
#endif
|
10188
10214
|
|
@@ -10250,7 +10276,7 @@ Image_opaque_channel(int argc, VALUE *argv, VALUE self)
|
|
10250
10276
|
rb_raise(rb_eArgError, "fuzz must be >= 0.0 (%g given)", fuzz);
|
10251
10277
|
}
|
10252
10278
|
case 3:
|
10253
|
-
invert = RTEST(argv[2]);
|
10279
|
+
invert = (MagickBooleanType)RTEST(argv[2]);
|
10254
10280
|
case 2:
|
10255
10281
|
// Allow color name or Pixel
|
10256
10282
|
Color_to_MagickPixel(image, &fill_pp, argv[1]);
|
@@ -10269,14 +10295,16 @@ Image_opaque_channel(int argc, VALUE *argv, VALUE self)
|
|
10269
10295
|
exception = AcquireExceptionInfo();
|
10270
10296
|
BEGIN_CHANNEL_MASK(new_image, channels);
|
10271
10297
|
GVL_STRUCT_TYPE(OpaquePaintImage) args = { new_image, &target_pp, &fill_pp, invert, exception };
|
10272
|
-
|
10298
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OpaquePaintImage), &args);
|
10299
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
10273
10300
|
END_CHANNEL_MASK(new_image);
|
10274
10301
|
new_image->fuzz = keep;
|
10275
10302
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10276
10303
|
DestroyExceptionInfo(exception);
|
10277
10304
|
#else
|
10278
10305
|
GVL_STRUCT_TYPE(OpaquePaintImageChannel) args = { new_image, channels, &target_pp, &fill_pp, invert };
|
10279
|
-
|
10306
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(OpaquePaintImageChannel), &args);
|
10307
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
10280
10308
|
|
10281
10309
|
new_image->fuzz = keep;
|
10282
10310
|
rm_check_image_exception(new_image, DestroyOnError);
|
@@ -10478,11 +10506,11 @@ Image_paint_transparent(int argc, VALUE *argv, VALUE self)
|
|
10478
10506
|
case 3:
|
10479
10507
|
if (TYPE(argv[argc - 1]) == T_HASH)
|
10480
10508
|
{
|
10481
|
-
invert = RTEST(argv[1]);
|
10509
|
+
invert = (MagickBooleanType)RTEST(argv[1]);
|
10482
10510
|
}
|
10483
10511
|
else
|
10484
10512
|
{
|
10485
|
-
invert = RTEST(argv[2]);
|
10513
|
+
invert = (MagickBooleanType)RTEST(argv[2]);
|
10486
10514
|
}
|
10487
10515
|
case 2:
|
10488
10516
|
alpha = get_named_alpha_value(argv[argc - 1]);
|
@@ -10503,13 +10531,15 @@ Image_paint_transparent(int argc, VALUE *argv, VALUE self)
|
|
10503
10531
|
#if defined(IMAGEMAGICK_7)
|
10504
10532
|
exception = AcquireExceptionInfo();
|
10505
10533
|
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, (const MagickPixel *)&color, alpha, invert, exception };
|
10506
|
-
|
10534
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImage), &args);
|
10535
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
10507
10536
|
new_image->fuzz = keep;
|
10508
10537
|
rm_check_exception(exception, new_image, DestroyOnError);
|
10509
10538
|
DestroyExceptionInfo(exception);
|
10510
10539
|
#else
|
10511
|
-
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, (const MagickPixel *)&color, QuantumRange - alpha, invert };
|
10512
|
-
|
10540
|
+
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, (const MagickPixel *)&color, (Quantum)(QuantumRange - alpha), invert };
|
10541
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImage), &args);
|
10542
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
10513
10543
|
new_image->fuzz = keep;
|
10514
10544
|
|
10515
10545
|
// Is it possible for TransparentPaintImage to silently fail?
|
@@ -10550,9 +10580,9 @@ Image_palette_q(VALUE self)
|
|
10550
10580
|
* @see Image#read
|
10551
10581
|
*/
|
10552
10582
|
VALUE
|
10553
|
-
Image_ping(VALUE
|
10583
|
+
Image_ping(VALUE klass, VALUE file_arg)
|
10554
10584
|
{
|
10555
|
-
return rd_image(
|
10585
|
+
return rd_image(klass, file_arg, GVL_FUNC(PingImage));
|
10556
10586
|
}
|
10557
10587
|
|
10558
10588
|
|
@@ -10619,7 +10649,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10619
10649
|
{
|
10620
10650
|
exception = AcquireExceptionInfo();
|
10621
10651
|
GVL_STRUCT_TYPE(GetVirtualPixels) args = { image, x, y, 1, 1, exception };
|
10622
|
-
|
10652
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetVirtualPixels), &args);
|
10653
|
+
old_pixel = reinterpret_cast<decltype(old_pixel)>(ret);
|
10623
10654
|
CHECK_EXCEPTION();
|
10624
10655
|
|
10625
10656
|
DestroyExceptionInfo(exception);
|
@@ -10672,7 +10703,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10672
10703
|
{
|
10673
10704
|
#if defined(IMAGEMAGICK_7)
|
10674
10705
|
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, DirectClass, exception };
|
10675
|
-
|
10706
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
10707
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
10676
10708
|
CHECK_EXCEPTION();
|
10677
10709
|
if (!okay)
|
10678
10710
|
{
|
@@ -10681,7 +10713,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10681
10713
|
}
|
10682
10714
|
#else
|
10683
10715
|
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, DirectClass };
|
10684
|
-
|
10716
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
10717
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
10685
10718
|
rm_check_image_exception(image, RetainOnError);
|
10686
10719
|
if (!okay)
|
10687
10720
|
{
|
@@ -10695,7 +10728,8 @@ Image_pixel_color(int argc, VALUE *argv, VALUE self)
|
|
10695
10728
|
#endif
|
10696
10729
|
|
10697
10730
|
GVL_STRUCT_TYPE(GetAuthenticPixels) args = { image, x, y, 1, 1, exception };
|
10698
|
-
|
10731
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetAuthenticPixels), &args);
|
10732
|
+
pixel = reinterpret_cast<decltype(pixel)>(ret);
|
10699
10733
|
CHECK_EXCEPTION();
|
10700
10734
|
|
10701
10735
|
if (pixel)
|
@@ -10989,13 +11023,13 @@ Image_quantum_depth(VALUE self)
|
|
10989
11023
|
* quantum_operator will be faster, especially for large numbers of pixels, since it does not need
|
10990
11024
|
* to convert the pixels from C to Ruby.
|
10991
11025
|
*
|
10992
|
-
* @overload quantum_operator(
|
10993
|
-
* @param
|
11026
|
+
* @overload quantum_operator(quantum_expression_op, rvalue, channel = Magick::AllChannels)
|
11027
|
+
* @param quantum_expression_op [Magick::QuantumExpressionOperator] the operator
|
10994
11028
|
* @param rvalue [Float] the operation rvalue.
|
10995
11029
|
* @param channel [Magick::ChannelType] a ChannelType arguments.
|
10996
11030
|
*
|
10997
|
-
* @overload quantum_operator(
|
10998
|
-
* @param
|
11031
|
+
* @overload quantum_operator(quantum_expression_op, rvalue, *channels)
|
11032
|
+
* @param quantum_expression_op [Magick::QuantumExpressionOperator] the operator
|
10999
11033
|
* @param rvalue [Float] the operation rvalue.
|
11000
11034
|
* @param *channels [Magick::ChannelType] one or more ChannelType arguments.
|
11001
11035
|
*
|
@@ -11005,7 +11039,7 @@ VALUE
|
|
11005
11039
|
Image_quantum_operator(int argc, VALUE *argv, VALUE self)
|
11006
11040
|
{
|
11007
11041
|
Image *image;
|
11008
|
-
QuantumExpressionOperator
|
11042
|
+
QuantumExpressionOperator quantum_expression_op;
|
11009
11043
|
MagickEvaluateOperator qop;
|
11010
11044
|
double rvalue;
|
11011
11045
|
ChannelType channel;
|
@@ -11028,7 +11062,7 @@ Image_quantum_operator(int argc, VALUE *argv, VALUE self)
|
|
11028
11062
|
/* Fall through */
|
11029
11063
|
case 2:
|
11030
11064
|
rvalue = NUM2DBL(argv[1]);
|
11031
|
-
VALUE_TO_ENUM(argv[0],
|
11065
|
+
VALUE_TO_ENUM(argv[0], quantum_expression_op, QuantumExpressionOperator);
|
11032
11066
|
break;
|
11033
11067
|
default:
|
11034
11068
|
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 3)", argc);
|
@@ -11036,7 +11070,7 @@ Image_quantum_operator(int argc, VALUE *argv, VALUE self)
|
|
11036
11070
|
}
|
11037
11071
|
|
11038
11072
|
// Map QuantumExpressionOperator to MagickEvaluateOperator
|
11039
|
-
switch (
|
11073
|
+
switch (quantum_expression_op)
|
11040
11074
|
{
|
11041
11075
|
default:
|
11042
11076
|
case UndefinedQuantumOperator:
|
@@ -11201,7 +11235,7 @@ Image_quantize(int argc, VALUE *argv, VALUE self)
|
|
11201
11235
|
{
|
11202
11236
|
VALUE_TO_ENUM(argv[2], quantize_info.dither_method, DitherMethod);
|
11203
11237
|
#if defined(IMAGEMAGICK_6)
|
11204
|
-
quantize_info.dither = quantize_info.dither_method != NoDitherMethod;
|
11238
|
+
quantize_info.dither = (MagickBooleanType)(quantize_info.dither_method != NoDitherMethod);
|
11205
11239
|
#endif
|
11206
11240
|
}
|
11207
11241
|
else
|
@@ -11259,10 +11293,12 @@ Image_radial_blur(VALUE self, VALUE angle_obj)
|
|
11259
11293
|
|
11260
11294
|
#if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
|
11261
11295
|
GVL_STRUCT_TYPE(RotationalBlurImage) args = { image, angle, exception };
|
11262
|
-
|
11296
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RotationalBlurImage), &args);
|
11297
|
+
new_image = reinterpret_cast<decltype(new_image)>(ret);
|
11263
11298
|
#else
|
11264
11299
|
GVL_STRUCT_TYPE(RadialBlurImage) args = { image, angle, exception };
|
11265
|
-
|
11300
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(RadialBlurImage), &args);
|
11301
|
+
new_image = reinterpret_cast<decltype(new_image)>(ret);
|
11266
11302
|
#endif
|
11267
11303
|
rm_check_exception(exception, new_image, DestroyOnError);
|
11268
11304
|
DestroyExceptionInfo(exception);
|
@@ -11414,7 +11450,7 @@ Image_raise(int argc, VALUE *argv, VALUE self)
|
|
11414
11450
|
{
|
11415
11451
|
Image *image, *new_image;
|
11416
11452
|
RectangleInfo rect;
|
11417
|
-
|
11453
|
+
MagickBooleanType raised = MagickTrue; // default
|
11418
11454
|
#if defined(IMAGEMAGICK_7)
|
11419
11455
|
ExceptionInfo *exception;
|
11420
11456
|
#endif
|
@@ -11427,7 +11463,7 @@ Image_raise(int argc, VALUE *argv, VALUE self)
|
|
11427
11463
|
switch (argc)
|
11428
11464
|
{
|
11429
11465
|
case 3:
|
11430
|
-
raised = RTEST(argv[2]);
|
11466
|
+
raised = (MagickBooleanType)RTEST(argv[2]);
|
11431
11467
|
case 2:
|
11432
11468
|
rect.height = NUM2ULONG(argv[1]);
|
11433
11469
|
case 1:
|
@@ -11464,9 +11500,9 @@ Image_raise(int argc, VALUE *argv, VALUE self)
|
|
11464
11500
|
* @return [Array<Magick::Image>] an array of 1 or more new image objects
|
11465
11501
|
*/
|
11466
11502
|
VALUE
|
11467
|
-
Image_read(VALUE
|
11503
|
+
Image_read(VALUE klass, VALUE file_arg)
|
11468
11504
|
{
|
11469
|
-
return rd_image(
|
11505
|
+
return rd_image(klass, file_arg, GVL_FUNC(ReadImage));
|
11470
11506
|
}
|
11471
11507
|
|
11472
11508
|
|
@@ -11498,7 +11534,7 @@ typedef GVL_STRUCT_TYPE(PingImage) GVL_STRUCT_TYPE(rd_image);
|
|
11498
11534
|
* - Yields to a block to get Image::Info attributes before calling
|
11499
11535
|
* Read/PingImage
|
11500
11536
|
*
|
11501
|
-
* @param
|
11537
|
+
* @param klass the Ruby class for an Image
|
11502
11538
|
* @param file the file containing image data
|
11503
11539
|
* @param reader which image reader to use (ReadImage or PingImage)
|
11504
11540
|
* @return an array of 1 or more new image objects
|
@@ -11514,10 +11550,10 @@ void sig_handler(int sig ATTRIBUTE_UNUSED)
|
|
11514
11550
|
#endif
|
11515
11551
|
|
11516
11552
|
static VALUE
|
11517
|
-
rd_image(VALUE
|
11553
|
+
rd_image(VALUE klass ATTRIBUTE_UNUSED, VALUE file, gvl_function_t fp)
|
11518
11554
|
{
|
11519
11555
|
char *filename;
|
11520
|
-
|
11556
|
+
size_t filename_l;
|
11521
11557
|
Info *info;
|
11522
11558
|
VALUE info_obj;
|
11523
11559
|
Image *images;
|
@@ -11539,7 +11575,7 @@ rd_image(VALUE class ATTRIBUTE_UNUSED, VALUE file, gvl_function_t fp)
|
|
11539
11575
|
else
|
11540
11576
|
{
|
11541
11577
|
// Convert arg to string. If an exception occurs raise an error condition.
|
11542
|
-
file = rb_rescue(rb_String, file, file_arg_rescue, file);
|
11578
|
+
file = rb_rescue(RESCUE_FUNC(rb_String), file, RESCUE_EXCEPTION_HANDLER_FUNC(file_arg_rescue), file);
|
11543
11579
|
|
11544
11580
|
filename = rm_str2cstr(file, &filename_l);
|
11545
11581
|
filename_l = min(filename_l, MaxTextExtent-1);
|
@@ -11677,7 +11713,7 @@ Image_read_inline(VALUE self ATTRIBUTE_UNUSED, VALUE content)
|
|
11677
11713
|
Image *images;
|
11678
11714
|
ImageInfo *info;
|
11679
11715
|
char *image_data;
|
11680
|
-
|
11716
|
+
size_t x, image_data_l;
|
11681
11717
|
unsigned char *blob;
|
11682
11718
|
size_t blob_l;
|
11683
11719
|
ExceptionInfo *exception;
|
@@ -12252,7 +12288,7 @@ rotate(int bang, int argc, VALUE *argv, VALUE self)
|
|
12252
12288
|
Image *image, *new_image;
|
12253
12289
|
double degrees;
|
12254
12290
|
char *arrow;
|
12255
|
-
|
12291
|
+
size_t arrow_l;
|
12256
12292
|
ExceptionInfo *exception;
|
12257
12293
|
|
12258
12294
|
TypedData_Get_Struct(self, Image, &rm_image_data_type, image);
|
@@ -12668,7 +12704,7 @@ VALUE
|
|
12668
12704
|
Image_separate(int argc, VALUE *argv, VALUE self)
|
12669
12705
|
{
|
12670
12706
|
Image *image, *new_images;
|
12671
|
-
ChannelType channels =
|
12707
|
+
ChannelType channels = UndefinedChannel;
|
12672
12708
|
ExceptionInfo *exception;
|
12673
12709
|
|
12674
12710
|
image = rm_check_destroyed(self);
|
@@ -12757,8 +12793,8 @@ VALUE
|
|
12757
12793
|
Image_segment(int argc, VALUE *argv, VALUE self)
|
12758
12794
|
{
|
12759
12795
|
Image *image, *new_image;
|
12760
|
-
|
12761
|
-
|
12796
|
+
ColorspaceType colorspace = RGBColorspace; // These are the Magick++ defaults
|
12797
|
+
MagickBooleanType verbose = MagickFalse;
|
12762
12798
|
double cluster_threshold = 1.0;
|
12763
12799
|
double smoothing_threshold = 1.5;
|
12764
12800
|
#if defined(IMAGEMAGICK_7)
|
@@ -12769,7 +12805,7 @@ Image_segment(int argc, VALUE *argv, VALUE self)
|
|
12769
12805
|
switch (argc)
|
12770
12806
|
{
|
12771
12807
|
case 4:
|
12772
|
-
verbose = RTEST(argv[3]);
|
12808
|
+
verbose = (MagickBooleanType)RTEST(argv[3]);
|
12773
12809
|
case 3:
|
12774
12810
|
smoothing_threshold = NUM2DBL(argv[2]);
|
12775
12811
|
case 2:
|
@@ -12909,7 +12945,7 @@ Image_shade(int argc, VALUE *argv, VALUE self)
|
|
12909
12945
|
{
|
12910
12946
|
Image *image, *new_image;
|
12911
12947
|
double azimuth = 30.0, elevation = 30.0;
|
12912
|
-
|
12948
|
+
MagickBooleanType shading = MagickFalse;
|
12913
12949
|
ExceptionInfo *exception;
|
12914
12950
|
|
12915
12951
|
image = rm_check_destroyed(self);
|
@@ -12920,7 +12956,7 @@ Image_shade(int argc, VALUE *argv, VALUE self)
|
|
12920
12956
|
case 2:
|
12921
12957
|
azimuth = NUM2DBL(argv[1]);
|
12922
12958
|
case 1:
|
12923
|
-
shading = RTEST(argv[0]);
|
12959
|
+
shading = (MagickBooleanType)RTEST(argv[0]);
|
12924
12960
|
case 0:
|
12925
12961
|
break;
|
12926
12962
|
default:
|
@@ -13888,7 +13924,8 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13888
13924
|
#if defined(IMAGEMAGICK_7)
|
13889
13925
|
exception = AcquireExceptionInfo();
|
13890
13926
|
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, DirectClass, exception };
|
13891
|
-
|
13927
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
13928
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
13892
13929
|
CHECK_EXCEPTION();
|
13893
13930
|
if (!okay)
|
13894
13931
|
{
|
@@ -13897,7 +13934,8 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13897
13934
|
}
|
13898
13935
|
#else
|
13899
13936
|
GVL_STRUCT_TYPE(SetImageStorageClass) args = { image, DirectClass };
|
13900
|
-
|
13937
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(SetImageStorageClass), &args);
|
13938
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
13901
13939
|
rm_check_image_exception(image, RetainOnError);
|
13902
13940
|
if (!okay)
|
13903
13941
|
{
|
@@ -13910,7 +13948,8 @@ Image_store_pixels(VALUE self, VALUE x_arg, VALUE y_arg, VALUE cols_arg,
|
|
13910
13948
|
// from the pixels argument.
|
13911
13949
|
{
|
13912
13950
|
GVL_STRUCT_TYPE(GetAuthenticPixels) args = { image, x, y, cols, rows, exception };
|
13913
|
-
|
13951
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetAuthenticPixels), &args);
|
13952
|
+
pixels = reinterpret_cast<decltype(pixels)>(ret);
|
13914
13953
|
CHECK_EXCEPTION();
|
13915
13954
|
|
13916
13955
|
if (pixels)
|
@@ -14063,7 +14102,7 @@ Image_texture_flood_fill(VALUE self, VALUE color_obj, VALUE texture_obj,
|
|
14063
14102
|
|
14064
14103
|
if ((unsigned long)x > image->columns || (unsigned long)y > image->rows)
|
14065
14104
|
{
|
14066
|
-
rb_raise(rb_eArgError, "target out of range. %ldx%ld given, image is %"RMIuSIZE"x%"RMIuSIZE"",
|
14105
|
+
rb_raise(rb_eArgError, "target out of range. %ldx%ld given, image is %" RMIuSIZE "x%" RMIuSIZE "",
|
14067
14106
|
x, y, image->columns, image->rows);
|
14068
14107
|
}
|
14069
14108
|
|
@@ -14530,7 +14569,7 @@ Image_to_blob(VALUE self)
|
|
14530
14569
|
|| !rm_strcasecmp(magick_info->name, "JPG"))
|
14531
14570
|
&& (image->rows == 0 || image->columns == 0))
|
14532
14571
|
{
|
14533
|
-
rb_raise(rb_eRuntimeError, "Can't convert %"RMIuSIZE"x%"RMIuSIZE" %.4s image to a blob",
|
14572
|
+
rb_raise(rb_eRuntimeError, "Can't convert %" RMIuSIZE "x%" RMIuSIZE " %.4s image to a blob",
|
14534
14573
|
image->columns, image->rows, magick_info->name);
|
14535
14574
|
}
|
14536
14575
|
}
|
@@ -14548,7 +14587,7 @@ Image_to_blob(VALUE self)
|
|
14548
14587
|
return Qnil;
|
14549
14588
|
}
|
14550
14589
|
|
14551
|
-
blob_str = rb_str_new(blob, length);
|
14590
|
+
blob_str = rb_str_new((const char *)blob, length);
|
14552
14591
|
|
14553
14592
|
magick_free((void*)blob);
|
14554
14593
|
|
@@ -14685,12 +14724,14 @@ Image_transparent(int argc, VALUE *argv, VALUE self)
|
|
14685
14724
|
#if defined(IMAGEMAGICK_7)
|
14686
14725
|
exception = AcquireExceptionInfo();
|
14687
14726
|
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, &color, alpha, MagickFalse, exception };
|
14688
|
-
|
14727
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImage), &args);
|
14728
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
14689
14729
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14690
14730
|
DestroyExceptionInfo(exception);
|
14691
14731
|
#else
|
14692
|
-
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, &color, QuantumRange - alpha, MagickFalse };
|
14693
|
-
|
14732
|
+
GVL_STRUCT_TYPE(TransparentPaintImage) args = { new_image, &color, (Quantum)(QuantumRange - alpha), MagickFalse };
|
14733
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImage), &args);
|
14734
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
14694
14735
|
rm_check_image_exception(new_image, DestroyOnError);
|
14695
14736
|
#endif
|
14696
14737
|
if (!okay)
|
@@ -14739,11 +14780,11 @@ Image_transparent_chroma(int argc, VALUE *argv, VALUE self)
|
|
14739
14780
|
case 4:
|
14740
14781
|
if (TYPE(argv[argc - 1]) == T_HASH)
|
14741
14782
|
{
|
14742
|
-
invert = RTEST(argv[3]);
|
14783
|
+
invert = (MagickBooleanType)RTEST(argv[3]);
|
14743
14784
|
}
|
14744
14785
|
else
|
14745
14786
|
{
|
14746
|
-
invert = RTEST(argv[2]);
|
14787
|
+
invert = (MagickBooleanType)RTEST(argv[2]);
|
14747
14788
|
}
|
14748
14789
|
case 3:
|
14749
14790
|
alpha = get_named_alpha_value(argv[argc - 1]);
|
@@ -14761,12 +14802,14 @@ Image_transparent_chroma(int argc, VALUE *argv, VALUE self)
|
|
14761
14802
|
#if defined(IMAGEMAGICK_7)
|
14762
14803
|
exception = AcquireExceptionInfo();
|
14763
14804
|
GVL_STRUCT_TYPE(TransparentPaintImageChroma) args = { new_image, &low, &high, alpha, invert, exception };
|
14764
|
-
|
14805
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImageChroma), &args);
|
14806
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
14765
14807
|
rm_check_exception(exception, new_image, DestroyOnError);
|
14766
14808
|
DestroyExceptionInfo(exception);
|
14767
14809
|
#else
|
14768
|
-
GVL_STRUCT_TYPE(TransparentPaintImageChroma) args = { new_image, &low, &high, QuantumRange - alpha, invert };
|
14769
|
-
|
14810
|
+
GVL_STRUCT_TYPE(TransparentPaintImageChroma) args = { new_image, &low, &high, (Quantum)(QuantumRange - alpha), invert };
|
14811
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(TransparentPaintImageChroma), &args);
|
14812
|
+
okay = reinterpret_cast<MagickBooleanType &>(ret);
|
14770
14813
|
rm_check_image_exception(new_image, DestroyOnError);
|
14771
14814
|
#endif
|
14772
14815
|
if (!okay)
|
@@ -15711,7 +15754,8 @@ Image_wet_floor(int argc, VALUE *argv, VALUE self)
|
|
15711
15754
|
#endif
|
15712
15755
|
|
15713
15756
|
GVL_STRUCT_TYPE(GetVirtualPixels) args_GetVirtualPixels = { reflection, 0, y, image->columns, 1, exception };
|
15714
|
-
|
15757
|
+
void *ret = CALL_FUNC_WITHOUT_GVL(GVL_FUNC(GetVirtualPixels), &args_GetVirtualPixels);
|
15758
|
+
p = reinterpret_cast<decltype(p)>(ret);
|
15715
15759
|
rm_check_exception(exception, reflection, DestroyOnError);
|
15716
15760
|
if (!p)
|
15717
15761
|
{
|
@@ -15795,7 +15839,7 @@ Image_white_threshold(int argc, VALUE *argv, VALUE self)
|
|
15795
15839
|
void add_format_prefix(Info *info, VALUE file)
|
15796
15840
|
{
|
15797
15841
|
char *filename;
|
15798
|
-
|
15842
|
+
size_t filename_l;
|
15799
15843
|
const MagickInfo *magick_info, *magick_info2;
|
15800
15844
|
ExceptionInfo *exception;
|
15801
15845
|
char magic[MaxTextExtent];
|
@@ -15808,7 +15852,7 @@ void add_format_prefix(Info *info, VALUE file)
|
|
15808
15852
|
{
|
15809
15853
|
FilePathStringValue(file);
|
15810
15854
|
}
|
15811
|
-
file = rb_rescue(rb_String, file, file_arg_rescue, file);
|
15855
|
+
file = rb_rescue(RESCUE_FUNC(rb_String), file, RESCUE_EXCEPTION_HANDLER_FUNC(file_arg_rescue), file);
|
15812
15856
|
|
15813
15857
|
filename = rm_str2cstr(file, &filename_l);
|
15814
15858
|
|
@@ -15822,7 +15866,7 @@ void add_format_prefix(Info *info, VALUE file)
|
|
15822
15866
|
// If the filename starts with a prefix, and it's a valid image format
|
15823
15867
|
// prefix, then check for a conflict. If it's not a valid format prefix,
|
15824
15868
|
// ignore it.
|
15825
|
-
p = memchr(filename, ':', (size_t)filename_l);
|
15869
|
+
p = (char *)memchr(filename, ':', (size_t)filename_l);
|
15826
15870
|
if (p)
|
15827
15871
|
{
|
15828
15872
|
memset(magic, '\0', sizeof(magic));
|
@@ -15903,7 +15947,8 @@ Image_write(VALUE self, VALUE file)
|
|
15903
15947
|
// Ensure file is open - raise error if not
|
15904
15948
|
GetOpenFile(file, fptr);
|
15905
15949
|
rb_io_check_writable(fptr);
|
15906
|
-
|
15950
|
+
|
15951
|
+
add_format_prefix(info, rm_io_path(file));
|
15907
15952
|
#if defined(_WIN32)
|
15908
15953
|
SetImageInfoFile(info, NULL);
|
15909
15954
|
#else
|
@@ -16310,7 +16355,7 @@ ChannelType extract_channels(int *argc, VALUE *argv)
|
|
16310
16355
|
VALUE arg;
|
16311
16356
|
ChannelType channels, ch_arg;
|
16312
16357
|
|
16313
|
-
channels =
|
16358
|
+
channels = UndefinedChannel;
|
16314
16359
|
while (*argc > 0)
|
16315
16360
|
{
|
16316
16361
|
arg = argv[(*argc)-1];
|
@@ -16321,7 +16366,7 @@ ChannelType extract_channels(int *argc, VALUE *argv)
|
|
16321
16366
|
break;
|
16322
16367
|
}
|
16323
16368
|
VALUE_TO_ENUM(arg, ch_arg, ChannelType);
|
16324
|
-
channels
|
16369
|
+
channels = (ChannelType)(channels | ch_arg);
|
16325
16370
|
*argc -= 1;
|
16326
16371
|
}
|
16327
16372
|
|