rmagick 2.8.0 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

Files changed (88) hide show
  1. data/ChangeLog +10 -2
  2. data/README.html +7 -7
  3. data/doc/comtasks.html +2 -2
  4. data/doc/constants.html +5 -5
  5. data/doc/draw.html +131 -20
  6. data/doc/ex/InitialCoords.rb +1 -1
  7. data/doc/ex/NewCoordSys.rb +2 -2
  8. data/doc/ex/OrigCoordSys.rb +1 -1
  9. data/doc/ex/RotateScale.rb +2 -2
  10. data/doc/ex/Skew.rb +2 -2
  11. data/doc/ex/ViewBox.rb +1 -1
  12. data/doc/ex/arc.rb +4 -2
  13. data/doc/ex/arcs02.rb +1 -1
  14. data/doc/ex/bounding_box.rb +3 -0
  15. data/doc/ex/cbezier1.rb +2 -0
  16. data/doc/ex/cbezier2.rb +2 -0
  17. data/doc/ex/cbezier3.rb +2 -0
  18. data/doc/ex/cbezier4.rb +2 -0
  19. data/doc/ex/cbezier5.rb +2 -0
  20. data/doc/ex/cbezier6.rb +2 -0
  21. data/doc/ex/channel.rb +1 -0
  22. data/doc/ex/circle.rb +2 -0
  23. data/doc/ex/cubic01.rb +1 -1
  24. data/doc/ex/cubic02.rb +1 -1
  25. data/doc/ex/ellipse.rb +2 -0
  26. data/doc/ex/font_styles.rb +12 -10
  27. data/doc/ex/get_type_metrics.rb +2 -0
  28. data/doc/ex/grav.rb +2 -0
  29. data/doc/ex/image.rb +1 -1
  30. data/doc/ex/line.rb +2 -0
  31. data/doc/ex/opacity.rb +6 -4
  32. data/doc/ex/path.rb +2 -0
  33. data/doc/ex/polaroid.rb +2 -0
  34. data/doc/ex/qbezierpath.rb +3 -0
  35. data/doc/ex/rectangle.rb +2 -0
  36. data/doc/ex/rotate.rb +2 -0
  37. data/doc/ex/roundrect.rb +2 -0
  38. data/doc/ex/skewx.rb +2 -0
  39. data/doc/ex/skewy.rb +2 -0
  40. data/doc/ex/stroke_dasharray.rb +2 -0
  41. data/doc/ex/stroke_width.rb +2 -0
  42. data/doc/ex/text.rb +3 -2
  43. data/doc/ex/text01.rb +1 -1
  44. data/doc/ex/text_styles.rb +1 -1
  45. data/doc/ex/text_undercolor.rb +2 -0
  46. data/doc/ex/translate.rb +3 -1
  47. data/doc/ilist.html +2 -2
  48. data/doc/image1.html +2 -2
  49. data/doc/image2.html +2 -2
  50. data/doc/image3.html +37 -6
  51. data/doc/imageattrs.html +2 -2
  52. data/doc/imusage.html +3 -3
  53. data/doc/index.html +3 -3
  54. data/doc/info.html +2 -2
  55. data/doc/magick.html +2 -2
  56. data/doc/optequiv.html +24 -2
  57. data/doc/rvg.html +2 -2
  58. data/doc/rvgclip.html +2 -2
  59. data/doc/rvggroup.html +2 -2
  60. data/doc/rvgimage.html +2 -2
  61. data/doc/rvgpattern.html +2 -2
  62. data/doc/rvgshape.html +2 -2
  63. data/doc/rvgstyle.html +2 -2
  64. data/doc/rvgtext.html +2 -2
  65. data/doc/rvgtspan.html +2 -2
  66. data/doc/rvgtut.html +2 -2
  67. data/doc/rvguse.html +2 -2
  68. data/doc/rvgxform.html +2 -2
  69. data/doc/struct.html +2 -2
  70. data/doc/usage.html +6 -4
  71. data/ext/RMagick/MANIFEST +6 -1
  72. data/ext/RMagick/extconf.rb +18 -2
  73. data/ext/RMagick/rmagick.c +312 -0
  74. data/ext/RMagick/rmagick.h +137 -61
  75. data/ext/RMagick/rmdraw.c +271 -377
  76. data/ext/RMagick/rmenum.c +1016 -0
  77. data/ext/RMagick/rmimage.c +172 -16
  78. data/ext/RMagick/rminfo.c +5 -5
  79. data/ext/RMagick/rmmain.c +50 -303
  80. data/ext/RMagick/rmmontage.c +386 -0
  81. data/ext/RMagick/rmpixel.c +816 -0
  82. data/ext/RMagick/rmstruct.c +887 -0
  83. data/ext/RMagick/rmutil.c +25 -2634
  84. data/lib/RMagick.rb +46 -2
  85. data/lib/rvg/misc.rb +5 -4
  86. data/lib/rvg/stylable.rb +7 -1
  87. data/rmagick.gemspec +1 -1
  88. metadata +7 -2
