ext/RMagick/rmmain.c in rmagick-1.15.17 vs ext/RMagick/rmmain.c in rmagick-2.0.0
- old
+ new
@@ -1,8 +1,8 @@
-/* $Id: rmmain.c,v 1.159.2.2.2.3 2008/11/25 23:21:15 rmagick Exp $ */
+/* $Id: rmmain.c,v 1.228 2007/12/26 21:43:52 rmagick Exp $ */
/*============================================================================\
-| Copyright (C) 2008 by Timothy P. Hunter
+| Copyright (C) 2007 by Timothy P. Hunter
| Name: rmmain.c
| Author: Tim Hunter
| Purpose: Contains all module, class, method declarations.
| Defines all constants
| Contains Magick module methods.
@@ -19,12 +19,10 @@
static void test_Magick_version(void);
static void version_constants(void);
-#define MAGICK_MONITOR_CVAR "@@__rmagick_monitor__"
-static VALUE Magick_Monitor;
/*
Method: Magick::colors [ { |colorinfo| } ]
Purpose: If called with the optional block, iterates over the colors,
otherwise returns an array of Magick::Color objects
@@ -32,217 +30,82 @@
*/
VALUE
Magick_colors(VALUE class)
{
-#if defined(HAVE_GETCOLORINFOARRAY) // GraphicsMagick
- ColorInfo **color_ary;
- ExceptionInfo exception;
- volatile VALUE ary;
- int x;
-
- GetExceptionInfo(&exception);
-
- color_ary = GetColorInfoArray(&exception);
- CHECK_EXCEPTION()
- (void) DestroyExceptionInfo(&exception);
-
-
- if (rb_block_given_p())
- {
- x = 0;
- while(color_ary[x])
- {
- rb_yield(Color_from_ColorInfo(color_ary[x]));
- x += 1;
- }
- magick_free(color_ary);
- return class;
- }
- else
- {
- ary = rb_ary_new();
-
- x = 0;
- while (color_ary[x])
- {
- rb_ary_push(ary, Color_from_ColorInfo(color_ary[x]));
- x += 1;
- }
- magick_free(color_ary);
- return ary;
- }
-
-#elif defined(HAVE_GETCOLORINFOLIST) // ImageMagick 6.0.0
-
const ColorInfo **color_info_list;
unsigned long number_colors, x;
volatile VALUE ary;
-
-#if defined(HAVE_OLD_GETCOLORINFOLIST)
- color_info_list = GetColorInfoList("*", &number_colors);
-
-#else
- // IM 6.1.3 added an exception parm to GetColorInfoList
ExceptionInfo exception;
GetExceptionInfo(&exception);
color_info_list = GetColorInfoList("*", &number_colors, &exception);
CHECK_EXCEPTION()
(void) DestroyExceptionInfo(&exception);
-#endif
-
if (rb_block_given_p())
{
- for(x = 0; x < number_colors; x++)
+ for (x = 0; x < number_colors; x++)
{
(void) rb_yield(Color_from_ColorInfo(color_info_list[x]));
}
magick_free(color_info_list);
return class;
}
else
{
ary = rb_ary_new2((long) number_colors);
- for(x = 0; x < number_colors; x++)
+ for (x = 0; x < number_colors; x++)
{
(void) rb_ary_push(ary, Color_from_ColorInfo(color_info_list[x]));
}
magick_free(color_info_list);
return ary;
}
-
-#else // ImageMagick < 6.0.0
-
- const ColorInfo *color_list;
- ColorInfo *color;
- ExceptionInfo exception;
- volatile VALUE ary, el;
-
- GetExceptionInfo(&exception);
-
- color_list = GetColorInfo("*", &exception);
- (void) DestroyExceptionInfo(&exception);
-
- // The order of the colors list can change in mid-iteration,
- // so the only way we can guarantee a single pass thru the list
- // is to copy the elements into an array without returning to
- // IM. So, we always create a Ruby array and either return it
- // or iterate over it.
- ary = rb_ary_new();
- for (color = (ColorInfo *)color_list; color; color = color->next)
- {
- rb_ary_push(ary, Color_from_ColorInfo(color));
- }
-
- // If block, iterate over colors
- if (rb_block_given_p())
- {
- while ((el = rb_ary_shift(ary)) != Qnil)
- {
- rb_yield(el);
- }
- return class;
- }
- else
- {
- return ary;
- }
-
-#endif
}
/*
Method: Magick::fonts [ { |fontinfo| } ]
Purpose: If called with the optional block, iterates over the fonts,
otherwise returns an array of Magick::Font objects
*/
VALUE
Magick_fonts(VALUE class)
{
-#if defined(HAVE_GETTYPEINFOLIST) // ImageMagick 6.0.0
-
const TypeInfo **type_info;
unsigned long number_types, x;
volatile VALUE ary;
-
-#if defined(HAVE_OLD_GETTYPEINFOLIST)
- type_info = GetTypeInfoList("*", &number_types);
-
-#else
- // IM 6.1.3 added an exception argument to GetTypeInfoList
ExceptionInfo exception;
GetExceptionInfo(&exception);
type_info = GetTypeInfoList("*", &number_types, &exception);
CHECK_EXCEPTION()
(void) DestroyExceptionInfo(&exception);
-#endif
-
if (rb_block_given_p())
{
- for(x = 0; x < number_types; x++)
+ for (x = 0; x < number_types; x++)
{
(void) rb_yield(Font_from_TypeInfo((TypeInfo *)type_info[x]));
}
magick_free(type_info);
return class;
}
else
{
ary = rb_ary_new2((long)number_types);
- for(x = 0; x < number_types; x++)
+ for (x = 0; x < number_types; x++)
{
(void) rb_ary_push(ary, Font_from_TypeInfo((TypeInfo *)type_info[x]));
}
magick_free(type_info);
return ary;
}
-#else
-
- const TypeInfo *type_list;
- TypeInfo *type, *next;
- ExceptionInfo exception;
- volatile VALUE ary;
-
- GetExceptionInfo(&exception);
-
- type_list = GetTypeInfo("*", &exception);
- CHECK_EXCEPTION()
- (void) DestroyExceptionInfo(&exception);
-
- // If block, iterate over fonts
- if (rb_block_given_p())
- {
- for (type = (TypeInfo *)type_list; type; type = next)
- {
- next = type->next; // Protect against recursive calls to GetTypeInfo
- if (! type->stealth)
- {
- rb_yield(Font_from_TypeInfo(type));
- }
- }
-
- return class;
- }
- else
- {
- ary = rb_ary_new();
- for (type = (TypeInfo *)type_list; type; type = type->next)
- {
- rb_ary_push(ary, Font_from_TypeInfo(type));
- }
- return ary;
- }
-
-#endif
}
/*
Method: Magick.init_formats
@@ -273,88 +136,32 @@
}
VALUE
Magick_init_formats(VALUE class)
{
-#if defined(HAVE_GETMAGICKINFOARRAY) // GraphicsMagick
-
- MagickInfo *magick_info, *m;
- volatile VALUE formats;
- ExceptionInfo exception;
-
- class = class; // defeat "never referenced" message from icc
-
- formats = rb_hash_new();
-
- GetExceptionInfo(&exception);
- magick_info = (MagickInfo *)GetMagickInfoArray(&exception);
- CHECK_EXCEPTION()
- (void) DestroyExceptionInfo(&exception);
-
- for(m = magick_info; m != NULL; m = m->next)
- {
- rb_hash_aset(formats, rb_str_new2(m->name), MagickInfo_to_format(m));
- }
-
- magick_free(magick_info);
- return formats;
-
-#elif defined(HAVE_GETMAGICKINFOLIST) // ImageMagick 6.0.0
-
const MagickInfo **magick_info;
unsigned long number_formats, x;
volatile VALUE formats;
-#if !defined(HAVE_OLD_GETMAGICKINFOLIST)
ExceptionInfo exception;
-#endif
class = class; // defeat "never referenced" message from icc
formats = rb_hash_new();
-#if defined(HAVE_OLD_GETMAGICKINFOLIST)
- magick_info = GetMagickInfoList("*", &number_formats);
-
-#else
// IM 6.1.3 added an exception argument to GetMagickInfoList
GetExceptionInfo(&exception);
magick_info = GetMagickInfoList("*", &number_formats, &exception);
CHECK_EXCEPTION()
(void) DestroyExceptionInfo(&exception);
-#endif
- for(x = 0; x < number_formats; x++)
+ for (x = 0; x < number_formats; x++)
{
(void) rb_hash_aset(formats
- , rb_str_new2(magick_info[x]->name)
- , MagickInfo_to_format((MagickInfo *)magick_info[x]));
+ , rb_str_new2(magick_info[x]->name)
+ , MagickInfo_to_format((MagickInfo *)magick_info[x]));
}
return formats;
-
-#else
-
- MagickInfo *m;
- volatile VALUE formats;
- ExceptionInfo exception;
-
- class = class; // defeat "never referenced" message from icc
-
- formats = rb_hash_new();
-
- GetExceptionInfo(&exception);
- m = (MagickInfo *)GetMagickInfo("*", &exception);
- CHECK_EXCEPTION()
- (void) DestroyExceptionInfo(&exception);
-
- for ( ; m != NULL; m = m->next)
- {
- rb_hash_aset(formats, rb_str_new2(m->name), MagickInfo_to_format(m));
- }
-
- return formats;
-
-#endif
}
/*
Method: Magick.limit_resource(resource[, limit])
@@ -363,11 +170,10 @@
Notes: Don't support "AreaLimit" because GraphicsMagick doesn't support it.
*/
static VALUE
Magick_limit_resource(int argc, VALUE *argv, VALUE class)
{
-#if defined(HAVE_GETMAGICKRESOURCELIMIT)
volatile VALUE resource, limit;
ResourceType res = UndefinedResource;
char *str;
ID id;
unsigned long cur_limit;
@@ -402,11 +208,11 @@
rb_raise(rb_eArgError, "unknown resource: `:%s'", rb_id2name(id));
}
break;
default:
- str = STRING_PTR(resource);
+ str = StringValuePtr(resource);
if (*str == '\0')
{
return class;
}
else if (rm_strcasecmp("memory", str) == 0)
@@ -438,97 +244,20 @@
{
(void) SetMagickResourceLimit(res, NUM2ULONG(limit));
}
return ULONG2NUM(cur_limit);
-#else
- rm_not_implemented();
- return (VALUE)0;
-#endif
}
-/*
- This is the exit known to ImageMagick. Retrieve the monitor
- proc and call it, passing the 3 exit arguments.
-*/
-static unsigned int
-monitor_handler(
- const char *text,
- const magick_int64_t quantum,
- const magick_uint64_t span,
- ExceptionInfo *exception)
-{
- volatile VALUE monitor;
- volatile VALUE args[3];
- exception = exception; // defeat "never referenced" message from icc
-
- if (rb_cvar_defined(Module_Magick, Magick_Monitor) == Qtrue)
- {
- args[0] = rb_str_new2(text);
- // Convert these possibly-64-bit types to 32-bit types that
- // Ruby can handle.
- args[1] = INT2NUM((long) quantum);
- args[2] = UINT2NUM((unsigned long) span);
-
- monitor = rb_cvar_get(Module_Magick, Magick_Monitor);
- (void) rb_funcall2((VALUE)monitor, rm_ID_call, 3, (VALUE *)args);
- }
-
- return True;
-}
-
/*
- Method: Magick.set_monitor(&monitor)
- Purpose: Establish MagickMonitor exit
- Notes: use nil argument to turn off monitoring
-*/
-static VALUE
-Magick_set_monitor(VALUE class, VALUE monitor)
-{
-
- // 1st time: establish ID, define @@__MAGICK_MONITOR__
- // class variable, stow monitor VALUE in it.
- if (!Magick_Monitor)
- {
- Magick_Monitor = rb_intern(MAGICK_MONITOR_CVAR);
- rb_define_class_variable(Module_Magick, MAGICK_MONITOR_CVAR, monitor);
-
-#if defined(HAVE_SETIMAGEPROGRESSMONITOR)
- rb_warning("Magick.set_monitor is deprecated; use Image#monitor= or Image::Info#monitor= instead.");
-#endif
-
- }
-
- // If nil, turn off monitoring.
- if (monitor == Qnil)
- {
- (void) SetMonitorHandler(NULL);
- }
- else
- // Otherwise, store monitor in @@__MAGICK_MONITOR__
- {
- // 1.8.0 deletes rb_cvar_declare and adds another
- // parm to rb_cvar_set - if rb_cvar_declare is
- // available, use the 3-parm version of rb_cvar_set.
- RUBY18(rb_cvar_set(Module_Magick, Magick_Monitor, monitor, 0);)
- RUBY16(rb_cvar_set(Module_Magick, Magick_Monitor, monitor);)
- (void) SetMonitorHandler((MonitorHandler)&monitor_handler);
- }
-
- return class;
-}
-
-/*
Method Magick.set_cache_threshold(megabytes)
Purpose: sets the amount of free memory allocated for the
pixel cache. Once this threshold is exceeded, all
subsequent pixels cache operations are to/from disk.
Notes: singleton method
- Pre-5.5.1 this method called the SetCacheThreshold
- function, which is deprecated in 5.5.1.
*/
static VALUE
Magick_set_cache_threshold(VALUE class, VALUE threshold)
{
unsigned long thrshld = NUM2ULONG(threshold);
@@ -553,11 +282,11 @@
{
rb_raise(rb_eArgError, "wrong number of arguments (at least 1 required)");
}
for (x = 0; x < argc; x++)
{
- (void) SetLogEventMask(STRING_PTR(argv[x]));
+ (void) SetLogEventMask(StringValuePtr(argv[x]));
}
return class;
}
/*
@@ -575,37 +304,43 @@
Plus other characters, including \n, etc.
*/
static VALUE
Magick_set_log_format(VALUE class, VALUE format)
{
- SetLogFormat(STRING_PTR(format));
+ SetLogFormat(StringValuePtr(format));
return class;
}
/*
- External: Init_RMagick
+ External: Init_RMagick2
Purpose: define the classes and constants
Arguments: void
Returns: void
*/
void
-Init_RMagick(void)
+Init_RMagick2(void)
{
volatile VALUE observable;
+#if defined(HAVE_MagickCoreGenesis)
+ MagickCoreGenesis("RMagick", MagickFalse);
+#else
InitializeMagick("RMagick");
+#endif
+
test_Magick_version();
Module_Magick = rb_define_module("Magick");
/*-----------------------------------------------------------------------*/
/* Create IDs for frequently used methods, etc. */
/*-----------------------------------------------------------------------*/
+ rm_ID_trace_proc = rb_intern("@trace_proc");
rm_ID__dummy_img_ = rb_intern("_dummy_img_");
rm_ID_call = rb_intern("call");
rm_ID_changed = rb_intern("changed");
rm_ID_cur_image = rb_intern("cur_image");
rm_ID_dup = rb_intern("dup");
@@ -620,11 +355,12 @@
rm_ID_length = rb_intern("length");
rm_ID_notify_observers = rb_intern("notify_observers");
rm_ID_new = rb_intern("new");
rm_ID_push = rb_intern("push");
rm_ID_spaceship = rb_intern("<=>");
- rm_ID__tmpnam_ = rb_intern("@@_tmpnam_");
+ rm_ID__tmpnam_ = rb_intern("_tmpnam_");
+ rm_ID_to_i = rb_intern("to_i");
rm_ID_to_s = rb_intern("to_s");
rm_ID_values = rb_intern("values");
rm_ID_width = rb_intern("width");
rm_ID_x = rb_intern("x");
rm_ID_y = rb_intern("y");
@@ -635,11 +371,10 @@
rb_define_module_function(Module_Magick, "colors", Magick_colors, 0);
rb_define_module_function(Module_Magick, "fonts", Magick_fonts, 0);
rb_define_module_function(Module_Magick, "init_formats", Magick_init_formats, 0);
rb_define_module_function(Module_Magick, "limit_resource", Magick_limit_resource, -1);
- rb_define_module_function(Module_Magick, "set_monitor", Magick_set_monitor, 1);
rb_define_module_function(Module_Magick, "set_cache_threshold", Magick_set_cache_threshold, 1);
rb_define_module_function(Module_Magick, "set_log_event_mask", Magick_set_log_event_mask, -1);
rb_define_module_function(Module_Magick, "set_log_format", Magick_set_log_format, 1);
/*-----------------------------------------------------------------------*/
@@ -649,26 +384,23 @@
Class_Image = rb_define_class_under(Module_Magick, "Image", rb_cObject);
// Define an alias for Object#display before we override it
rb_define_alias(Class_Image, "__display__", "display");
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_Image, Image_alloc);
rb_define_method(Class_Image, "initialize", Image_initialize, -1);
-#else
- rb_define_singleton_method(Class_Image, "new", Image_new, -1);
- rb_define_method(Class_Image, "initialize", Image_initialize, 4);
-#endif
+ rb_define_singleton_method(Class_Image, "combine", Image_combine, -1);
rb_define_singleton_method(Class_Image, "constitute", Image_constitute, 4);
rb_define_singleton_method(Class_Image, "_load", Image__load, 1);
rb_define_singleton_method(Class_Image, "capture", Image_capture, -1);
rb_define_singleton_method(Class_Image, "ping", Image_ping, 1);
rb_define_singleton_method(Class_Image, "read", Image_read, 1);
rb_define_singleton_method(Class_Image, "read_inline", Image_read_inline, 1);
rb_define_singleton_method(Class_Image, "from_blob", Image_from_blob, 1);
+ DCL_ATTR_WRITER(Image, alpha)
DCL_ATTR_ACCESSOR(Image, background_color)
DCL_ATTR_READER(Image, base_columns)
DCL_ATTR_READER(Image, base_filename)
DCL_ATTR_READER(Image, base_rows)
DCL_ATTR_ACCESSOR(Image, bias)
@@ -695,40 +427,38 @@
DCL_ATTR_ACCESSOR(Image, filter)
DCL_ATTR_ACCESSOR(Image, format)
DCL_ATTR_ACCESSOR(Image, fuzz)
DCL_ATTR_ACCESSOR(Image, gamma)
DCL_ATTR_ACCESSOR(Image, geometry)
- DCL_ATTR_ACCESSOR(Image, image_type)
+ DCL_ATTR_ACCESSOR(Image, gravity)
+ DCL_ATTR_READER(Image, image_type)
DCL_ATTR_ACCESSOR(Image, interlace)
DCL_ATTR_ACCESSOR(Image, iptc_profile)
DCL_ATTR_ACCESSOR(Image, iterations) // do not document! Only used by Image#iterations=
DCL_ATTR_ACCESSOR(Image, mask)
DCL_ATTR_ACCESSOR(Image, matte)
DCL_ATTR_ACCESSOR(Image, matte_color)
DCL_ATTR_READER(Image, mean_error_per_pixel)
DCL_ATTR_READER(Image, mime_type)
DCL_ATTR_WRITER(Image, monitor)
- DCL_ATTR_ACCESSOR(Image, montage)
+ DCL_ATTR_READER(Image, montage)
DCL_ATTR_READER(Image, normalized_mean_error)
DCL_ATTR_READER(Image, normalized_maximum_error)
DCL_ATTR_READER(Image, number_colors)
DCL_ATTR_ACCESSOR(Image, offset)
DCL_ATTR_WRITER(Image, opacity)
DCL_ATTR_ACCESSOR(Image, orientation)
DCL_ATTR_ACCESSOR(Image, page)
DCL_ATTR_ACCESSOR(Image, pixel_interpolation_method)
-#if defined(HAVE_IMAGE_QUALITY)
DCL_ATTR_READER(Image, quality)
-#endif
DCL_ATTR_READER(Image, quantum_depth)
DCL_ATTR_ACCESSOR(Image, rendering_intent)
DCL_ATTR_READER(Image, rows)
DCL_ATTR_READER(Image, scene)
DCL_ATTR_ACCESSOR(Image, start_loop)
DCL_ATTR_ACCESSOR(Image, class_type)
DCL_ATTR_ACCESSOR(Image, ticks_per_second)
- DCL_ATTR_ACCESSOR(Image, tile_info)
DCL_ATTR_READER(Image, total_colors)
DCL_ATTR_ACCESSOR(Image, transparent_color)
DCL_ATTR_ACCESSOR(Image, units)
DCL_ATTR_ACCESSOR(Image, virtual_pixel_method)
DCL_ATTR_ACCESSOR(Image, x_resolution)
@@ -760,17 +490,18 @@
rb_define_method(Class_Image, "change_geometry!", Image_change_geometry, 1);
rb_define_method(Class_Image, "changed?", Image_changed_q, 0);
rb_define_method(Class_Image, "channel", Image_channel, 1);
// An alias for compare_channel
rb_define_method(Class_Image, "channel_compare", Image_compare_channel, -1);
+ rb_define_method(Class_Image, "check_destroyed", Image_check_destroyed, 0);
rb_define_method(Class_Image, "compare_channel", Image_compare_channel, -1);
rb_define_method(Class_Image, "channel_depth", Image_channel_depth, -1);
rb_define_method(Class_Image, "channel_extrema", Image_channel_extrema, -1);
rb_define_method(Class_Image, "channel_mean", Image_channel_mean, -1);
- rb_define_method(Class_Image, "channel_threshold", Image_channel_threshold, -1);
rb_define_method(Class_Image, "charcoal", Image_charcoal, -1);
rb_define_method(Class_Image, "chop", Image_chop, 4);
+ rb_define_method(Class_Image, "clut_channel", Image_clut_channel, -1);
rb_define_method(Class_Image, "clone", Image_clone, 0);
rb_define_method(Class_Image, "color_flood_fill", Image_color_flood_fill, 5);
rb_define_method(Class_Image, "color_histogram", Image_color_histogram, 0);
rb_define_method(Class_Image, "colorize", Image_colorize, -1);
rb_define_method(Class_Image, "colormap", Image_colormap, -1);
@@ -788,26 +519,33 @@
rb_define_method(Class_Image, "crop", Image_crop, -1);
rb_define_method(Class_Image, "crop!", Image_crop_bang, -1);
rb_define_method(Class_Image, "cycle_colormap", Image_cycle_colormap, 1);
rb_define_method(Class_Image, "delete_profile", Image_delete_profile, 1);
rb_define_method(Class_Image, "despeckle", Image_despeckle, 0);
+ rb_define_method(Class_Image, "destroy!", Image_destroy_bang, 0);
+ rb_define_method(Class_Image, "destroyed?", Image_destroyed_q, 0);
rb_define_method(Class_Image, "difference", Image_difference, 1);
rb_define_method(Class_Image, "dispatch", Image_dispatch, -1);
rb_define_method(Class_Image, "displace", Image_displace, -1);
rb_define_method(Class_Image, "display", Image_display, 0);
rb_define_method(Class_Image, "dissolve", Image_dissolve, -1);
+ rb_define_method(Class_Image, "distort", Image_distort, -1);
rb_define_method(Class_Image, "distortion_channel", Image_distortion_channel, -1);
rb_define_method(Class_Image, "_dump", Image__dump, 1);
rb_define_method(Class_Image, "dup", Image_dup, 0);
rb_define_method(Class_Image, "each_profile", Image_each_profile, 0);
rb_define_method(Class_Image, "edge", Image_edge, -1);
rb_define_method(Class_Image, "emboss", Image_emboss, -1);
rb_define_method(Class_Image, "enhance", Image_enhance, 0);
rb_define_method(Class_Image, "equalize", Image_equalize, 0);
+ rb_define_method(Class_Image, "equalize_channel", Image_equalize_channel, -1);
rb_define_method(Class_Image, "erase!", Image_erase_bang, 0);
+ rb_define_method(Class_Image, "excerpt", Image_excerpt, 4);
+ rb_define_method(Class_Image, "excerpt!", Image_excerpt_bang, 4);
rb_define_method(Class_Image, "export_pixels", Image_export_pixels, -1);
rb_define_method(Class_Image, "export_pixels_to_str", Image_export_pixels_to_str, -1);
+ rb_define_method(Class_Image, "extent", Image_extent, -1);
rb_define_method(Class_Image, "find_similar_region", Image_find_similar_region, -1);
rb_define_method(Class_Image, "flip", Image_flip, 0);
rb_define_method(Class_Image, "flip!", Image_flip_bang, 0);
rb_define_method(Class_Image, "flop", Image_flop, 0);
rb_define_method(Class_Image, "flop!", Image_flop_bang, 0);
@@ -817,11 +555,11 @@
rb_define_method(Class_Image, "gaussian_blur", Image_gaussian_blur, -1);
rb_define_method(Class_Image, "gaussian_blur_channel", Image_gaussian_blur_channel, -1);
rb_define_method(Class_Image, "get_pixels", Image_get_pixels, 4);
rb_define_method(Class_Image, "gray?", Image_gray_q, 0);
rb_define_method(Class_Image, "grey?", Image_gray_q, 0);
- rb_define_method(Class_Image, "grayscale_pseudo_class", Image_grayscale_pseudo_class, -1);
+ rb_define_method(Class_Image, "histogram?", Image_histogram_q, 0);
rb_define_method(Class_Image, "implode", Image_implode, -1);
rb_define_method(Class_Image, "import_pixels", Image_import_pixels, -1);
rb_define_method(Class_Image, "initialize_copy", Image_init_copy, 1);
rb_define_method(Class_Image, "inspect", Image_inspect, 0);
rb_define_method(Class_Image, "level2", Image_level2, -1);
@@ -855,11 +593,10 @@
rb_define_method(Class_Image, "quantize", Image_quantize, -1);
rb_define_method(Class_Image, "quantum_operator", Image_quantum_operator, -1);
rb_define_method(Class_Image, "radial_blur", Image_radial_blur, 1);
rb_define_method(Class_Image, "radial_blur_channel", Image_radial_blur_channel, -1);
rb_define_method(Class_Image, "raise", Image_raise, -1);
- rb_define_method(Class_Image, "random_channel_threshold", Image_random_channel_threshold, 2);
rb_define_method(Class_Image, "random_threshold_channel", Image_random_threshold_channel, -1);
rb_define_method(Class_Image, "recolor", Image_recolor, 1);
rb_define_method(Class_Image, "reduce_noise", Image_reduce_noise, 1);
rb_define_method(Class_Image, "resize", Image_resize, -1);
rb_define_method(Class_Image, "resize!", Image_resize_bang, -1);
@@ -869,10 +606,11 @@
rb_define_method(Class_Image, "sample", Image_sample, -1);
rb_define_method(Class_Image, "sample!", Image_sample_bang, -1);
rb_define_method(Class_Image, "scale", Image_scale, -1);
rb_define_method(Class_Image, "scale!", Image_scale_bang, -1);
rb_define_method(Class_Image, "segment", Image_segment, -1);
+ rb_define_method(Class_Image, "separate", Image_separate, -1);
rb_define_method(Class_Image, "sepiatone", Image_sepiatone, -1);
rb_define_method(Class_Image, "set_channel_depth", Image_set_channel_depth, 2);
rb_define_method(Class_Image, "shade", Image_shade, -1);
rb_define_method(Class_Image, "shadow", Image_shadow, -1);
rb_define_method(Class_Image, "sharpen", Image_sharpen, -1);
@@ -885,16 +623,16 @@
rb_define_method(Class_Image, "sketch", Image_sketch, -1);
rb_define_method(Class_Image, "solarize", Image_solarize, -1);
rb_define_method(Class_Image, "<=>", Image_spaceship, 1);
rb_define_method(Class_Image, "splice", Image_splice, -1);
rb_define_method(Class_Image, "spread", Image_spread, -1);
- rb_define_method(Class_Image, "statistics", Image_statistics, 0);
rb_define_method(Class_Image, "stegano", Image_stegano, 2);
rb_define_method(Class_Image, "stereo", Image_stereo, 1);
rb_define_method(Class_Image, "strip!", Image_strip_bang, 0);
rb_define_method(Class_Image, "store_pixels", Image_store_pixels, 5);
rb_define_method(Class_Image, "swirl", Image_swirl, 1);
+ rb_define_method(Class_Image, "sync_profiles", Image_sync_profiles, 0);
rb_define_method(Class_Image, "texture_flood_fill", Image_texture_flood_fill, 5);
rb_define_method(Class_Image, "threshold", Image_threshold, 1);
rb_define_method(Class_Image, "thumbnail", Image_thumbnail, -1);
rb_define_method(Class_Image, "thumbnail!", Image_thumbnail_bang, -1);
rb_define_method(Class_Image, "tint", Image_tint, -1);
@@ -903,12 +641,12 @@
rb_define_method(Class_Image, "transparent", Image_transparent, -1);
rb_define_method(Class_Image, "transpose", Image_transpose, 0);
rb_define_method(Class_Image, "transpose!", Image_transpose_bang, 0);
rb_define_method(Class_Image, "transverse", Image_transverse, 0);
rb_define_method(Class_Image, "transverse!", Image_transverse_bang, 0);
- rb_define_method(Class_Image, "trim", Image_trim, 0);
- rb_define_method(Class_Image, "trim!", Image_trim_bang, 0);
+ rb_define_method(Class_Image, "trim", Image_trim, -1);
+ rb_define_method(Class_Image, "trim!", Image_trim_bang, -1);
rb_define_method(Class_Image, "unique_colors", Image_unique_colors, 0);
rb_define_method(Class_Image, "unsharp_mask", Image_unsharp_mask, -1);
rb_define_method(Class_Image, "unsharp_mask_channel", Image_unsharp_mask_channel, -1);
rb_define_method(Class_Image, "vignette", Image_vignette, -1);
rb_define_method(Class_Image, "watermark", Image_watermark, -1);
@@ -919,22 +657,19 @@
/*-----------------------------------------------------------------------*/
/* Class Magick::ImageList methods (see also RMagick.rb) */
/*-----------------------------------------------------------------------*/
- Class_ImageList = rb_define_class_under(Module_Magick, "ImageList", rb_cArray);
+ Class_ImageList = rb_define_class_under(Module_Magick, "ImageList", rb_cObject);
// Define an alias for Object#display before we override it
rb_define_alias(Class_ImageList, "__display__", "display");
-
- // Define an alias for Array's "map" method.
- rb_define_alias(Class_ImageList, "__ary_map__", "map");
-
rb_define_method(Class_ImageList, "animate", ImageList_animate, -1);
rb_define_method(Class_ImageList, "append", ImageList_append, 1);
rb_define_method(Class_ImageList, "average", ImageList_average, 0);
rb_define_method(Class_ImageList, "coalesce", ImageList_coalesce, 0);
+ rb_define_method(Class_ImageList, "composite_layers", ImageList_composite_layers, -1);
rb_define_method(Class_ImageList, "deconstruct", ImageList_deconstruct, 0);
rb_define_method(Class_ImageList, "display", ImageList_display, 0);
rb_define_method(Class_ImageList, "flatten_images", ImageList_flatten_images, 0);
rb_define_method(Class_ImageList, "fx", ImageList_fx, -1);
rb_define_method(Class_ImageList, "map", ImageList_map, -1);
@@ -949,31 +684,29 @@
/*-----------------------------------------------------------------------*/
/* Class Magick::Draw methods */
/*-----------------------------------------------------------------------*/
Class_Draw = rb_define_class_under(Module_Magick, "Draw", rb_cObject);
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_Draw, Draw_alloc);
-#else
- rb_define_singleton_method(Class_Draw, "new", Draw_new, 0);
-#endif
DCL_ATTR_WRITER(Draw, affine)
DCL_ATTR_WRITER(Draw, align)
DCL_ATTR_WRITER(Draw, decorate)
DCL_ATTR_WRITER(Draw, density)
DCL_ATTR_WRITER(Draw, encoding)
DCL_ATTR_WRITER(Draw, fill)
+ DCL_ATTR_WRITER(Draw, fill_pattern)
DCL_ATTR_WRITER(Draw, font)
DCL_ATTR_WRITER(Draw, font_family)
DCL_ATTR_WRITER(Draw, font_stretch)
DCL_ATTR_WRITER(Draw, font_style)
DCL_ATTR_WRITER(Draw, font_weight)
DCL_ATTR_WRITER(Draw, gravity)
DCL_ATTR_WRITER(Draw, pointsize)
DCL_ATTR_WRITER(Draw, rotation)
DCL_ATTR_WRITER(Draw, stroke)
+ DCL_ATTR_WRITER(Draw, stroke_pattern)
DCL_ATTR_WRITER(Draw, stroke_width)
DCL_ATTR_WRITER(Draw, text_antialias)
DCL_ATTR_WRITER(Draw, tile)
DCL_ATTR_WRITER(Draw, undercolor)
@@ -995,33 +728,31 @@
/* to the block associated with the Draw.new method call. */
/*-----------------------------------------------------------------------*/
Class_DrawOptions = rb_define_class_under(Class_Image, "DrawOptions", rb_cObject);
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_DrawOptions, DrawOptions_alloc);
-#else
- rb_define_singleton_method(Class_DrawOptions, "new", DrawOptions_new, 0);
-#endif
rb_define_method(Class_DrawOptions, "initialize", DrawOptions_initialize, 0);
SHARE_ATTR_WRITER(DrawOptions, Draw, affine)
SHARE_ATTR_WRITER(DrawOptions, Draw, align)
SHARE_ATTR_WRITER(DrawOptions, Draw, decorate)
SHARE_ATTR_WRITER(DrawOptions, Draw, density)
SHARE_ATTR_WRITER(DrawOptions, Draw, encoding)
SHARE_ATTR_WRITER(DrawOptions, Draw, fill)
+ SHARE_ATTR_WRITER(DrawOptions, Draw, fill_pattern)
SHARE_ATTR_WRITER(DrawOptions, Draw, font)
SHARE_ATTR_WRITER(DrawOptions, Draw, font_family)
SHARE_ATTR_WRITER(DrawOptions, Draw, font_stretch)
SHARE_ATTR_WRITER(DrawOptions, Draw, font_style)
SHARE_ATTR_WRITER(DrawOptions, Draw, font_weight)
SHARE_ATTR_WRITER(DrawOptions, Draw, gravity)
SHARE_ATTR_WRITER(DrawOptions, Draw, pointsize)
SHARE_ATTR_WRITER(DrawOptions, Draw, rotation)
SHARE_ATTR_WRITER(DrawOptions, Draw, stroke)
+ SHARE_ATTR_WRITER(DrawOptions, Draw, stroke_pattern)
SHARE_ATTR_WRITER(DrawOptions, Draw, stroke_width)
SHARE_ATTR_WRITER(DrawOptions, Draw, text_antialias)
SHARE_ATTR_WRITER(DrawOptions, Draw, tile)
SHARE_ATTR_WRITER(DrawOptions, Draw, undercolor)
@@ -1038,15 +769,11 @@
// include Comparable
rb_include_module(Class_Pixel, rb_mComparable);
// Magick::Pixel has 3 constructors: "new" "from_color", and "from_HSL".
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_Pixel, Pixel_alloc);
-#else
- rb_define_singleton_method(Class_Pixel, "new", Pixel_new, -1);
-#endif
rb_define_singleton_method(Class_Pixel, "from_color", Pixel_from_color, 1);
rb_define_singleton_method(Class_Pixel, "from_HSL", Pixel_from_HSL, 1);
// Define the RGBA attributes
DCL_ATTR_ACCESSOR(Pixel, red)
@@ -1080,15 +807,11 @@
/* Class Magick::ImageList::Montage methods */
/*-----------------------------------------------------------------------*/
Class_Montage = rb_define_class_under(Class_ImageList, "Montage", rb_cObject);
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_Montage, Montage_alloc);
-#else
- rb_define_singleton_method(Class_Montage, "new", Montage_new, 0);
-#endif
rb_define_method(Class_Montage, "initialize", Montage_initialize, 0);
rb_define_method(Class_Montage, "freeze", rm_no_freeze, 0);
// These accessors supply optional arguments for Magick::ImageList::Montage.new
@@ -1114,97 +837,94 @@
/* Class Magick::Image::Info */
/*-----------------------------------------------------------------------*/
Class_Info = rb_define_class_under(Class_Image, "Info", rb_cObject);
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_Info, Info_alloc);
-#else
- rb_define_singleton_method(Class_Info, "new", Info_new, 0);
-#endif
rb_define_method(Class_Info, "initialize", Info_initialize, 0);
rb_define_method(Class_Info, "channel", Info_channel, -1);
rb_define_method(Class_Info, "freeze", rm_no_freeze, 0);
rb_define_method(Class_Info, "define", Info_define, -1);
- rb_define_method(Class_Info, "[]=", Info_aset, 3);
- rb_define_method(Class_Info, "[]", Info_aref, 2);
+ rb_define_method(Class_Info, "[]=", Info_aset, -1);
+ rb_define_method(Class_Info, "[]", Info_aref, -1);
rb_define_method(Class_Info, "undefine", Info_undefine, 2);
DCL_ATTR_ACCESSOR(Info, antialias)
+ DCL_ATTR_ACCESSOR(Info, attenuate)
DCL_ATTR_ACCESSOR(Info, authenticate)
DCL_ATTR_ACCESSOR(Info, background_color)
DCL_ATTR_ACCESSOR(Info, border_color)
DCL_ATTR_ACCESSOR(Info, colorspace)
- DCL_ATTR_ACCESSOR(Info, comment) // new in 6.0.0
+ DCL_ATTR_ACCESSOR(Info, comment)
DCL_ATTR_ACCESSOR(Info, compression)
- DCL_ATTR_ACCESSOR(Info, delay) // new in 6.0.0
+ DCL_ATTR_ACCESSOR(Info, delay)
DCL_ATTR_ACCESSOR(Info, density)
DCL_ATTR_ACCESSOR(Info, depth)
- DCL_ATTR_ACCESSOR(Info, dispose) // new in 6.0.0
+ DCL_ATTR_ACCESSOR(Info, dispose)
DCL_ATTR_ACCESSOR(Info, dither)
- DCL_ATTR_ACCESSOR(Info, extract) // new in 5.5.6, replaces tile
+ DCL_ATTR_ACCESSOR(Info, extract)
DCL_ATTR_ACCESSOR(Info, filename)
DCL_ATTR_ACCESSOR(Info, fill)
DCL_ATTR_ACCESSOR(Info, font)
DCL_ATTR_ACCESSOR(Info, format)
DCL_ATTR_ACCESSOR(Info, fuzz)
DCL_ATTR_ACCESSOR(Info, gravity)
DCL_ATTR_ACCESSOR(Info, group)
+ DCL_ATTR_ACCESSOR(Info, image_type)
DCL_ATTR_ACCESSOR(Info, interlace)
- DCL_ATTR_ACCESSOR(Info, label) // new in 6.0.0
+ DCL_ATTR_ACCESSOR(Info, label)
DCL_ATTR_ACCESSOR(Info, matte_color)
DCL_ATTR_WRITER(Info, monitor)
DCL_ATTR_ACCESSOR(Info, monochrome)
- DCL_ATTR_ACCESSOR(Info, number_scenes) // new in 5.5.6, replaces subrange
- DCL_ATTR_ACCESSOR(Info, orientation) // new in 6.0.0
+ DCL_ATTR_ACCESSOR(Info, number_scenes)
+ DCL_ATTR_ACCESSOR(Info, orientation)
DCL_ATTR_ACCESSOR(Info, origin) // new in 6.3.1
DCL_ATTR_ACCESSOR(Info, page)
DCL_ATTR_ACCESSOR(Info, pointsize)
DCL_ATTR_ACCESSOR(Info, quality)
DCL_ATTR_ACCESSOR(Info, sampling_factor)
- DCL_ATTR_ACCESSOR(Info, scene) // new in 5.5.6, replaces subimage
+ DCL_ATTR_ACCESSOR(Info, scene)
DCL_ATTR_ACCESSOR(Info, server_name)
DCL_ATTR_ACCESSOR(Info, size)
- DCL_ATTR_ACCESSOR(Info, subimage) // deprecated >=5.5.6, replaced by scene
- DCL_ATTR_ACCESSOR(Info, subrange) // deprecated >=5.5.6, replaced by number_scenes
+ DCL_ATTR_ACCESSOR(Info, stroke)
+ DCL_ATTR_ACCESSOR(Info, stroke_width)
DCL_ATTR_WRITER(Info, texture)
- DCL_ATTR_ACCESSOR(Info, tile) // deprecated >=5.5.6, replaced by extract and scenes
- DCL_ATTR_ACCESSOR(Info, image_type)
+ DCL_ATTR_ACCESSOR(Info, tile_offset)
+ DCL_ATTR_ACCESSOR(Info, undercolor)
DCL_ATTR_ACCESSOR(Info, units)
DCL_ATTR_ACCESSOR(Info, view)
/*-----------------------------------------------------------------------*/
/* Class Magick::Image::PolaroidOptions */
/*-----------------------------------------------------------------------*/
Class_PolaroidOptions = rb_define_class_under(Class_Image, "PolaroidOptions", rb_cObject);
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_PolaroidOptions, PolaroidOptions_alloc);
-#else
- rb_define_singleton_method(Class_PolaroidOptions, "new", PolaroidOptions_new, 0);
-#endif
rb_define_method(Class_PolaroidOptions, "initialize", PolaroidOptions_initialize, 0);
DCL_ATTR_WRITER(PolaroidOptions, shadow_color)
+ DCL_ATTR_WRITER(PolaroidOptions, border_color)
// The other attribute writer methods are implemented by Draw's functions
SHARE_ATTR_WRITER(PolaroidOptions, Draw, align)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, decorate)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, density)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, encoding)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, fill)
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, fill_pattern)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, font)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_family)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_stretch)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_style)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_weight)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, gravity)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, pointsize)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke)
+ SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke_pattern)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke_width)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, text_antialias)
SHARE_ATTR_WRITER(PolaroidOptions, Draw, undercolor)
@@ -1213,64 +933,56 @@
/*-----------------------------------------------------------------------*/
// class Magick::GradientFill
Class_GradientFill = rb_define_class_under(Module_Magick, "GradientFill", rb_cObject);
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_GradientFill, GradientFill_alloc);
-#else
- rb_define_singleton_method(Class_GradientFill, "new", GradientFill_new, 6);
-#endif
rb_define_method(Class_GradientFill, "initialize", GradientFill_initialize, 6);
rb_define_method(Class_GradientFill, "fill", GradientFill_fill, 1);
// class Magick::TextureFill
Class_TextureFill = rb_define_class_under(Module_Magick, "TextureFill", rb_cObject);
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_TextureFill, TextureFill_alloc);
-#else
- rb_define_singleton_method(Class_TextureFill, "new", TextureFill_new, 1);
-#endif
rb_define_method(Class_TextureFill, "initialize", TextureFill_initialize, 1);
rb_define_method(Class_TextureFill, "fill", TextureFill_fill, 1);
/*-----------------------------------------------------------------------*/
/* Class Magick::ImageMagickError < StandardError */
/*-----------------------------------------------------------------------*/
Class_ImageMagickError = rb_define_class_under(Module_Magick, "ImageMagickError", rb_eStandardError);
rb_define_method(Class_ImageMagickError, "initialize", ImageMagickError_initialize, -1);
- RUBY16(rb_enable_super(Class_ImageMagickError, "initialize");)
rb_define_attr(Class_ImageMagickError, MAGICK_LOC, True, False);
- // Miscellaneous constants
- rb_define_const(Module_Magick, "MaxRGB", INT2FIX(MaxRGB));
- rb_define_const(Module_Magick, "QuantumDepth", INT2FIX(QuantumDepth));
+ /*-----------------------------------------------------------------------*/
+ /* Class Magick::DestroyedImageError < StandardError */
+ /*-----------------------------------------------------------------------*/
+ Class_DestroyedImageError = rb_define_class_under(Module_Magick, "DestroyedImageError", rb_eStandardError);
- version_constants();
- // Opacity constants
+ // Miscellaneous fixed-point constants
+ DEF_CONST(MaxRGB);
+ DEF_CONST(QuantumRange);
+ DEF_CONST(QuantumDepth);
DEF_CONST(OpaqueOpacity);
DEF_CONST(TransparentOpacity);
+ version_constants();
+
/*-----------------------------------------------------------------------*/
/* Class Magick::Enum */
/*-----------------------------------------------------------------------*/
// includes Comparable
Class_Enum = rb_define_class_under(Module_Magick, "Enum", rb_cObject);
rb_include_module(Class_Enum, rb_mComparable);
-#if defined(HAVE_RB_DEFINE_ALLOC_FUNC)
rb_define_alloc_func(Class_Enum, Enum_alloc);
-#else
- rb_define_singleton_method(Class_Enum, "new", Enum_new, 2);
-#endif
rb_define_method(Class_Enum, "initialize", Enum_initialize, 2);
rb_define_method(Class_Enum, "to_s", Enum_to_s, 0);
rb_define_method(Class_Enum, "to_i", Enum_to_i, 0);
rb_define_method(Class_Enum, "<=>", Enum_spaceship, 1);
@@ -1282,10 +994,21 @@
ENUMERATOR(LeftAlign)
ENUMERATOR(CenterAlign)
ENUMERATOR(RightAlign)
END_ENUM
+ // AlphaChannelType constants
+#if defined(HAVE_TYPE_ALPHACHANNELTYPE)
+ DEF_ENUM(AlphaChannelType)
+ ENUMERATOR(UndefinedAlphaChannel)
+ ENUMERATOR(ActivateAlphaChannel)
+ ENUMERATOR(DeactivateAlphaChannel)
+ ENUMERATOR(ResetAlphaChannel)
+ ENUMERATOR(SetAlphaChannel)
+ END_ENUM
+#endif
+
// AnchorType constants (for Draw#text_anchor - these are not defined by ImageMagick)
DEF_ENUM(AnchorType)
ENUMERATOR(StartAnchor)
ENUMERATOR(MiddleAnchor)
ENUMERATOR(EndAnchor)
@@ -1303,19 +1026,13 @@
ENUMERATOR(OpacityChannel)
ENUMERATOR(BlackChannel)
ENUMERATOR(MatteChannel)
-#if defined(HAVE_INDEXCHANNEL)
- ENUMERATOR(IndexChannel) // 5.5.8
-#endif
-#if defined(HAVE_GRAYCHANNEL)
+ ENUMERATOR(IndexChannel)
ENUMERATOR(GrayChannel)
-#endif
-#if defined(HAVE_ALLCHANNELS)
ENUMERATOR(AllChannels)
-#endif
// Define alternate names for ChannelType enums for Image::Info#channel=
// AlphaChannel == OpacityChannel
_enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("AlphaChannel")), INT2FIX(OpacityChannel));
rb_define_const(Module_Magick, "AlphaChannel", _enum);
@@ -1364,34 +1081,17 @@
, rm_enum_new(Class_ColorspaceType
, ID2SYM(rb_intern("SRGBColorspace"))
, INT2FIX(sRGBColorspace)));
ENUMERATOR(HSLColorspace)
ENUMERATOR(HWBColorspace)
-#if defined(HAVE_HSBCOLORSPACE)
- ENUMERATOR(HSBColorspace) // IM 6.0.0
-#endif
-#if defined(HAVE_CINEONLOGRGBCOLORSPACE)
- ENUMERATOR(CineonLogRGBColorspace) // GM 1.2
-#endif
-#if defined(HAVE_LABCOLORSPACE)
- ENUMERATOR(LABColorspace) // GM 1.2
-#endif
-#if defined(HAVE_REC601LUMACOLORSPACE)
- ENUMERATOR(Rec601LumaColorspace) // GM 1.2 && IM 6.2.2
-#endif
-#if defined(HAVE_REC601YCBCRCOLORSPACE)
- ENUMERATOR(Rec601YCbCrColorspace) // GM 1.2 && IM 6.2.2
-#endif
-#if defined(HAVE_REC709LUMACOLORSPACE)
- ENUMERATOR(Rec709LumaColorspace) // GM 1.2 && IM 6.2.2
-#endif
-#if defined(HAVE_REC709YCBCRCOLORSPACE)
- ENUMERATOR(Rec709YCbCrColorspace) // GM 1.2 && IM 6.2.2
-#endif
-#if defined(HAVE_LOGCOLORSPACE)
- ENUMERATOR(LogColorspace) // IM 6.2.3
-#endif
+ ENUMERATOR(HSBColorspace)
+ ENUMERATOR(LABColorspace)
+ ENUMERATOR(Rec601LumaColorspace)
+ ENUMERATOR(Rec601YCbCrColorspace)
+ ENUMERATOR(Rec709LumaColorspace)
+ ENUMERATOR(Rec709YCbCrColorspace)
+ ENUMERATOR(LogColorspace)
END_ENUM
// ComplianceType constants are defined as enums but used as bit flags
DEF_ENUM(ComplianceType)
ENUMERATOR(UndefinedCompliance)
@@ -1412,85 +1112,82 @@
DEF_ENUM(CompositeOperator)
ENUMERATOR(UndefinedCompositeOp)
ENUMERATOR(NoCompositeOp)
ENUMERATOR(AddCompositeOp)
ENUMERATOR(AtopCompositeOp)
+ ENUMERATOR(BlendCompositeOp)
ENUMERATOR(BumpmapCompositeOp)
+#if defined(HAVE_ENUM_CHANGEMASKCOMPOSITEOP)
+ ENUMERATOR(ChangeMaskCompositeOp)
+#endif
ENUMERATOR(ClearCompositeOp)
+ ENUMERATOR(ColorBurnCompositeOp)
+ ENUMERATOR(ColorDodgeCompositeOp)
ENUMERATOR(ColorizeCompositeOp)
+ ENUMERATOR(CopyBlackCompositeOp)
ENUMERATOR(CopyBlueCompositeOp)
ENUMERATOR(CopyCompositeOp)
+ ENUMERATOR(CopyCyanCompositeOp)
ENUMERATOR(CopyGreenCompositeOp)
+ ENUMERATOR(CopyMagentaCompositeOp)
ENUMERATOR(CopyOpacityCompositeOp)
ENUMERATOR(CopyRedCompositeOp)
- ENUMERATOR(CopyCyanCompositeOp)
- ENUMERATOR(CopyMagentaCompositeOp)
ENUMERATOR(CopyYellowCompositeOp)
- ENUMERATOR(CopyBlackCompositeOp)
ENUMERATOR(DarkenCompositeOp)
- ENUMERATOR(DifferenceCompositeOp)
- ENUMERATOR(DisplaceCompositeOp)
- ENUMERATOR(DissolveCompositeOp)
-#if defined(HAVE_DSTCOMPOSITEOP)
- ENUMERATOR(DstAtopCompositeOp) // Added 6.0.2?
+#if defined(HAVE_ENUM_DIVIDECOMPOSITEOP)
+ ENUMERATOR(DivideCompositeOp)
+#endif
+ ENUMERATOR(DstAtopCompositeOp)
ENUMERATOR(DstCompositeOp)
ENUMERATOR(DstInCompositeOp)
ENUMERATOR(DstOutCompositeOp)
ENUMERATOR(DstOverCompositeOp)
-#endif
+ ENUMERATOR(DifferenceCompositeOp)
+ ENUMERATOR(DisplaceCompositeOp)
+ ENUMERATOR(DissolveCompositeOp)
+ ENUMERATOR(ExclusionCompositeOp)
+ ENUMERATOR(HardLightCompositeOp)
ENUMERATOR(HueCompositeOp)
ENUMERATOR(InCompositeOp)
ENUMERATOR(LightenCompositeOp)
+#if defined(HAVE_ENUM_LINEARLIGHTCOMPOSITEOP)
+ ENUMERATOR(LinearLightCompositeOp)
+#endif
ENUMERATOR(LuminizeCompositeOp)
ENUMERATOR(MinusCompositeOp)
ENUMERATOR(ModulateCompositeOp)
ENUMERATOR(MultiplyCompositeOp)
ENUMERATOR(OutCompositeOp)
ENUMERATOR(OverCompositeOp)
ENUMERATOR(OverlayCompositeOp)
ENUMERATOR(PlusCompositeOp)
-#if defined(HAVE_REPLACECOMPOSITEOP) // Added 5.5.8
ENUMERATOR(ReplaceCompositeOp) // synonym for CopyCompositeOp
-#endif
ENUMERATOR(SaturateCompositeOp)
ENUMERATOR(ScreenCompositeOp)
-#if defined(HAVE_DSTCOMPOSITEOP)
+ ENUMERATOR(SoftLightCompositeOp)
ENUMERATOR(SrcAtopCompositeOp)
ENUMERATOR(SrcCompositeOp)
ENUMERATOR(SrcInCompositeOp)
ENUMERATOR(SrcOutCompositeOp)
ENUMERATOR(SrcOverCompositeOp)
-#endif
ENUMERATOR(SubtractCompositeOp)
ENUMERATOR(ThresholdCompositeOp)
ENUMERATOR(XorCompositeOp)
-
-#if defined(HAVE_COLORDODGECOMPOSITEOP)
- ENUMERATOR(BlendCompositeOp)
- ENUMERATOR(ColorBurnCompositeOp)
- ENUMERATOR(ColorDodgeCompositeOp)
- ENUMERATOR(ExclusionCompositeOp)
- ENUMERATOR(HardLightCompositeOp)
- ENUMERATOR(SoftLightCompositeOp)
-#endif
END_ENUM
// CompressionType constants
DEF_ENUM(CompressionType)
ENUMERATOR(UndefinedCompression)
ENUMERATOR(NoCompression)
ENUMERATOR(BZipCompression)
ENUMERATOR(FaxCompression)
ENUMERATOR(Group4Compression)
ENUMERATOR(JPEGCompression)
-#if defined(HAVE_JPEG2000COMPRESSION)
ENUMERATOR(JPEG2000Compression)
-#endif
ENUMERATOR(LosslessJPEGCompression)
ENUMERATOR(LZWCompression)
- ENUMERATOR(RLECompression) // preferred
- ENUMERATOR(RunlengthEncodedCompression) // deprecated
+ ENUMERATOR(RLECompression)
ENUMERATOR(ZipCompression)
END_ENUM
// DecorationType constants
DEF_ENUM(DecorationType)
@@ -1506,10 +1203,28 @@
ENUMERATOR(BackgroundDispose)
ENUMERATOR(NoneDispose)
ENUMERATOR(PreviousDispose)
END_ENUM
+#if defined(HAVE_DISTORTIMAGE)
+ // DistortImage "method" argument values
+ DEF_ENUM(DistortImageMethod)
+ ENUMERATOR(UndefinedDistortion)
+ ENUMERATOR(AffineDistortion)
+ ENUMERATOR(AffineProjectionDistortion)
+#if defined(HAVE_ENUM_ARCDISTORTION)
+ ENUMERATOR(ArcDistortion)
+#endif
+ ENUMERATOR(BilinearDistortion)
+ ENUMERATOR(PerspectiveDistortion)
+#if defined(HAVE_PERSPECTIVEPROJECTIONDISTORTION)
+ ENUMERATOR(PerspectiveProjectionDistortion)
+#endif
+ ENUMERATOR(ScaleRotateTranslateDistortion)
+ END_ENUM
+#endif
+
DEF_ENUM(EndianType)
ENUMERATOR(UndefinedEndian)
ENUMERATOR(LSBEndian)
ENUMERATOR(MSBEndian)
END_ENUM
@@ -1530,21 +1245,36 @@
ENUMERATOR(CatromFilter)
ENUMERATOR(MitchellFilter)
ENUMERATOR(LanczosFilter)
ENUMERATOR(BesselFilter)
ENUMERATOR(SincFilter)
+#if defined(HAVE_ENUM_KAISERFILTER)
+ ENUMERATOR(KaiserFilter)
+#endif
+#if defined(HAVE_ENUM_WELSHFILTER)
+ ENUMERATOR(WelshFilter)
+#endif
+#if defined(HAVE_ENUM_PARZENFILTER)
+ ENUMERATOR(ParzenFilter)
+#endif
+#if defined(HAVE_ENUM_LAGRANGEFILTER)
+ ENUMERATOR(LagrangeFilter)
+#endif
+#if defined(HAVE_ENUM_BOHMANFILTER)
+ ENUMERATOR(BohmanFilter)
+#endif
+#if defined(HAVE_ENUM_BARTLETTFILTER)
+ ENUMERATOR(BartlettFilter)
+#endif
+#if defined(HAVE_ENUM_SENTINELFILTER)
+ ENUMERATOR(SentinelFilter)
+#endif
END_ENUM
// GravityType constants
DEF_ENUM(GravityType)
-#if defined(HAVE_UNDEFINEDGRAVITY)
ENUMERATOR(UndefinedGravity)
-#else
- // Provide this enumerator in older (pre 6.0.0) versions of ImageMagick
- _enum = rm_enum_new(_cls, ID2SYM(rb_intern("UndefinedGravity")), INT2FIX(0));\
- rb_define_const(Module_Magick, "UndefinedGravity", _enum);
-#endif
ENUMERATOR(ForgetGravity)
ENUMERATOR(NorthWestGravity)
ENUMERATOR(NorthGravity)
ENUMERATOR(NorthEastGravity)
ENUMERATOR(WestGravity)
@@ -1567,75 +1297,110 @@
ENUMERATOR(TrueColorType)
ENUMERATOR(TrueColorMatteType)
ENUMERATOR(ColorSeparationType)
ENUMERATOR(ColorSeparationMatteType)
ENUMERATOR(OptimizeType)
-#if defined(HAVE_PALETTEBILEVELMATTETYPE)
ENUMERATOR(PaletteBilevelMatteType)
-#endif
END_ENUM
// InterlaceType constants
DEF_ENUM(InterlaceType)
ENUMERATOR(UndefinedInterlace)
ENUMERATOR(NoInterlace)
ENUMERATOR(LineInterlace)
ENUMERATOR(PlaneInterlace)
ENUMERATOR(PartitionInterlace)
+#if defined(HAVE_ENUM_GIFINTERLACE)
+ ENUMERATOR(GIFInterlace)
+#endif
+#if defined(HAVE_ENUM_JPEGINTERLACE)
+ ENUMERATOR(JPEGInterlace)
+#endif
+#if defined(HAVE_ENUM_PNGINTERLACE)
+ ENUMERATOR(PNGInterlace)
+#endif
END_ENUM
-#if defined(HAVE_INTERPOLATEPIXELCOLOR)
DEF_ENUM(InterpolatePixelMethod)
ENUMERATOR(UndefinedInterpolatePixel)
ENUMERATOR(AverageInterpolatePixel)
ENUMERATOR(BicubicInterpolatePixel)
ENUMERATOR(BilinearInterpolatePixel)
ENUMERATOR(FilterInterpolatePixel)
ENUMERATOR(IntegerInterpolatePixel)
ENUMERATOR(MeshInterpolatePixel)
ENUMERATOR(NearestNeighborInterpolatePixel)
- END_ENUM
+#if defined(HAVE_SPLINEINTERPOLATEPIXEL)
+ ENUMERATOR(SplineInterpolatePixel)
#endif
+ END_ENUM
-#if defined(HAVE_COMPAREIMAGELAYERS)
+#if defined(HAVE_TYPE_IMAGELAYERMETHOD)
+ DEF_ENUM(ImageLayerMethod)
+#else
DEF_ENUM(MagickLayerMethod)
+#endif
ENUMERATOR(UndefinedLayer)
ENUMERATOR(CompareAnyLayer)
ENUMERATOR(CompareClearLayer)
ENUMERATOR(CompareOverlayLayer)
ENUMERATOR(OptimizeLayer)
ENUMERATOR(OptimizePlusLayer)
-#if defined(HAVE_COALESCELAYER)
- // Introduced in IM 6.2.7-0
ENUMERATOR(CoalesceLayer)
ENUMERATOR(DisposeLayer)
+#if defined(HAVE_ENUM_OPTIMIZETRANSLAYER)
+ ENUMERATOR(OptimizeTransLayer)
#endif
- END_ENUM
+#if defined(HAVE_ENUM_OPTIMIZEIMAGELAYER)
+ ENUMERATOR(OptimizeImageLayer)
#endif
+#if defined(HAVE_ENUM_REMOVEDUPSLAYER)
+ ENUMERATOR(RemoveDupsLayer)
+#endif
+#if defined(HAVE_ENUM_REMOVEZEROLAYER)
+ ENUMERATOR(RemoveZeroLayer)
+#endif
+#if defined(HAVE_ENUM_COMPOSITELAYER)
+ ENUMERATOR(CompositeLayer)
+#endif
+#if defined(HAVE_ENUM_MERGELAYER)
+ ENUMERATOR(MergeLayer)
+#endif
+#if defined(HAVE_ENUM_MOSAICLAYER)
+ ENUMERATOR(MosaicLayer)
+#endif
+#if defined(HAVE_ENUM_FLATTENLAYER)
+ ENUMERATOR(FlattenLayer)
+#endif
+ END_ENUM
-#if defined(HAVE_COMPAREIMAGECHANNELS)
DEF_ENUM(MetricType)
ENUMERATOR(UndefinedMetric)
+ ENUMERATOR(AbsoluteErrorMetric)
ENUMERATOR(MeanAbsoluteErrorMetric)
+#if defined(HAVE_ENUM_MEANERRORPERPIXELMETRIC)
+ ENUMERATOR(MeanErrorPerPixelMetric)
+#endif
ENUMERATOR(MeanSquaredErrorMetric)
ENUMERATOR(PeakAbsoluteErrorMetric)
ENUMERATOR(PeakSignalToNoiseRatioMetric)
ENUMERATOR(RootMeanSquaredErrorMetric)
END_ENUM
-#endif
// NoiseType constants
DEF_ENUM(NoiseType)
ENUMERATOR(UniformNoise)
ENUMERATOR(GaussianNoise)
ENUMERATOR(MultiplicativeGaussianNoise)
ENUMERATOR(ImpulseNoise)
ENUMERATOR(LaplacianNoise)
ENUMERATOR(PoissonNoise)
+#if defined(HAVE_ENUM_RANDOMNOISE)
+ ENUMERATOR(RandomNoise)
+#endif
END_ENUM
-#if defined(HAVE_IMAGE_ORIENTATION)
// Orientation constants
DEF_ENUM(OrientationType)
ENUMERATOR(UndefinedOrientation)
ENUMERATOR(TopLeftOrientation)
ENUMERATOR(TopRightOrientation)
@@ -1644,11 +1409,10 @@
ENUMERATOR(LeftTopOrientation)
ENUMERATOR(RightTopOrientation)
ENUMERATOR(RightBottomOrientation)
ENUMERATOR(LeftBottomOrientation)
END_ENUM
-#endif
// Paint method constants
DEF_ENUM(PaintMethod)
ENUMERATOR(PointMethod)
ENUMERATOR(ReplaceMethod)
@@ -1689,28 +1453,24 @@
ENUMERATOR(OilPaintPreview)
ENUMERATOR(CharcoalDrawingPreview)
ENUMERATOR(JPEGPreview)
END_ENUM
-#if defined(HAVE_QUANTUMOPERATORREGIONIMAGE) || defined(HAVE_EVALUATEIMAGECHANNEL)
DEF_ENUM(QuantumExpressionOperator)
ENUMERATOR(UndefinedQuantumOperator)
ENUMERATOR(AddQuantumOperator)
ENUMERATOR(AndQuantumOperator)
ENUMERATOR(DivideQuantumOperator)
ENUMERATOR(LShiftQuantumOperator)
-#if defined(HAVE_MAXEVALUATEOPERATOR)
ENUMERATOR(MaxQuantumOperator)
ENUMERATOR(MinQuantumOperator)
-#endif
ENUMERATOR(MultiplyQuantumOperator)
ENUMERATOR(OrQuantumOperator)
ENUMERATOR(RShiftQuantumOperator)
ENUMERATOR(SubtractQuantumOperator)
ENUMERATOR(XorQuantumOperator)
END_ENUM
-#endif
// RenderingIntent
DEF_ENUM(RenderingIntent)
ENUMERATOR(UndefinedIntent)
ENUMERATOR(SaturationIntent)
@@ -1726,21 +1486,17 @@
ENUMERATOR(PixelsPerCentimeterResolution)
END_ENUM
// StorageType
DEF_ENUM(StorageType)
-#if defined(HAVE_UNDEFINEDGRAVITY) // UndefinedGravity & UndefinedPixel were both introduced in IM 6.0.0
ENUMERATOR(UndefinedPixel)
-#endif
ENUMERATOR(CharPixel)
ENUMERATOR(DoublePixel)
ENUMERATOR(FloatPixel)
ENUMERATOR(IntegerPixel)
ENUMERATOR(LongPixel)
-#if defined(HAVE_QUANTUMPIXEL)
ENUMERATOR(QuantumPixel)
-#endif
ENUMERATOR(ShortPixel)
END_ENUM
// StretchType constants
DEF_ENUM(StretchType)
@@ -1768,14 +1524,27 @@
DEF_ENUM(VirtualPixelMethod)
ENUMERATOR(UndefinedVirtualPixelMethod)
ENUMERATOR(EdgeVirtualPixelMethod)
ENUMERATOR(MirrorVirtualPixelMethod)
ENUMERATOR(TileVirtualPixelMethod)
-#if defined(HAVE_TRANSPARENTVIRTUALPIXELMETHOD)
- ENUMERATOR(BackgroundVirtualPixelMethod)
ENUMERATOR(TransparentVirtualPixelMethod)
+ ENUMERATOR(BackgroundVirtualPixelMethod)
+ ENUMERATOR(DitherVirtualPixelMethod)
+ ENUMERATOR(RandomVirtualPixelMethod)
+ ENUMERATOR(ConstantVirtualPixelMethod)
+#if defined(HAVE_ENUM_MASKVIRTUALPIXELMETHOD)
+ ENUMERATOR(MaskVirtualPixelMethod)
#endif
+#if defined(HAVE_ENUM_BLACKVIRTUALPIXELMETHOD)
+ ENUMERATOR(BlackVirtualPixelMethod)
+#endif
+#if defined(HAVE_ENUM_GRAYVIRTUALPIXELMETHOD)
+ ENUMERATOR(GrayVirtualPixelMethod)
+#endif
+#if defined(HAVE_ENUM_WHITEVIRTUALPIXELMETHOD)
+ ENUMERATOR(WhiteVirtualPixelMethod)
+#endif
END_ENUM
// WeightType constants
DEF_ENUM(WeightType)
ENUMERATOR(AnyWeight)
@@ -1794,34 +1563,22 @@
// Magick::AffineMatrix
Class_AffineMatrix = rb_struct_define(NULL, "sx", "rx", "ry", "sy", "tx", "ty", NULL);
rb_define_const(Module_Magick, "AffineMatrix", Class_AffineMatrix);
-#if defined(HAVE_GETIMAGESTATISTICS)
- // These classes are defined for >= GM 1.1.
-
- // Magick::Statistics
- Class_Statistics = rb_struct_define(NULL, "red", "green", "blue", "opacity", NULL);
- rb_define_const(Module_Magick, "Statistics", Class_Statistics);
- // Magick::ChannelStatistics
- Class_StatisticsChannel = rb_struct_define(NULL, "max", "min", "mean", "stddev", "var", NULL);
- rb_define_const(Class_Statistics, "Channel", Class_StatisticsChannel);
-#endif
-
-
// Magick::Primary
Class_Primary = rb_struct_define(NULL, "x", "y", "z", NULL);
rb_define_method(Class_Primary, "to_s", PrimaryInfo_to_s, 0);
rb_define_const(Module_Magick, "Primary", Class_Primary);
// Magick::Chromaticity
Class_Chromaticity = rb_struct_define(NULL
- , "red_primary"
- , "green_primary"
- , "blue_primary"
- , "white_point"
- , NULL);
+ , "red_primary"
+ , "green_primary"
+ , "blue_primary"
+ , "white_point"
+ , NULL);
rb_define_method(Class_Chromaticity, "to_s", ChromaticityInfo_to_s, 0);
rb_define_const(Module_Magick, "Chromaticity", Class_Chromaticity);
// Magick::Color
Class_Color = rb_struct_define(NULL, "name", "compliance", "color", NULL);
@@ -1842,12 +1599,12 @@
rb_define_method(Class_Segment, "to_s", SegmentInfo_to_s, 0);
rb_define_const(Module_Magick, "Segment", Class_Segment);
// Magick::Font
Class_Font = rb_struct_define(NULL, "name", "description",
- "family", "style", "stretch", "weight",
- "encoding", "foundry", "format", NULL);
+ "family", "style", "stretch", "weight",
+ "encoding", "foundry", "format", NULL);
rb_define_method(Class_Font, "to_s", Font_to_s, 0);
rb_define_const(Module_Magick, "Font", Class_Font);
// Magick::TypeMetric
Class_TypeMetric = rb_struct_define(NULL, "pixels_per_em", "ascent", "descent",
@@ -1863,33 +1620,35 @@
/*
* Static: test_Magick_version
* Purpose: Ensure the version of ImageMagick we're running with matches
- * the version we were compiled with. We were compiled with MagickLibVersion.
- * GetMagickVersion returns the runtime version.
+ * the version we were compiled with.
* Notes: Bypass the test by defining the constant RMAGICK_BYPASS_VERSION_TEST
* to 'true' at the top level, before requiring 'RMagick'
*/
static void test_Magick_version(void)
{
unsigned long version_number;
const char *version_str;
+ const char *web_site =
+#if defined(MagickHomeURL)
+ MagickHomeURL
+#else
+ MagickWebSite
+#endif
+ ;
int x, n;
ID bypass = rb_intern("RMAGICK_BYPASS_VERSION_TEST");
if (RTEST(rb_const_defined(rb_cObject, bypass)) && RTEST(rb_const_get(rb_cObject, bypass)))
{
return;
}
version_str = GetMagickVersion(&version_number);
-#if defined(GRAPHICSMAGICK)
- if ((version_number & 0xff0000) != (MagickLibVersion & 0xff0000))
-#else
if (version_number != MagickLibVersion)
-#endif
{
// Extract the string "ImageMagick X.Y.Z"
n = 0;
for (x = 0; version_str[x] != '\0'; x++)
{
@@ -1898,13 +1657,16 @@
break;
}
}
rb_raise(rb_eRuntimeError,
- "This version of RMagick was created to run with %s %s "
- "but %.*s is installed on this system.\n" ,
- MagickPackageName, MagickLibVersionText, x, version_str);
+ "This version of RMagick was created to run with %s %s\n"
+ "but %.*s is installed on this system. You should either\n"
+ " 1) Configure and build RMagick for %.*s, or\n"
+ " 2) download %s %s from %s and install it.\n" ,
+ MagickPackageName, MagickLibVersionText, x, version_str, x, version_str,
+ MagickPackageName, MagickLibVersionText, web_site);
}
}
@@ -1922,25 +1684,25 @@
char long_version[1000];
mgk_version = GetMagickVersion(NULL);
str = rb_str_new2(mgk_version);
- (void) rb_obj_freeze(str);
+ OBJ_FREEZE(str);
rb_define_const(Module_Magick, "Magick_version", str);
- str = rb_str_new2(PACKAGE_STRING);
- (void) rb_obj_freeze(str);
+ str = rb_str_new2(Q(RMAGICK_VERSION_STRING));
+ OBJ_FREEZE(str);
rb_define_const(Module_Magick, "Version", str);
sprintf(long_version,
- "This is %s ($Date: 2008/11/25 23:21:15 $) Copyright (C) 2008 by Timothy P. Hunter\n"
- "Built with %s\n"
- "Built for %s\n"
- "Web page: http://rmagick.rubyforge.org\n"
- "Email: rmagick@rubyforge.org\n",
- PACKAGE_STRING, mgk_version, RUBY_VERSION_STRING);
+ "This is %s ($Date: 2007/12/26 21:43:52 $) Copyright (C) 2007 by Timothy P. Hunter\n"
+ "Built with %s\n"
+ "Built for %s\n"
+ "Web page: http://rmagick.rubyforge.org\n"
+ "Email: rmagick@rubyforge.org\n",
+ Q(RMAGICK_VERSION_STRING), mgk_version, Q(RUBY_VERSION_STRING));
str = rb_str_new2(long_version);
- (void) rb_obj_freeze(str);
+ OBJ_FREEZE(str);
rb_define_const(Module_Magick, "Long_version", str);
}