rmagick 1.9.3 → 1.10.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.
Potentially problematic release.
This version of rmagick might be problematic. Click here for more details.
- data/ChangeLog +18 -0
- data/README.html +12 -12
- data/README.txt +10 -10
- data/configure +728 -367
- data/configure.ac +134 -69
- data/doc/comtasks.html +11 -3
- data/doc/constants.html +162 -40
- data/doc/draw.html +2 -2
- data/doc/ex/crop_resized.rb +10 -0
- data/doc/ex/get_type_metrics.rb +26 -22
- data/doc/ex/vignette.rb +19 -0
- data/doc/ilist.html +0 -5
- data/doc/image1.html +219 -49
- data/doc/image2.html +115 -47
- data/doc/image3.html +105 -23
- data/doc/imageattrs.html +4 -23
- data/doc/imusage.html +1 -1
- data/doc/index.html +8 -9
- data/doc/info.html +23 -3
- data/doc/magick.html +1 -1
- data/doc/rvg.html +1 -1
- data/doc/rvgclip.html +1 -1
- data/doc/rvggroup.html +1 -1
- data/doc/rvgimage.html +1 -1
- data/doc/rvgpattern.html +1 -1
- data/doc/rvgshape.html +1 -1
- data/doc/rvgstyle.html +1 -1
- data/doc/rvgtext.html +3 -3
- data/doc/rvgtspan.html +1 -1
- data/doc/rvgtut.html +119 -101
- data/doc/rvguse.html +1 -1
- data/doc/rvgxform.html +1 -1
- data/doc/struct.html +17 -11
- data/doc/usage.html +22 -4
- data/examples/histogram.rb +48 -12
- data/examples/spinner.rb +49 -0
- data/ext/RMagick/MANIFEST +4 -1
- data/ext/RMagick/rmagick.h +62 -33
- data/ext/RMagick/rmagick_config.h.in +28 -31
- data/ext/RMagick/rmdraw.c +14 -6
- data/ext/RMagick/rmfill.c +2 -2
- data/ext/RMagick/rmilist.c +8 -36
- data/ext/RMagick/rmimage.c +370 -97
- data/ext/RMagick/rminfo.c +6 -6
- data/ext/RMagick/rmmain.c +114 -25
- data/ext/RMagick/rmutil.c +98 -35
- data/lib/RMagick.rb +17 -2
- data/lib/rvg/clippath.rb +2 -2
- data/lib/rvg/container.rb +2 -2
- data/lib/rvg/describable.rb +2 -2
- data/lib/rvg/embellishable.rb +2 -2
- data/lib/rvg/misc.rb +3 -3
- data/lib/rvg/paint.rb +2 -2
- data/lib/rvg/pathdata.rb +2 -2
- data/lib/rvg/rvg.rb +2 -2
- data/lib/rvg/stretchable.rb +2 -2
- data/lib/rvg/stylable.rb +2 -2
- data/lib/rvg/text.rb +2 -2
- data/lib/rvg/transformable.rb +2 -2
- data/lib/rvg/units.rb +2 -2
- data/rmagick.gemspec +1 -1
- metadata +362 -353
data/ext/RMagick/rminfo.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
/* $Id: rminfo.c,v 1.
|
1
|
+
/* $Id: rminfo.c,v 1.36 2006/01/18 00:23:03 rmagick Exp $ */
|
2
2
|
/*============================================================================\
|
3
|
-
| Copyright (C)
|
3
|
+
| Copyright (C) 2006 by Timothy P. Hunter
|
4
4
|
| Name: rminfo.c
|
5
5
|
| Author: Tim Hunter
|
6
6
|
| Purpose: Info class method definitions for RMagick.
|
@@ -177,7 +177,7 @@ VALUE
|
|
177
177
|
Info_authenticate_eq(VALUE self, VALUE passwd)
|
178
178
|
{
|
179
179
|
Info *info;
|
180
|
-
char *passwd_p;
|
180
|
+
char *passwd_p = NULL;
|
181
181
|
long passwd_len = 0;
|
182
182
|
|
183
183
|
Data_Get_Struct(self, Info, info);
|
@@ -1227,7 +1227,7 @@ Info_number_scenes_eq(VALUE self, VALUE nscenes)
|
|
1227
1227
|
VALUE
|
1228
1228
|
Info_orientation(VALUE self)
|
1229
1229
|
{
|
1230
|
-
#if defined(
|
1230
|
+
#if defined(HAVE_IMAGEINFO_ORIENTATION)
|
1231
1231
|
Info *info;
|
1232
1232
|
|
1233
1233
|
Data_Get_Struct(self, Info, info);
|
@@ -1247,7 +1247,7 @@ Info_orientation(VALUE self)
|
|
1247
1247
|
VALUE
|
1248
1248
|
Info_orientation_eq(VALUE self, VALUE inter)
|
1249
1249
|
{
|
1250
|
-
#if defined(
|
1250
|
+
#if defined(HAVE_IMAGEINFO_ORIENTATION)
|
1251
1251
|
Info *info;
|
1252
1252
|
|
1253
1253
|
Data_Get_Struct(self, Info, info);
|
@@ -1338,7 +1338,7 @@ VALUE
|
|
1338
1338
|
Info_sampling_factor_eq(VALUE self, VALUE sampling_factor)
|
1339
1339
|
{
|
1340
1340
|
Info *info;
|
1341
|
-
char *sampling_factor_p;
|
1341
|
+
char *sampling_factor_p = NULL;
|
1342
1342
|
long sampling_factor_len = 0;
|
1343
1343
|
|
1344
1344
|
Data_Get_Struct(self, Info, info);
|
data/ext/RMagick/rmmain.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
/* $Id: rmmain.c,v 1.
|
1
|
+
/* $Id: rmmain.c,v 1.110 2006/01/20 23:59:46 rmagick Exp $ */
|
2
2
|
/*============================================================================\
|
3
|
-
| Copyright (C)
|
3
|
+
| Copyright (C) 2006 by Timothy P. Hunter
|
4
4
|
| Name: rmmain.c
|
5
5
|
| Author: Tim Hunter
|
6
6
|
| Purpose: Contains all module, class, method declarations.
|
@@ -10,12 +10,14 @@
|
|
10
10
|
|
11
11
|
#define MAIN // Define external variables
|
12
12
|
#include "rmagick.h"
|
13
|
+
#include "magick/version.h"
|
13
14
|
|
14
15
|
/*----------------------------------------------------------------------------\
|
15
16
|
| External declarations
|
16
17
|
\----------------------------------------------------------------------------*/
|
17
18
|
void Init_RMagick(void);
|
18
19
|
|
20
|
+
static void test_Magick_version(void);
|
19
21
|
static void version_constants(void);
|
20
22
|
|
21
23
|
|
@@ -406,7 +408,7 @@ Magick_set_monitor(VALUE class, VALUE monitor)
|
|
406
408
|
// available, use the 3-parm version of rb_cvar_set.
|
407
409
|
RUBY18(rb_cvar_set(Module_Magick, Magick_Monitor, monitor, 0);)
|
408
410
|
RUBY16(rb_cvar_set(Module_Magick, Magick_Monitor, monitor);)
|
409
|
-
(void) SetMonitorHandler(&monitor_handler);
|
411
|
+
(void) SetMonitorHandler((MonitorHandler)&monitor_handler);
|
410
412
|
}
|
411
413
|
|
412
414
|
return class;
|
@@ -470,13 +472,8 @@ Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
|
|
470
472
|
static VALUE
|
471
473
|
Magick_set_log_format(VALUE class, VALUE format)
|
472
474
|
{
|
473
|
-
#ifdef HAVE_SETLOGFORMAT
|
474
475
|
SetLogFormat(STRING_PTR(format));
|
475
476
|
return class;
|
476
|
-
#else
|
477
|
-
rm_not_implemented();
|
478
|
-
return (VALUE)0;
|
479
|
-
#endif
|
480
477
|
}
|
481
478
|
|
482
479
|
|
@@ -494,6 +491,7 @@ Init_RMagick(void)
|
|
494
491
|
volatile VALUE observable;
|
495
492
|
|
496
493
|
InitializeMagick("RMagick");
|
494
|
+
test_Magick_version();
|
497
495
|
|
498
496
|
Module_Magick = rb_define_module("Magick");
|
499
497
|
|
@@ -627,6 +625,7 @@ Init_RMagick(void)
|
|
627
625
|
|
628
626
|
rb_define_method(Class_Image, "adaptive_threshold", Image_adaptive_threshold, -1);
|
629
627
|
rb_define_method(Class_Image, "add_noise", Image_add_noise, 1);
|
628
|
+
rb_define_method(Class_Image, "add_noise_channel", Image_add_noise_channel, -1);
|
630
629
|
rb_define_method(Class_Image, "affine_transform", Image_affine_transform, 1);
|
631
630
|
rb_define_method(Class_Image, "[]", Image_aref, 1);
|
632
631
|
rb_define_method(Class_Image, "[]=", Image_aset, 2);
|
@@ -679,7 +678,8 @@ Init_RMagick(void)
|
|
679
678
|
rb_define_method(Class_Image, "enhance", Image_enhance, 0);
|
680
679
|
rb_define_method(Class_Image, "equalize", Image_equalize, 0);
|
681
680
|
rb_define_method(Class_Image, "erase!", Image_erase_bang, 0);
|
682
|
-
rb_define_method(Class_Image, "export_pixels", Image_export_pixels,
|
681
|
+
rb_define_method(Class_Image, "export_pixels", Image_export_pixels, -1);
|
682
|
+
rb_define_method(Class_Image, "export_pixels_to_str", Image_export_pixels_to_str, -1);
|
683
683
|
rb_define_method(Class_Image, "flip", Image_flip, 0);
|
684
684
|
rb_define_method(Class_Image, "flip!", Image_flip_bang, 0);
|
685
685
|
rb_define_method(Class_Image, "flop", Image_flop, 0);
|
@@ -716,7 +716,7 @@ Init_RMagick(void)
|
|
716
716
|
rb_define_method(Class_Image, "oil_paint", Image_oil_paint, -1);
|
717
717
|
rb_define_method(Class_Image, "opaque", Image_opaque, 2);
|
718
718
|
rb_define_method(Class_Image, "opaque?", Image_opaque_q, 0);
|
719
|
-
rb_define_method(Class_Image, "ordered_dither", Image_ordered_dither,
|
719
|
+
rb_define_method(Class_Image, "ordered_dither", Image_ordered_dither, -1);
|
720
720
|
rb_define_method(Class_Image, "palette?", Image_palette_q, 0);
|
721
721
|
rb_define_method(Class_Image, "pixel_color", Image_pixel_color, -1);
|
722
722
|
rb_define_method(Class_Image, "posterize", Image_posterize, -1);
|
@@ -773,6 +773,7 @@ Init_RMagick(void)
|
|
773
773
|
rb_define_method(Class_Image, "trim!", Image_trim_bang, 0);
|
774
774
|
rb_define_method(Class_Image, "unsharp_mask", Image_unsharp_mask, -1);
|
775
775
|
rb_define_method(Class_Image, "unsharp_mask_channel", Image_unsharp_mask_channel, -1);
|
776
|
+
rb_define_method(Class_Image, "vignette", Image_vignette, -1);
|
776
777
|
rb_define_method(Class_Image, "wave", Image_wave, -1);
|
777
778
|
rb_define_method(Class_Image, "white_threshold", Image_white_threshold, -1);
|
778
779
|
rb_define_method(Class_Image, "write", Image_write, 1);
|
@@ -875,6 +876,13 @@ Init_RMagick(void)
|
|
875
876
|
DCL_ATTR_ACCESSOR(Pixel, blue)
|
876
877
|
DCL_ATTR_ACCESSOR(Pixel, opacity)
|
877
878
|
|
879
|
+
// Define the CMYK attributes
|
880
|
+
DCL_ATTR_ACCESSOR(Pixel, cyan)
|
881
|
+
DCL_ATTR_ACCESSOR(Pixel, magenta)
|
882
|
+
DCL_ATTR_ACCESSOR(Pixel, yellow)
|
883
|
+
DCL_ATTR_ACCESSOR(Pixel, black)
|
884
|
+
|
885
|
+
|
878
886
|
// Define the instance methods
|
879
887
|
rb_define_method(Class_Pixel, "<=>", Pixel_spaceship, 1);
|
880
888
|
rb_define_method(Class_Pixel, "===", Pixel_case_eq, 1);
|
@@ -1113,14 +1121,31 @@ Init_RMagick(void)
|
|
1113
1121
|
, rm_enum_new(Class_ColorspaceType
|
1114
1122
|
, ID2SYM(rb_intern("SRGBColorspace"))
|
1115
1123
|
, INT2FIX(sRGBColorspace)));
|
1116
|
-
|
1117
|
-
ENUMERATOR(
|
1124
|
+
ENUMERATOR(HSLColorspace)
|
1125
|
+
ENUMERATOR(HWBColorspace)
|
1126
|
+
#if defined(HAVE_HSBCOLORSPACE)
|
1127
|
+
ENUMERATOR(HSBColorspace) // IM 6.0.0
|
1118
1128
|
#endif
|
1119
|
-
#if defined(
|
1120
|
-
ENUMERATOR(
|
1129
|
+
#if defined(HAVE_CINEONLOGRGBCOLORSPACE)
|
1130
|
+
ENUMERATOR(CineonLogRGBColorspace) // GM 1.2
|
1121
1131
|
#endif
|
1122
|
-
#if defined(
|
1123
|
-
ENUMERATOR(
|
1132
|
+
#if defined(HAVE_LABCOLORSPACE)
|
1133
|
+
ENUMERATOR(LABColorspace) // GM 1.2
|
1134
|
+
#endif
|
1135
|
+
#if defined(HAVE_REC601LUMACOLORSPACE)
|
1136
|
+
ENUMERATOR(Rec601LumaColorspace) // GM 1.2 && IM 6.2.2
|
1137
|
+
#endif
|
1138
|
+
#if defined(HAVE_REC601YCBCRCOLORSPACE)
|
1139
|
+
ENUMERATOR(Rec601YCbCrColorspace) // GM 1.2 && IM 6.2.2
|
1140
|
+
#endif
|
1141
|
+
#if defined(HAVE_REC709LUMACOLORSPACE)
|
1142
|
+
ENUMERATOR(Rec709LumaColorspace) // GM 1.2 && IM 6.2.2
|
1143
|
+
#endif
|
1144
|
+
#if defined(HAVE_REC709YCBCRCOLORSPACE)
|
1145
|
+
ENUMERATOR(Rec709YCbCrColorspace) // GM 1.2 && IM 6.2.2
|
1146
|
+
#endif
|
1147
|
+
#if defined(HAVE_LOGCOLORSPACE)
|
1148
|
+
ENUMERATOR(LogColorspace) // IM 6.2.3
|
1124
1149
|
#endif
|
1125
1150
|
END_ENUM
|
1126
1151
|
|
@@ -1134,9 +1159,7 @@ Init_RMagick(void)
|
|
1134
1159
|
, ID2SYM(rb_intern("AllCompliance"))
|
1135
1160
|
, INT2FIX(SVGCompliance|X11Compliance|XPMCompliance)));
|
1136
1161
|
|
1137
|
-
#if defined(HAVE_NOCOMPLIANCE)
|
1138
1162
|
ENUMERATOR(NoCompliance)
|
1139
|
-
#endif
|
1140
1163
|
ENUMERATOR(SVGCompliance)
|
1141
1164
|
ENUMERATOR(X11Compliance)
|
1142
1165
|
ENUMERATOR(XPMCompliance)
|
@@ -1236,15 +1259,13 @@ Init_RMagick(void)
|
|
1236
1259
|
ENUMERATOR(LineThroughDecoration)
|
1237
1260
|
END_ENUM
|
1238
1261
|
|
1239
|
-
|
1240
|
-
// DisposeType constants (5.5.1)
|
1262
|
+
// DisposeType constants
|
1241
1263
|
DEF_ENUM(DisposeType)
|
1242
1264
|
ENUMERATOR(UndefinedDispose)
|
1243
1265
|
ENUMERATOR(BackgroundDispose)
|
1244
1266
|
ENUMERATOR(NoneDispose)
|
1245
1267
|
ENUMERATOR(PreviousDispose)
|
1246
1268
|
END_ENUM
|
1247
|
-
#endif
|
1248
1269
|
|
1249
1270
|
DEF_ENUM(EndianType)
|
1250
1271
|
ENUMERATOR(UndefinedEndian)
|
@@ -1561,6 +1582,64 @@ Init_RMagick(void)
|
|
1561
1582
|
|
1562
1583
|
}
|
1563
1584
|
|
1585
|
+
|
1586
|
+
|
1587
|
+
|
1588
|
+
/*
|
1589
|
+
* Static: test_Magick_version
|
1590
|
+
* Purpose: Ensure the version of ImageMagick we're running with matches
|
1591
|
+
* the version we were compiled with.
|
1592
|
+
* Notes: Bypass the test by defining the constant RMAGICK_BYPASS_VERSION_TEST
|
1593
|
+
* to 'true' at the top level, before requiring 'RMagick'
|
1594
|
+
*/
|
1595
|
+
static void test_Magick_version(void)
|
1596
|
+
{
|
1597
|
+
unsigned long version_number;
|
1598
|
+
const char *version_str;
|
1599
|
+
const char *web_site =
|
1600
|
+
#if defined(MagickHomeURL)
|
1601
|
+
MagickHomeURL
|
1602
|
+
#else
|
1603
|
+
MagickWebSite
|
1604
|
+
#endif
|
1605
|
+
;
|
1606
|
+
int x, n;
|
1607
|
+
ID bypass = rb_intern("RMAGICK_BYPASS_VERSION_TEST");
|
1608
|
+
|
1609
|
+
if (RTEST(rb_const_defined(rb_cObject, bypass)) && RTEST(rb_const_get(rb_cObject, bypass)))
|
1610
|
+
{
|
1611
|
+
return;
|
1612
|
+
}
|
1613
|
+
|
1614
|
+
version_str = GetMagickVersion(&version_number);
|
1615
|
+
if (version_number != MagickLibVersion)
|
1616
|
+
{
|
1617
|
+
// Extract the string "ImageMagick X.Y.Z"
|
1618
|
+
n = 0;
|
1619
|
+
for (x = 0; version_str[x] != '\0'; x++)
|
1620
|
+
{
|
1621
|
+
if (version_str[x] == ' ' && ++n == 2)
|
1622
|
+
{
|
1623
|
+
break;
|
1624
|
+
}
|
1625
|
+
}
|
1626
|
+
|
1627
|
+
rb_raise(rb_eRuntimeError,
|
1628
|
+
"This version of RMagick was created to run with %s %s\n"
|
1629
|
+
"but %.*s is installed on this system. You should either\n"
|
1630
|
+
" 1) refer to the RMagick README file to learn how to create\n"
|
1631
|
+
" a version of RMagick for %.*s, or\n"
|
1632
|
+
" 2) download %s %s from %s and install it." ,
|
1633
|
+
MagickPackageName, MagickLibVersionText, x, version_str, x, version_str,
|
1634
|
+
MagickPackageName, MagickLibVersionText, web_site);
|
1635
|
+
}
|
1636
|
+
|
1637
|
+
}
|
1638
|
+
|
1639
|
+
|
1640
|
+
|
1641
|
+
|
1642
|
+
|
1564
1643
|
/*
|
1565
1644
|
Static: version_constants
|
1566
1645
|
Purpose: create Version, Magick_version, and Version_long constants.
|
@@ -1568,19 +1647,29 @@ Init_RMagick(void)
|
|
1568
1647
|
static void version_constants(void)
|
1569
1648
|
{
|
1570
1649
|
const char *mgk_version;
|
1650
|
+
volatile VALUE str;
|
1571
1651
|
char long_version[1000];
|
1572
1652
|
|
1573
1653
|
mgk_version = GetMagickVersion(NULL);
|
1574
|
-
rb_define_const(Module_Magick, "Magick_version", rb_str_new2(mgk_version));
|
1575
1654
|
|
1576
|
-
|
1655
|
+
str = rb_str_new2(mgk_version);
|
1656
|
+
rb_obj_freeze(str);
|
1657
|
+
rb_define_const(Module_Magick, "Magick_version", str);
|
1658
|
+
|
1659
|
+
str = rb_str_new2(PACKAGE_STRING);
|
1660
|
+
rb_obj_freeze(str);
|
1661
|
+
rb_define_const(Module_Magick, "Version", str);
|
1662
|
+
|
1577
1663
|
sprintf(long_version,
|
1578
|
-
"This is %s ($Date:
|
1664
|
+
"This is %s ($Date: 2006/01/20 23:59:46 $) Copyright (C) 2006 by Timothy P. Hunter\n"
|
1579
1665
|
"Built with %s\n"
|
1580
1666
|
"Built for %s\n"
|
1581
1667
|
"Web page: http://rmagick.rubyforge.org\n"
|
1582
1668
|
"Email: rmagick@rubyforge.org\n",
|
1583
1669
|
PACKAGE_STRING, mgk_version, RUBY_VERSION_STRING);
|
1584
|
-
|
1670
|
+
|
1671
|
+
str = rb_str_new2(long_version);
|
1672
|
+
rb_obj_freeze(str);
|
1673
|
+
rb_define_const(Module_Magick, "Long_version", str);
|
1585
1674
|
|
1586
1675
|
}
|
data/ext/RMagick/rmutil.c
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
/* $Id: rmutil.c,v 1.
|
1
|
+
/* $Id: rmutil.c,v 1.66 2006/01/20 23:59:46 rmagick Exp $ */
|
2
2
|
/*============================================================================\
|
3
|
-
| Copyright (C)
|
3
|
+
| Copyright (C) 2006 by Timothy P. Hunter
|
4
4
|
| Name: rmutil.c
|
5
5
|
| Author: Tim Hunter
|
6
6
|
| Purpose: Utility functions for RMagick
|
@@ -130,6 +130,28 @@ char *rm_string_value_ptr_len(volatile VALUE *ptr, long *len)
|
|
130
130
|
}
|
131
131
|
|
132
132
|
|
133
|
+
/*
|
134
|
+
* Extern: rm_strcasecmp(s1, s2)
|
135
|
+
* Purpose: compare s1 and s2 ignoring case
|
136
|
+
* Returns: same as strcmp(3)
|
137
|
+
*/
|
138
|
+
int
|
139
|
+
rm_strcasecmp(const char *s1, const char *s2)
|
140
|
+
{
|
141
|
+
while (*s1 && *s2)
|
142
|
+
{
|
143
|
+
if (toupper(*s1) != toupper(*s2))
|
144
|
+
{
|
145
|
+
break;
|
146
|
+
}
|
147
|
+
s1 += 1;
|
148
|
+
s2 += 1;
|
149
|
+
}
|
150
|
+
return (int)(*s1 - *s2);
|
151
|
+
}
|
152
|
+
|
153
|
+
|
154
|
+
|
133
155
|
/*
|
134
156
|
* Extern: rm_check_ary_len(ary, len)
|
135
157
|
* Purpose: raise exception if array too short
|
@@ -523,8 +545,6 @@ Pixel_from_HSL(VALUE class, VALUE hsl)
|
|
523
545
|
/*
|
524
546
|
Method: Pixel#fcmp(other[, fuzz[, colorspace]])
|
525
547
|
Purpose: Compare pixel values for equality
|
526
|
-
Notes: The colorspace value is ignored < 5.5.5
|
527
|
-
and > 5.5.7.
|
528
548
|
*/
|
529
549
|
VALUE
|
530
550
|
Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
@@ -556,7 +576,7 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
|
556
576
|
Data_Get_Struct(self, Pixel, this);
|
557
577
|
Data_Get_Struct(argv[0], Pixel, that);
|
558
578
|
|
559
|
-
#if defined(HAVE_FUZZYCOLORCOMPARE)
|
579
|
+
#if defined(HAVE_FUZZYCOLORCOMPARE) || defined(HAVE_ISCOLORSIMILAR)
|
560
580
|
// The FuzzyColorCompare function expects to get the
|
561
581
|
// colorspace and fuzz parameters from an Image structure.
|
562
582
|
|
@@ -576,7 +596,11 @@ Pixel_fcmp(int argc, VALUE *argv, VALUE self)
|
|
576
596
|
image->colorspace = colorspace;
|
577
597
|
image->fuzz = fuzz;
|
578
598
|
|
599
|
+
#if defined(HAVE_ISCOLORSIMILAR)
|
600
|
+
equal = IsColorSimilar(image, this, that);
|
601
|
+
#else
|
579
602
|
equal = FuzzyColorCompare(image, this, that);
|
603
|
+
#endif
|
580
604
|
DestroyImage(image);
|
581
605
|
|
582
606
|
#else
|
@@ -623,6 +647,20 @@ DEF_PIXEL_CHANNEL_WRITER(blue)
|
|
623
647
|
DEF_PIXEL_CHANNEL_WRITER(opacity)
|
624
648
|
|
625
649
|
|
650
|
+
/*
|
651
|
+
Methods: Pixel CMYK attribute accessors
|
652
|
+
Purpose: Get/set Pixel attributes
|
653
|
+
Note: Pixel is Observable. Setters call changed, notify_observers
|
654
|
+
Note: Setters return their argument values for backward compatibility
|
655
|
+
to when Pixel was a Struct class.
|
656
|
+
*/
|
657
|
+
DEF_PIXEL_CMYK_CHANNEL_ACCESSOR(cyan, red)
|
658
|
+
DEF_PIXEL_CMYK_CHANNEL_ACCESSOR(magenta, green)
|
659
|
+
DEF_PIXEL_CMYK_CHANNEL_ACCESSOR(yellow, blue)
|
660
|
+
DEF_PIXEL_CMYK_CHANNEL_ACCESSOR(black, opacity)
|
661
|
+
|
662
|
+
|
663
|
+
|
626
664
|
/*
|
627
665
|
Method: Pixel#<=>
|
628
666
|
Purpose: Support Comparable mixin
|
@@ -1001,6 +1039,19 @@ ColorspaceType_new(ColorspaceType cs)
|
|
1001
1039
|
{
|
1002
1040
|
const char *name;
|
1003
1041
|
|
1042
|
+
#if defined(HAVE_REC601YCBCRCOLORSPACE)
|
1043
|
+
// GM 1.2 defines this symbol to be equal to YCbCrColorspace, so we
|
1044
|
+
// can't use it as a case label. GM wants the string version of this
|
1045
|
+
// enumerator to be Rec601YCbCrColorspace (see ColorspaceTypeToString
|
1046
|
+
// in colorspace.c) so that's what we return for both versions of the
|
1047
|
+
// enumerator.
|
1048
|
+
if (cs == Rec601YCbCrColorspace)
|
1049
|
+
{
|
1050
|
+
return rm_enum_new(Class_ColorspaceType
|
1051
|
+
, ID2SYM(rb_intern("Rec601YCbCrColorspace")), INT2FIX(cs));
|
1052
|
+
}
|
1053
|
+
#endif
|
1054
|
+
|
1004
1055
|
switch(cs)
|
1005
1056
|
{
|
1006
1057
|
default:
|
@@ -1043,15 +1094,46 @@ ColorspaceType_new(ColorspaceType cs)
|
|
1043
1094
|
case sRGBColorspace:
|
1044
1095
|
name = "sRGBColorspace";
|
1045
1096
|
break;
|
1046
|
-
#if defined(HAVE_HSLCOLORSPACE)
|
1047
1097
|
case HSLColorspace:
|
1048
1098
|
name = "HSLColorspace";
|
1049
1099
|
break;
|
1050
|
-
#endif
|
1051
|
-
#if defined(HAVE_HWBCOLORSPACE)
|
1052
1100
|
case HWBColorspace:
|
1053
1101
|
name = "HWBColorspace";
|
1054
1102
|
break;
|
1103
|
+
#if defined(HAVE_HSBCOLORSPACE)
|
1104
|
+
case HSBColorspace:
|
1105
|
+
name = "HSBColorspace";
|
1106
|
+
break;
|
1107
|
+
#endif
|
1108
|
+
#if defined(HAVE_LABCOLORSPACE)
|
1109
|
+
case LABColorspace:
|
1110
|
+
name = "LABColorspace";
|
1111
|
+
break;
|
1112
|
+
#endif
|
1113
|
+
#if defined(HAVE_CINEONLOGRGBCOLORSPACE)
|
1114
|
+
case CineonLogRGBColorspace:
|
1115
|
+
name = "CineonLogRGBColorspace";
|
1116
|
+
break;
|
1117
|
+
#endif
|
1118
|
+
#if defined(HAVE_REC601LUMACOLORSPACE)
|
1119
|
+
case Rec601LumaColorspace:
|
1120
|
+
name = "Rec601LumaColorspace";
|
1121
|
+
break;
|
1122
|
+
#endif
|
1123
|
+
#if defined(HAVE_REC709LUMACOLORSPACE)
|
1124
|
+
case Rec709LumaColorspace:
|
1125
|
+
name = "Rec709LumaColorspace";
|
1126
|
+
break;
|
1127
|
+
#endif
|
1128
|
+
#if defined(HAVE_REC709YCBCRCOLORSPACE)
|
1129
|
+
case Rec709YCbCrColorspace:
|
1130
|
+
name = "Rec709YCbCrColorspace";
|
1131
|
+
break;
|
1132
|
+
#endif
|
1133
|
+
#if defined(HAVE_LOGCOLORSPACE)
|
1134
|
+
case LogColorspace:
|
1135
|
+
name = "LogColorspace";
|
1136
|
+
break;
|
1055
1137
|
#endif
|
1056
1138
|
}
|
1057
1139
|
|
@@ -2426,27 +2508,16 @@ Compliance_name(ComplianceType *c)
|
|
2426
2508
|
*c = XPMCompliance;
|
2427
2509
|
return "XPMCompliance";
|
2428
2510
|
}
|
2429
|
-
|
2430
|
-
else if (*c != NoCompliance)
|
2431
|
-
{
|
2432
|
-
return "unknown";
|
2433
|
-
}
|
2434
|
-
else
|
2511
|
+
else if (*c == NoCompliance)
|
2435
2512
|
{
|
2436
2513
|
*c = NoCompliance;
|
2437
2514
|
return "NoCompliance";
|
2438
2515
|
}
|
2439
|
-
#else
|
2440
|
-
else if (*c != UnknownCompliance)
|
2441
|
-
{
|
2442
|
-
return "unknown";
|
2443
|
-
}
|
2444
2516
|
else
|
2445
2517
|
{
|
2446
|
-
*c =
|
2447
|
-
return "
|
2518
|
+
*c = UndefinedCompliance;
|
2519
|
+
return "UndefinedCompliance";
|
2448
2520
|
}
|
2449
|
-
#endif
|
2450
2521
|
}
|
2451
2522
|
|
2452
2523
|
|
@@ -2763,9 +2834,9 @@ magick_error_handler(
|
|
2763
2834
|
sprintf(msg,
|
2764
2835
|
#endif
|
2765
2836
|
"%s%s%s",
|
2766
|
-
|
2837
|
+
GetLocaleExceptionMessage(severity, reason),
|
2767
2838
|
description ? ": " : "",
|
2768
|
-
description ?
|
2839
|
+
description ? GetLocaleExceptionMessage(severity, description) : "");
|
2769
2840
|
|
2770
2841
|
#if defined(HAVE_EXCEPTIONINFO_MODULE)
|
2771
2842
|
{
|
@@ -2790,9 +2861,9 @@ magick_error_handler(
|
|
2790
2861
|
sprintf(msg,
|
2791
2862
|
#endif
|
2792
2863
|
"RMagick: %s%s%s",
|
2793
|
-
|
2864
|
+
GetLocaleExceptionMessage(severity, reason),
|
2794
2865
|
description ? ": " : "",
|
2795
|
-
description ?
|
2866
|
+
description ? GetLocaleExceptionMessage(severity, description) : "");
|
2796
2867
|
rb_warning(msg);
|
2797
2868
|
}
|
2798
2869
|
}
|
@@ -2897,7 +2968,7 @@ void rm_handle_all_errors(Image *seq)
|
|
2897
2968
|
badboy = image;
|
2898
2969
|
}
|
2899
2970
|
}
|
2900
|
-
image =
|
2971
|
+
image = GetNextImageInList(image);
|
2901
2972
|
}
|
2902
2973
|
|
2903
2974
|
if (badboy)
|
@@ -2958,14 +3029,6 @@ rm_split(Image *image)
|
|
2958
3029
|
}
|
2959
3030
|
while (image)
|
2960
3031
|
{
|
2961
|
-
#if HAVE_REMOVEFIRSTIMAGEFROMLIST
|
2962
3032
|
(void) RemoveFirstImageFromList(&image);
|
2963
|
-
#else
|
2964
|
-
Image *next;
|
2965
|
-
|
2966
|
-
next = GET_NEXT_IMAGE(image);
|
2967
|
-
image->previous = image->next = NULL;
|
2968
|
-
image = next;
|
2969
|
-
#endif
|
2970
3033
|
}
|
2971
3034
|
}
|