@@ -1,7 +1,7 @@
1
1
  require "mkmf"
2
2
  require "date"
3
3
 
4
- RMAGICK_VERS = "2.8.0"
4
+ RMAGICK_VERS = "2.9.0"
5
5
  MIN_RUBY_VERS = "1.8.2"
6
6
  MIN_RUBY_VERS_NO = MIN_RUBY_VERS.tr(".","").to_i
7
7
  MIN_IM_VERS = "6.3.0"
@@ -287,6 +287,8 @@ end
287
287
  have_struct_member("ImageInfo", "profile", headers) # 6.3.2
288
288
  have_struct_member("Image", "tile_offset", headers) # 6.3.4
289
289
  have_struct_member("Image", "type", headers) # ???
290
+ have_struct_member("DrawInfo", "kerning", headers) # 6.4.7-8
291
+ have_struct_member("DrawInfo", "interword_spacing", headers) # 6.4.8-0
290
292
  have_type("AlphaChannelType", headers) # 6.3.5
291
293
  have_type("DitherMethod", headers) # 6.4.2
292
294
  have_type("ImageLayerMethod", headers) # 6.3.6 replaces MagickLayerMethod
@@ -328,7 +330,21 @@ have_enum_value("InterpolatePixelMethod", "SplineInterpolatePixel", headers) # 6
328
330
  have_enum_values("InterlaceType", ["GIFInterlace", # 6.3.4
329
331
  "JPEGInterlace", # 6.3.4
330
332
  "PNGInterlace"], headers) # 6.3.4
