diff --git a/MagickCore/log.h b/MagickCore/log.h
index 27bf8af..156e36d 100644
--- a/MagickCore/log.h
+++ b/MagickCore/log.h
@@ -47,12 +47,13 @@
ImageEvent = 0x00200,
LocaleEvent = 0x00400,
ModuleEvent = 0x00800,
- PolicyEvent = 0x01000,
- ResourceEvent = 0x02000,
- TransformEvent = 0x04000,
- UserEvent = 0x09000,
- WandEvent = 0x10000,
- X11Event = 0x20000,
+ PixelEvent = 0x01000,
+ PolicyEvent = 0x02000,
+ ResourceEvent = 0x04000,
+ TransformEvent = 0x08000,
+ UserEvent = 0x10000,
+ WandEvent = 0x20000,
+ X11Event = 0x40000,
AllEvents = 0x7fffffff
} LogEventType;
diff --git a/MagickCore/option.c b/MagickCore/option.c
index eb0b7b8..5df40c4 100644
--- a/MagickCore/option.c
+++ b/MagickCore/option.c
@@ -1198,6 +1198,8 @@
{ "Module", MagickModuleOptions, UndefinedOptionFlag, MagickFalse },
{ "Noise", MagickNoiseOptions, UndefinedOptionFlag, MagickFalse },
{ "Orientation", MagickOrientationOptions, UndefinedOptionFlag, MagickFalse },
+ { "PixelChannel", MagickPixelChannelOptions, UndefinedOptionFlag, MagickFalse },
+ { "PixelTrait", MagickPixelTraitOptions, UndefinedOptionFlag, MagickFalse },
{ "Policy", MagickPolicyOptions, UndefinedOptionFlag, MagickFalse },
{ "PolicyDomain", MagickPolicyDomainOptions, UndefinedOptionFlag, MagickFalse },
{ "PolicyRights", MagickPolicyRightsOptions, UndefinedOptionFlag, MagickFalse },
@@ -1233,6 +1235,7 @@
{ "Locale", LocaleEvent, UndefinedOptionFlag, MagickFalse },
{ "Module", ModuleEvent, UndefinedOptionFlag, MagickFalse },
{ "None", NoEvents, UndefinedOptionFlag, MagickFalse },
+ { "Pixel", PixelEvent, UndefinedOptionFlag, MagickFalse },
{ "Policy", PolicyEvent, UndefinedOptionFlag, MagickFalse },
{ "Resource", ResourceEvent, UndefinedOptionFlag, MagickFalse },
{ "Trace", TraceEvent, UndefinedOptionFlag, MagickFalse },
@@ -1331,6 +1334,36 @@
{ "LeftBottom", LeftBottomOrientation, UndefinedOptionFlag, MagickFalse },
{ (char *) NULL, UndefinedOrientation, UndefinedOptionFlag, MagickFalse }
},
+ PixelChannelOptions[] =
+ {
+ { "Undefined", UndefinedPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Alpha", AlphaPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Black", BlackPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Blue", BluePixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Cb", CbPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Composite", CompositePixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Cr", CrPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Cyan", CyanPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Gray", GrayPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Green", GreenPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Index", IndexPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Intensity", IntensityPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Magenta", MagentaPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Mask", MaskPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Red", RedPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Sync", SyncPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Y", YPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { "Yellow", YellowPixelChannel, UndefinedOptionFlag, MagickFalse },
+ { (char *) NULL, UndefinedPixelChannel, UndefinedOptionFlag, MagickFalse }
+ },
+ PixelTraitOptions[] =
+ {
+ { "Undefined", UndefinedPixelTrait, UndefinedOptionFlag, MagickTrue },
+ { "Blend", BlendPixelTrait, UndefinedOptionFlag, MagickFalse },
+ { "Copy", CopyPixelTrait, UndefinedOptionFlag, MagickFalse },
+ { "Update", UpdatePixelTrait, UndefinedOptionFlag, MagickFalse },
+ { (char *) NULL, UndefinedPixelTrait, UndefinedOptionFlag, MagickFalse }
+ },
PolicyDomainOptions[] =
{
{ "Undefined", UndefinedPolicyDomain, UndefinedOptionFlag, MagickTrue },
@@ -1818,6 +1851,8 @@
case MagickMorphologyOptions: return(MorphologyOptions);
case MagickNoiseOptions: return(NoiseOptions);
case MagickOrientationOptions: return(OrientationOptions);
+ case MagickPixelChannelOptions: return(PixelChannelOptions);
+ case MagickPixelTraitOptions: return(PixelTraitOptions);
case MagickPolicyDomainOptions: return(PolicyDomainOptions);
case MagickPolicyRightsOptions: return(PolicyRightsOptions);
case MagickPreviewOptions: return(PreviewOptions);
diff --git a/MagickCore/option.h b/MagickCore/option.h
index 732f24e..bbe7ac1 100644
--- a/MagickCore/option.h
+++ b/MagickCore/option.h
@@ -75,6 +75,8 @@
MagickMorphologyOptions,
MagickNoiseOptions,
MagickOrientationOptions,
+ MagickPixelChannelOptions,
+ MagickPixelTraitOptions,
MagickPolicyOptions,
MagickPolicyDomainOptions,
MagickPolicyRightsOptions,
diff --git a/MagickCore/pixel.c b/MagickCore/pixel.c
index c6b42f7..d90c299 100644
--- a/MagickCore/pixel.c
+++ b/MagickCore/pixel.c
@@ -3560,6 +3560,84 @@
% o image: the image.
%
*/
+
+static void LogPixelChannels(const Image *image)
+{
+ register ssize_t
+ i;
+
+ (void) LogMagickEvent(PixelEvent,GetMagickModule(),"%s[%.20g]",
+ image->filename,(double) image->number_channels);
+ for (i=0; i < (ssize_t) image->number_channels; i++)
+ {
+ char
+ traits[MaxTextExtent];
+
+ const char
+ *channel;
+
+ switch (image->channel_map[i].channel)
+ {
+ case RedPixelChannel:
+ {
+ channel="red";
+ if (image->colorspace == CMYKColorspace)
+ channel="cyan";
+ if (image->colorspace == GRAYColorspace)
+ channel="gray";
+ break;
+ }
+ case GreenPixelChannel:
+ {
+ channel="green";
+ if (image->colorspace == CMYKColorspace)
+ channel="magenta";
+ break;
+ }
+ case BluePixelChannel:
+ {
+ channel="blue";
+ if (image->colorspace == CMYKColorspace)
+ channel="yellow";
+ break;
+ }
+ case BlackPixelChannel:
+ {
+ channel="black";
+ if (image->storage_class == PseudoClass)
+ channel="index";
+ break;
+ }
+ case AlphaPixelChannel:
+ {
+ channel="alpha";
+ break;
+ }
+ case MaskPixelChannel:
+ {
+ channel="mask";
+ break;
+ }
+ default:
+ {
+ channel="undefined";
+ }
+ }
+ *traits='\0';
+ if ((image->channel_map[i].traits & UpdatePixelTrait) != 0)
+ (void) ConcatenateMagickString(traits,"update,",MaxTextExtent);
+ if ((image->channel_map[i].traits & BlendPixelTrait) != 0)
+ (void) ConcatenateMagickString(traits,"blend,",MaxTextExtent);
+ if ((image->channel_map[i].traits & CopyPixelTrait) != 0)
+ (void) ConcatenateMagickString(traits,"copy,",MaxTextExtent);
+ if (*traits == '\0')
+ (void) ConcatenateMagickString(traits,"undefined,",MaxTextExtent);
+ traits[strlen(traits)-1]='\0';
+ (void) LogMagickEvent(PixelEvent,GetMagickModule()," %.20g: %s (%s)",
+ (double) i,channel,traits);
+ }
+}
+
MagickExport void InitializePixelChannelMap(Image *image)
{
PixelChannel
@@ -3568,6 +3646,8 @@
register ssize_t
i;
+ assert(image != (Image *) NULL);
+ assert(image->signature == MagickSignature);
for (i=0; i < (ssize_t) MaxPixelChannels; i++)
{
SetPixelChannelMapChannel(image,(PixelChannel) i,(PixelChannel) i);
@@ -3605,6 +3685,8 @@
image->number_channels+=image->number_meta_channels;
for ( ; i < (ssize_t) image->number_channels; i++)
SetPixelChannelMapTraits(image,(PixelChannel) i,CopyPixelTrait);
+ if (image->debug != MagickFalse)
+ LogPixelChannels(image);
(void) SetPixelChannelMask(image,image->channel_mask);
}
@@ -5330,6 +5412,8 @@
SetPixelChannelMapTraits(image,(PixelChannel) i,UndefinedPixelTrait);
if (image->storage_class == PseudoClass)
SetPixelChannelMapTraits(image,IndexPixelChannel,CopyPixelTrait);
+ if (image->debug != MagickFalse)
+ LogPixelChannels(image);
}
/*
diff --git a/MagickCore/pixel.h b/MagickCore/pixel.h
index 5258c58..32bb087 100644
--- a/MagickCore/pixel.h
+++ b/MagickCore/pixel.h
@@ -43,6 +43,7 @@
typedef enum
{
+ UndefinedPixelChannel = 0,
RedPixelChannel = 0,
CyanPixelChannel = 0,
GrayPixelChannel = 0,
diff --git a/MagickCore/version.h b/MagickCore/version.h
index ca147bd..4456bb8 100644
--- a/MagickCore/version.h
+++ b/MagickCore/version.h
@@ -34,7 +34,7 @@
#define MagickLibAddendum "-0"
#define MagickLibInterface 7
#define MagickLibMinInterface 7
-#define MagickReleaseDate "2011-10-22"
+#define MagickReleaseDate "2011-10-23"
#define MagickChangeDate "20110801"
#define MagickAuthoritativeURL "http://www.imagemagick.org"
#if defined(MAGICKCORE_OPENMP_SUPPORT)