331
- have_enum_value("MagickEvaluateOperator", "PowEvaluateOperator", headers) # 6.4.1-9
333
+ have_enum_values("MagickEvaluateOperator", ["PowEvaluateOperator", # 6.4.1-9
334
+ "LogEvaluateOperator", # 6.4.2
335
+ "ThresholdEvaluateOperator", # 6.4.3
336
+ "ThresholdBlackEvaluateOperator", # 6.4.3
337
+ "ThresholdWhiteEvaluateOperator", # 6.4.3
338
+ "GaussianNoiseEvaluateOperator", # 6.4.3
339
+ "ImpulseNoiseEvaluateOperator", # 6.4.3
340
+ "LaplacianNoiseEvaluateOperator", # 6.4.3
341
+ "MultiplicativeNoiseEvaluateOperator", # 6.4.3
342
+ "PoissonNoiseEvaluateOperator", # 6.4.3
343
+ "UniformNoiseEvaluateOperator", # 6.4.3
344
+ "CosineEvaluateOperator", # 6.4.8-5
345
+ "SineEvaluateOperator", # 6.4.8-5
346
+ "AddModulusEvaluateOperator"], # 6.4.8-5
347
+ headers)
332
348
  have_enum_values("MagickLayerMethod", ["OptimizeTransLayer", # 6.3.3-4
333
349
  "RemoveDupsLayer", # 6.3.3-6
334
350
  "RemoveZeroLayer", # 6.3.3-6
@@ -0,0 +1,312 @@
1
+ /* $Id: rmagick.c,v 1.2 2008/12/27 17:16:03 rmagick Exp $ */
2
+ /*============================================================================\
3
+ | Copyright (C) 2008 by Timothy P. Hunter
4
+ | Name: rmagick.c
5
+ | Author: Tim Hunter
6
+ | Purpose: Contains Magick module methods.
7
+ \============================================================================*/
8
+
9
+
10
+ #include "rmagick.h"
11
+
12
+
13
+
14
+
15
+ /*
16
+ Method: Magick::colors [ { |colorinfo| } ]
17
+ Purpose: If called with the optional block, iterates over the colors,
18
+ otherwise returns an array of Magick::Color objects
19
+ Notes: There are 3 implementations
20
+
21
+ */
22
+ VALUE
23
+ Magick_colors(VALUE class)
24
+ {
25
+ const ColorInfo **color_info_list;
26
+ unsigned long number_colors, x;
27
+ volatile VALUE ary;
28
+ ExceptionInfo exception;
29
+
30
+ GetExceptionInfo(&exception);
31
+
32
+ color_info_list = GetColorInfoList("*", &number_colors, &exception);
33
+ CHECK_EXCEPTION()
34
+ (void) DestroyExceptionInfo(&exception);
35
+
36
+
37
+ if (rb_block_given_p())
38
+ {
39
+ for (x = 0; x < number_colors; x++)
40
+ {
41
+ (void) rb_yield(Import_ColorInfo(color_info_list[x]));
42
+ }
43
+ magick_free((void *)color_info_list);
44
+ return class;
45
+ }
46
+ else
47
+ {
48
+ ary = rb_ary_new2((long) number_colors);
49
+ for (x = 0; x < number_colors; x++)
50
+ {
51
+ (void) rb_ary_push(ary, Import_ColorInfo(color_info_list[x]));
52
+ }
53
+
54
+ magick_free((void *)color_info_list);
55
+ return ary;
56
+ }
57
+ }
58
+
59
+
60
+ /*
61
+ Method: Magick::fonts [ { |fontinfo| } ]
62
+ Purpose: If called with the optional block, iterates over the fonts,
63
+ otherwise returns an array of Magick::Font objects
64
+ */
65
+ VALUE
66
+ Magick_fonts(VALUE class)
67
+ {
68
+ const TypeInfo **type_info;
69
+ unsigned long number_types, x;
70
+ volatile VALUE ary;
71
+ ExceptionInfo exception;
72
+
73
+ GetExceptionInfo(&exception);
74
+ type_info = GetTypeInfoList("*", &number_types, &exception);
75
+ CHECK_EXCEPTION()
76
+ (void) DestroyExceptionInfo(&exception);
77
+
78
+ if (rb_block_given_p())
79
+ {
80
+ for (x = 0; x < number_types; x++)
81
+ {
82
+ (void) rb_yield(Import_TypeInfo((const TypeInfo *)type_info[x]));
83
+ }
84
+ magick_free((void *)type_info);
85
+ return class;
86
+ }
87
+ else
88
+ {
89
+ ary = rb_ary_new2((long)number_types);
90
+ for (x = 0; x < number_types; x++)
91
+ {
92
+ (void) rb_ary_push(ary, Import_TypeInfo((const TypeInfo *)type_info[x]));
93
+ }
94
+ magick_free((void *)type_info);
95
+ return ary;
96
+ }
97
+
98
+ }
99
+
100
+
101
+ /*
102
+ Method: Magick.init_formats
103
+ Purpose: Build the @@formats hash
104
+
105
+ The hash keys are image formats. The hash values
106
+ specify the format "mode string", i.e. a description of what
107
+ ImageMagick can do with that format. The mode string is in the
108
+ form "BRWA", where
109
+ "B" is "*" if the format has native blob support, or " " otherwise.
110
+ "R" is "r" if ImageMagick can read that format, or "-" otherwise.
111
+ "W" is "w" if ImageMagick can write that format, or "-" otherwise.
112
+ "A" is "+" if the format supports multi-image files, or "-" otherwise.
113
+ Notes: Only called once.
114
+ There are 3 implementations.
115
+ */
116
+
117
+ static VALUE
118
+ MagickInfo_to_format(const MagickInfo *magick_info)
119
+ {
120
+ char mode[4];
121
+
122
+ mode[0] = magick_info->blob_support ? '*': ' ';
123
+ mode[1] = magick_info->decoder ? 'r' : '-';
124
+ mode[2] = magick_info->encoder ? 'w' : '-';
125
+ mode[3] = magick_info->encoder && magick_info->adjoin ? '+' : '-';
126
+
127
+ return rb_str_new(mode, sizeof(mode));
128
+ }
129
+
130
+
131
+ VALUE
132
+ Magick_init_formats(VALUE class)
133
+ {
134
+ const MagickInfo **magick_info;
135
+ unsigned long number_formats, x;
136
+ volatile VALUE formats;
137
+ ExceptionInfo exception;
138
+
139
+ class = class; // defeat "never referenced" message from icc
140
+ formats = rb_hash_new();
141
+
142
+ // IM 6.1.3 added an exception argument to GetMagickInfoList
143
+ GetExceptionInfo(&exception);
144
+ magick_info = GetMagickInfoList("*", &number_formats, &exception);
145
+ CHECK_EXCEPTION()
146
+ (void) DestroyExceptionInfo(&exception);
147
+
148
+
149
+ for (x = 0; x < number_formats; x++)
150
+ {
151
+ (void) rb_hash_aset(formats
152
+ , rb_str_new2(magick_info[x]->name)
153
+ , MagickInfo_to_format((const MagickInfo *)magick_info[x]));
154
+ }
155
+ return formats;
156
+ }
157
+
158
+
159
+ /*
160
+ Method: Magick.limit_resource(resource[, limit])
161
+ Purpose: Get/set resource limits. If a limit is specified the old limit
162
+ is set to the new value. Either way the current/old limit is returned.
163
+ */
164
+ VALUE
165
+ Magick_limit_resource(int argc, VALUE *argv, VALUE class)
166
+ {
167
+ volatile VALUE resource, limit;
168
+ ResourceType res = UndefinedResource;
169
+ char *str;
170
+ ID id;
171
+ unsigned long cur_limit;
172
+
173
+ rb_scan_args(argc, argv, "11", &resource, &limit);
174
+
175
+ switch (TYPE(resource))
176
+ {
177
+ case T_NIL:
178
+ return class;
179
+
180
+ case T_SYMBOL:
181
+ id = (ID)SYM2ID(resource);
182
+ if (id == rb_intern("area"))
183
+ {
184
+ res = AreaResource;
185
+ }
186
+ else if (id == rb_intern("memory"))
187
+ {
188
+ res = MemoryResource;
189
+ }
190
+ else if (id == rb_intern("map"))
191
+ {
192
+ res = MapResource;
193
+ }
194
+ else if (id == rb_intern("disk"))
195
+ {
196
+ res = DiskResource;
197
+ }
198
+ else if (id == rb_intern("file"))
199
+ {
200
+ res = FileResource;
201
+ }
202
+ else
203
+ {
204
+ rb_raise(rb_eArgError, "unknown resource: `:%s'", rb_id2name(id));
205
+ }
206
+ break;
207
+
208
+ default:
209
+ str = StringValuePtr(resource);
210
+ if (*str == '\0')
211
+ {
212
+ return class;
213
+ }
214
+ else if (rm_strcasecmp("area", str) == 0)
215
+ {
216
+ res = AreaResource;
217
+ }
218
+ else if (rm_strcasecmp("memory", str) == 0)
219
+ {
220
+ res = MemoryResource;
221
+ }
222
+ else if (rm_strcasecmp("map", str) == 0)
223
+ {
224
+ res = MapResource;
225
+ }
226
+ else if (rm_strcasecmp("disk", str) == 0)
227
+ {
228
+ res = DiskResource;
229
+ }
230
+ else if (rm_strcasecmp("file", str) == 0)
231
+ {
232
+ res = FileResource;
233
+ }
234
+ else
235
+ {
236
+ rb_raise(rb_eArgError, "unknown resource: `%s'", str);
237
+ }
238
+ break;
239
+ }
240
+
241
+ cur_limit = GetMagickResourceLimit(res);
242
+
243
+ if (argc > 1)
244
+ {
245
+ (void) SetMagickResourceLimit(res, (MagickSizeType)NUM2ULONG(limit));
246
+ }
247
+
248
+ return ULONG2NUM(cur_limit);
249
+ }
250
+
251
+
252
+ /*
253
+ Method Magick.set_cache_threshold(megabytes)
254
+ Purpose: sets the amount of free memory allocated for the
255
+ pixel cache. Once this threshold is exceeded, all
256
+ subsequent pixels cache operations are to/from disk.
257
+ Notes: singleton method
258
+ */
259
+ VALUE
260
+ Magick_set_cache_threshold(VALUE class, VALUE threshold)
261
+ {
262
+ unsigned long thrshld = NUM2ULONG(threshold);
263
+ (void) SetMagickResourceLimit(MemoryResource, (MagickSizeType)thrshld);
264
+ (void) SetMagickResourceLimit(MapResource, (MagickSizeType)(2*thrshld));
265
+ return class;
266
+ }
267
+
268
+
269
+ /*
270
+ Method: Magick.set_log_event_mask(event,...) -> Magick
271
+ Notes: "event" is one of "all", "annotate", "blob", "cache",
272
+ "coder", "configure", "deprecate", "locale", "none",
273
+ "render", "transform", "user", "x11". Multiple events
274
+ can be specified. Event names may be capitalized.
275
+ */
276
+ VALUE
277
+ Magick_set_log_event_mask(int argc, VALUE *argv, VALUE class)
278
+ {
279
+ int x;
280
+
281
+ if (argc == 0)
282
+ {
283
+ rb_raise(rb_eArgError, "wrong number of arguments (at least 1 required)");
284
+ }
285
+ for (x = 0; x < argc; x++)
286
+ {
287
+ (void) SetLogEventMask(StringValuePtr(argv[x]));
288
+ }
289
+ return class;
290
+ }
291
+
292
+ /*
293
+ Method: Magick.set_log_format(format) -> Magick
294
+ Notes: Format is a string containing one or more of:
295
+ %t - current time
296
+ %r - elapsed time
297
+ %u - user time
298
+ %p - pid
299
+ %m - module (source file name)
300
+ %f - function name
301
+ %l - line number
302
+ %d - event domain (one of the events listed above)
303
+ %e - event name
304
+ Plus other characters, including \n, etc.
305
+ */
306
+ VALUE
307
+ Magick_set_log_format(VALUE class, VALUE format)
308
+ {
309
+ SetLogFormat(StringValuePtr(format));
310
+ return class;
311
+ }
312
+
@@ -1,4 +1,4 @@
1
- /* $Id: rmagick.h,v 1.260 2008/11/23 15:57:15 rmagick Exp $ */
1
+ /* $Id: rmagick.h,v 1.268 2009/01/12 23:08:35 rmagick Exp $ */
2
2
  /*=============================================================================
3
3
  | Copyright (C) 2008 by Timothy P. Hunter
4
4
  | Name: rmagick.h
@@ -109,7 +109,7 @@
109
109
  #define OpenFile rb_io_t
110
110
  #endif
111
111
 
112
- // These macros are needed in 1.9.0 but aren't defined prior to 1.8.6.
112
+ // These macros are required in 1.9.1 but aren't defined prior to 1.8.6.
113
113
  #if !defined(RSTRING_LEN)
114
114
  #define RSTRING_LEN(s) (RSTRING((s))->len)
115
115
  #endif
@@ -126,6 +126,20 @@
126
126
  #define RARRAY_PTR(a) RARRAY((a))->ptr
127
127
  #endif
128
128
 
129
+
130
+ // Convert a C string to a Ruby symbol. Used in marshal_dump/marshal_load methods
131
+ #define CSTR2SYM(s) ID2SYM(rb_intern(s))
132
+ // Convert a C string to a Ruby String, or nil if the ptr is NULL
133
+ #define MAGICK_STRING_TO_OBJ(f) (f) ? rb_str_new2(f) : Qnil
134
+ // Copy the C string in a Ruby String object to ImageMagick memory, or set
135
+ // the pointer to NULL if the object is nil.
136
+ #define OBJ_TO_MAGICK_STRING(f, obj) \
137
+ if ((obj) != Qnil)\
138
+ magick_clone_string(&f, RSTRING_PTR(obj));\
139
+ else\
140
+ f = NULL;
141
+
142
+
129
143
  // These two functions are defined in IM starting with 6.3.2.
130
144
  #if !defined(HAVE_GETSTRINGINFODATUM)
131
145
  #define GetStringInfoDatum(p) (unsigned char *)((p)->datum)
@@ -247,6 +261,45 @@ typedef enum _QuantumExpressionOperator
247
261
  #if defined(HAVE_ENUM_POWEVALUATEOPERATOR)
248
262
  PowQuantumOperator,
249
263
  #endif
264
+ #if defined(HAVE_ENUM_LOGEVALUATEOPERATOR)
265
+ LogQuantumOperator,
266
+ #endif
267
+ #if defined(HAVE_ENUM_THRESHOLDEVALUATEOPERATOR)
268
+ ThresholdQuantumOperator,
269
+ #endif
270
+ #if defined(HAVE_ENUM_THRESHOLDBLACKEVALUATEOPERATOR)
271
+ ThresholdBlackQuantumOperator,
272
+ #endif
273
+ #if defined(HAVE_ENUM_THRESHOLDWHITEEVALUATEOPERATOR)
274
+ ThresholdWhiteQuantumOperator,
275
+ #endif
276
+ #if defined(HAVE_ENUM_GAUSSIANNOISEEVALUATEOPERATOR)
277
+ GaussianNoiseQuantumOperator,
278
+ #endif
279
+ #if defined(HAVE_ENUM_IMPULSENOISEEVALUATEOPERATOR)
280
+ ImpulseNoiseQuantumOperator,
281
+ #endif
282
+ #if defined(HAVE_ENUM_LAPLACIANNOISEEVALUATEOPERATOR)
283
+ LaplacianNoiseQuantumOperator,
284
+ #endif
285
+ #if defined(HAVE_ENUM_MULTIPLICATIVENOISEEVALUATEOPERATOR)
286
+ MultiplicativeNoiseQuantumOperator,
287
+ #endif
288
+ #if defined(HAVE_ENUM_POISSONNOISEEVALUATEOPERATOR)
289
+ PoissonNoiseQuantumOperator,
290
+ #endif
291
+ #if defined(HAVE_ENUM_UNIFORMNOISEEVALUATEOPERATOR)
292
+ UniformNoiseQuantumOperator,
293
+ #endif
294
+ #if defined(HAVE_ENUM_COSINEEVALUATEOPERATOR)
295
+ CosineQuantumOperator,
296
+ #endif
297
+ #if defined(HAVE_ENUM_SINEEVALUATEOPERATOR)
298
+ SineQuantumOperator,
299
+ #endif
300
+ #if defined(HAVE_ENUM_ADDMODULUSEVALUATEOPERATOR)
301
+ AddModulusQuantumOperator
302
+ #endif
250
303
  } QuantumExpressionOperator ;
251
304
 
252
305
 
@@ -561,10 +614,16 @@ Pixel_##_cmyk_channel_(VALUE self) \
561
614
 
562
615
  // rmmain.c
563
616
  extern void Init_RMagick2(void);
617
+
618
+
619
+ // rmagick.c
564
620
  extern VALUE Magick_colors(VALUE);
565
621
  extern VALUE Magick_fonts(VALUE);
566
622
  extern VALUE Magick_init_formats(VALUE);
567
-
623
+ extern VALUE Magick_limit_resource(int, VALUE *, VALUE);
624
+ extern VALUE Magick_set_cache_threshold(VALUE, VALUE);
625
+ extern VALUE Magick_set_log_event_mask(int, VALUE *, VALUE);
626
+ extern VALUE Magick_set_log_format(VALUE, VALUE);
568
627
 
569
628
  // rmdraw.c
570
629
  ATTR_WRITER(Draw, affine)
@@ -581,6 +640,8 @@ ATTR_WRITER(Draw, font_stretch)
581
640
  ATTR_WRITER(Draw, font_style)
582
641
  ATTR_WRITER(Draw, font_weight)
583
642
  ATTR_WRITER(Draw, gravity)
643
+ ATTR_WRITER(Draw, interword_spacing)
644
+ ATTR_WRITER(Draw, kerning)
584
645
  ATTR_WRITER(Draw, pointsize)
585
646
  ATTR_WRITER(Draw, rotation)
586
647
  ATTR_WRITER(Draw, stroke)
@@ -589,6 +650,7 @@ ATTR_WRITER(Draw, stroke_width)
589
650
  ATTR_WRITER(Draw, text_antialias)
590
651
  ATTR_WRITER(Draw, tile)
591
652
  ATTR_WRITER(Draw, undercolor)
653
+ extern VALUE Draw_alloc(VALUE);
592
654
  extern VALUE Draw_annotate(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
593
655
  extern VALUE Draw_clone(VALUE);
594
656
  extern VALUE Draw_composite(int, VALUE *, VALUE);
@@ -599,12 +661,21 @@ extern VALUE Draw_get_type_metrics(int, VALUE *, VALUE);
599
661
  extern VALUE Draw_init_copy(VALUE, VALUE);
600
662
  extern VALUE Draw_initialize(VALUE);
601
663
  extern VALUE Draw_inspect(VALUE);
602
- extern VALUE Draw_alloc(VALUE);
603
- extern VALUE DrawOptions_alloc(VALUE);
664
+ extern VALUE Draw_marshal_dump(VALUE);
665
+ extern VALUE Draw_marshal_load(VALUE, VALUE);
604
666
  extern VALUE Draw_primitive(VALUE, VALUE);
667
+ extern VALUE DrawOptions_alloc(VALUE);
605
668
  extern VALUE DrawOptions_initialize(VALUE);
606
669
 
607
670
 
671
+ extern VALUE PolaroidOptions_alloc(VALUE);
672
+ extern VALUE PolaroidOptions_initialize(VALUE);
673
+ extern VALUE rm_polaroid_new(void);
674
+ ATTR_WRITER(PolaroidOptions, shadow_color);
675
+ ATTR_WRITER(PolaroidOptions, border_color);
676
+
677
+
678
+ // rmmontage.c
608
679
  ATTR_WRITER(Montage, background_color)
609
680
  ATTR_WRITER(Montage, border_color)
610
681
  ATTR_WRITER(Montage, border_width)
@@ -627,14 +698,7 @@ extern VALUE Montage_alloc(VALUE);
627
698
  extern VALUE rm_montage_new(void);
628
699
 
629
700
 
630
- extern VALUE PolaroidOptions_alloc(VALUE);
631
- extern VALUE PolaroidOptions_initialize(VALUE);
632
- extern VALUE rm_polaroid_new(void);
633
- ATTR_WRITER(PolaroidOptions, shadow_color);
634
- ATTR_WRITER(PolaroidOptions, border_color);
635
-
636
-
637
- // rmilist.c
701
+ // rmilist.c
638
702
  extern VALUE ImageList_animate(int, VALUE *, VALUE);
639
703
  extern VALUE ImageList_append(VALUE, VALUE);
640
704
  extern VALUE ImageList_average(VALUE);
@@ -914,6 +978,8 @@ extern VALUE Image__load(VALUE, VALUE);
914
978
  extern VALUE Image_magnify(VALUE);
915
979
  extern VALUE Image_magnify_bang(VALUE);
916
980
  extern VALUE Image_map(int, VALUE *, VALUE);
981
+ extern VALUE Image_marshal_dump(VALUE);
982
+ extern VALUE Image_marshal_load(VALUE, VALUE);
917
983
  extern VALUE Image_mask(int, VALUE *, VALUE);
918
984
  extern VALUE Image_matte_flood_fill(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
919
985
  extern VALUE Image_median_filter(int, VALUE *, VALUE);
@@ -1026,28 +1092,8 @@ extern VALUE TextureFill_initialize(VALUE, VALUE);
1026
1092
  extern VALUE TextureFill_fill(VALUE, VALUE);
1027
1093
 
1028
1094
 
1029
- // rmutil.c
1030
- extern VALUE ChromaticityInfo_to_s(VALUE);
1031
- extern VALUE ChromaticityInfo_new(ChromaticityInfo *);
1032
- extern void Color_to_PixelPacket(PixelPacket *, VALUE);
1033
- extern void Color_to_MagickPixelPacket(Image *, MagickPixelPacket *, VALUE);
1034
- extern VALUE Color_to_s(VALUE);
1035
- extern VALUE Color_from_ColorInfo(const ColorInfo *);
1036
- extern VALUE ClassType_new(ClassType);
1037
- extern VALUE ColorspaceType_new(ColorspaceType);
1038
- extern VALUE CompositeOperator_new(CompositeOperator);
1039
- extern VALUE CompressionType_new(CompressionType);
1040
- extern VALUE DisposeType_new(DisposeType);
1041
- extern VALUE EndianType_new(EndianType);
1042
- extern VALUE FilterTypes_new(FilterTypes);
1043
- extern VALUE GravityType_new(GravityType);
1044
- extern VALUE Font_to_s(VALUE);
1045
- extern VALUE rm_cur_image(VALUE);
1046
- extern VALUE ImageMagickError_initialize(int, VALUE *, VALUE);
1047
- extern VALUE ImageType_new(ImageType);
1048
- extern VALUE InterlaceType_new(InterlaceType);
1095
+ // rmpixel.c
1049
1096
 
1050
- extern VALUE Pixel_alloc(VALUE);
1051
1097
 
1052
1098
  ATTR_ACCESSOR(Pixel, red)
1053
1099
  ATTR_ACCESSOR(Pixel, green)
@@ -1057,6 +1103,8 @@ ATTR_ACCESSOR(Pixel, cyan)
1057
1103
  ATTR_ACCESSOR(Pixel, magenta)
1058
1104
  ATTR_ACCESSOR(Pixel, yellow)
1059
1105
  ATTR_ACCESSOR(Pixel, black)
1106
+ extern void destroy_Pixel(Pixel *);
1107
+ extern VALUE Pixel_alloc(VALUE);
1060
1108
  extern VALUE Pixel_case_eq(VALUE, VALUE);
1061
1109
  extern VALUE Pixel_clone(VALUE);
1062
1110
  extern VALUE Pixel_dup(VALUE);
@@ -1069,59 +1117,87 @@ extern VALUE Pixel_hash(VALUE);
1069
1117
  extern VALUE Pixel_initialize(int, VALUE *, VALUE);
1070
1118
  extern VALUE Pixel_init_copy(VALUE, VALUE);
1071
1119
  extern VALUE Pixel_intensity(VALUE);
1120
+ extern VALUE Pixel_marshal_dump(VALUE);
1121
+ extern VALUE Pixel_marshal_load(VALUE, VALUE);
1072
1122
  extern VALUE Pixel_spaceship(VALUE, VALUE);
1073
1123
  extern VALUE Pixel_to_color(int, VALUE *, VALUE);
1074
1124
  extern VALUE Pixel_to_HSL(VALUE);
1075
1125
  extern VALUE Pixel_to_hsla(VALUE);
1076
1126
  extern VALUE Pixel_to_s(VALUE);
1077
- extern VALUE PixelPacket_to_Color_Name(Image *, PixelPacket *);
1078
- extern VALUE PixelPacket_to_Color_Name_Info(Info *, PixelPacket *);
1079
- extern VALUE Pixel_from_PixelPacket(const PixelPacket *);
1080
1127
 
1081
- extern void Point_to_PointInfo(PointInfo *, VALUE);
1082
- extern VALUE PointInfo_to_Point(PointInfo *);
1128
+
1129
+ // rmenum.c
1130
+ extern VALUE Enum_alloc(VALUE);
1131
+ extern VALUE Enum_initialize(VALUE, VALUE, VALUE);
1132
+ extern VALUE Enum_to_s(VALUE);
1133
+ extern VALUE Enum_to_i(VALUE);
1134
+ extern VALUE Enum_spaceship(VALUE, VALUE);
1135
+ extern VALUE Enum_case_eq(VALUE, VALUE);
1136
+ extern VALUE Enum_type_initialize(VALUE, VALUE, VALUE);
1137
+ extern VALUE Enum_type_each(VALUE);
1138
+ extern VALUE rm_enum_new(VALUE, VALUE, VALUE);
1139
+
1140
+
1141
+ // rmstruct.c
1142
+ extern VALUE ChromaticityInfo_to_s(VALUE);
1143
+ extern VALUE ChromaticityInfo_new(ChromaticityInfo *);
1144
+ extern void Color_to_PixelPacket(PixelPacket *, VALUE);
1145
+ extern void Color_to_MagickPixelPacket(Image *, MagickPixelPacket *, VALUE);
1146
+ extern VALUE Color_to_s(VALUE);
1147
+ extern VALUE Import_ColorInfo(const ColorInfo *);
1148
+ extern VALUE ClassType_new(ClassType);
1149
+ extern VALUE ColorspaceType_new(ColorspaceType);
1150
+ extern VALUE CompositeOperator_new(CompositeOperator);
1151
+ extern VALUE CompressionType_new(CompressionType);
1152
+ extern VALUE DisposeType_new(DisposeType);
1153
+ extern VALUE EndianType_new(EndianType);
1154
+ extern VALUE FilterTypes_new(FilterTypes);
1155
+ extern VALUE GravityType_new(GravityType);
1156
+ extern VALUE Font_to_s(VALUE);
1157
+ extern VALUE ImageType_new(ImageType);
1158
+ extern VALUE InterlaceType_new(InterlaceType);
1159
+ extern VALUE Pixel_from_MagickPixelPacket(const MagickPixelPacket *);
1160
+ extern VALUE Pixel_from_PixelPacket(const PixelPacket *);
1161
+ extern void Export_PointInfo(PointInfo *, VALUE);
1162
+ extern VALUE Import_PointInfo(PointInfo *);
1083
1163
  extern VALUE PrimaryInfo_to_s(VALUE);
1084
- extern VALUE PrimaryInfo_from_PrimaryInfo(PrimaryInfo *);
1164
+ extern VALUE Import_PrimaryInfo(PrimaryInfo *);
1085
1165
  extern VALUE RectangleInfo_to_s(VALUE);
1086
- extern VALUE Rectangle_from_RectangleInfo(RectangleInfo *);
1166
+ extern VALUE Import_RectangleInfo(RectangleInfo *);
1087
1167
  extern VALUE RenderingIntent_new(RenderingIntent);
1088
1168
  extern VALUE ResolutionType_new(ResolutionType);
1089
1169
  extern VALUE SegmentInfo_to_s(VALUE);
1090
- extern VALUE Segment_from_SegmentInfo(SegmentInfo *);
1091
- extern void AffineMatrix_to_AffineMatrix(AffineMatrix *, VALUE);
1092
- extern void ChromaticityInfo_to_ChromaticityInfo(ChromaticityInfo *, VALUE);
1093
- extern void Color_to_ColorInfo(ColorInfo *, VALUE);
1170
+ extern VALUE Import_SegmentInfo(SegmentInfo *);
1171
+ extern void Export_AffineMatrix(AffineMatrix *, VALUE);
1172
+ extern VALUE Import_AffineMatrix(AffineMatrix *);
1173
+ extern void Export_ChromaticityInfo(ChromaticityInfo *, VALUE);
1174
+ extern void Export_ColorInfo(ColorInfo *, VALUE);
1094
1175
  extern VALUE InterpolatePixelMethod_new(InterpolatePixelMethod);
1095
1176
  extern VALUE OrientationType_new(OrientationType);
1096
- extern void PrimaryInfo_to_PrimaryInfo(PrimaryInfo *, VALUE);
1097
- extern void Rectangle_to_RectangleInfo(RectangleInfo *, VALUE);
1098
- extern void Segment_to_SegmentInfo(SegmentInfo *, VALUE);
1177
+ extern void Export_PrimaryInfo(PrimaryInfo *, VALUE);
1178
+ extern void Export_RectangleInfo(RectangleInfo *, VALUE);
1179
+ extern void Export_SegmentInfo(SegmentInfo *, VALUE);
1099
1180
  extern void Font_to_TypeInfo(TypeInfo *, VALUE);
1100
- extern void TypeMetric_to_TypeMetric(TypeMetric *, VALUE);
1101
- extern VALUE Font_from_TypeInfo(const TypeInfo *);
1181
+ extern void Export_TypeMetric(TypeMetric *, VALUE);
1182
+ extern VALUE Import_TypeInfo(const TypeInfo *);
1102
1183
  extern VALUE TypeMetric_to_s(VALUE);
1103
- extern VALUE TypeMetric_from_TypeMetric(TypeMetric *);
1184
+ extern VALUE Import_TypeMetric(TypeMetric *);
1104
1185
  extern const char *StorageType_name(StorageType);
1105
1186
  extern VALUE VirtualPixelMethod_new(VirtualPixelMethod);
1106
1187
  extern VALUE LAYERMETHODTYPE_NEW(LAYERMETHODTYPE);
1107
1188
 
1108
- extern VALUE Enum_alloc(VALUE);
1109
- extern VALUE Enum_initialize(VALUE, VALUE, VALUE);
1110
- extern VALUE Enum_to_s(VALUE);
1111
- extern VALUE Enum_to_i(VALUE);
1112
- extern VALUE Enum_spaceship(VALUE, VALUE);
1113
- extern VALUE Enum_case_eq(VALUE, VALUE);
1114
- extern VALUE Enum_type_initialize(VALUE, VALUE, VALUE);
1115
- extern VALUE Enum_type_each(VALUE);
1116
-
1117
1189
 
1190
+ // rmutil.c
1191
+ extern VALUE ImageMagickError_initialize(int, VALUE *, VALUE);
1118
1192
  extern void *magick_malloc(const size_t);
1119
1193
  extern void *magick_safe_malloc(const size_t, const size_t);
1120
1194
  extern void magick_free(void *);
1121
1195
  extern void *magick_realloc(void *, const size_t);
1122
1196
  extern void *magick_safe_realloc(void *, const size_t, const size_t);
1123
1197
  extern void magick_clone_string(char **, const char *);
1124
- extern VALUE rm_enum_new(VALUE, VALUE, VALUE);
1198
+ extern VALUE rm_cur_image(VALUE);
1199
+ extern VALUE rm_pixelpacket_to_color_name(Image *, PixelPacket *);
1200
+ extern VALUE rm_pixelpacket_to_color_name_info(Info *, PixelPacket *);
1125
1201
  extern VALUE rm_no_freeze(VALUE);
1126
1202
  extern int rm_strcasecmp(const char *, const char *);
1127
1203
  extern int rm_strncasecmp(const char *, const char *, size_t);