From 4826fb4b84c280c7fe3c9d2f509afc2785df715b Mon Sep 17 00:00:00 2001 From: Cristy Date: Sun, 17 Dec 2017 12:05:09 -0500 Subject: [PATCH] Introducing GetImageColorspaceType() --- MagickCore/colorspace.c | 52 +++++++++++++++++++++++++++++++++++++++++ MagickCore/colorspace.h | 3 +++ MagickCore/identify.c | 23 +++++++----------- MagickCore/property.c | 13 +---------- coders/json.c | 18 +++++++------- 5 files changed, 74 insertions(+), 35 deletions(-) diff --git a/MagickCore/colorspace.c b/MagickCore/colorspace.c index 3b17edaab..961240a5e 100644 --- a/MagickCore/colorspace.c +++ b/MagickCore/colorspace.c @@ -91,6 +91,58 @@ static MagickBooleanType % % % % % % +% G e t I m a g e C o l o r s p a c e T y p e % +% % +% % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% GetImageColorspaceType() returns the potential type of image: +% sRGBColorspaceType, RGBColorspaceType, GRAYColorspaceType, etc. +% +% To ensure the image type matches its potential, use SetImageColorspaceType(): +% +% (void) SetImageColorspaceType(image,GetImageColorspaceType(image), +% exception); +% +% The format of the GetImageColorspaceType method is: +% +% ColorspaceType GetImageColorspaceType(const Image *image, +% ExceptionInfo *exception) +% +% A description of each parameter follows: +% +% o image: the image. +% +% o exception: return any errors or warnings in this structure. +% +*/ +MagickExport ColorspaceType GetImageColorspaceType(const Image *image, + ExceptionInfo *exception) +{ + ColorspaceType + colorspace; + + ImageType + type; + + assert(image != (Image *) NULL); + assert(image->signature == MagickCoreSignature); + if (image->debug != MagickFalse) + (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); + colorspace=image->colorspace; + type=IdentifyImageType(image,exception); + if ((type == BilevelType) || (type == GrayscaleType) || + (type == GrayscaleAlphaType)) + colorspace=GRAYColorspace; + return(colorspace); +} + +/* +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% % +% % + s R G B T r a n s f o r m I m a g e % % % % % diff --git a/MagickCore/colorspace.h b/MagickCore/colorspace.h index 7fe857f1a..849768bd5 100644 --- a/MagickCore/colorspace.h +++ b/MagickCore/colorspace.h @@ -59,6 +59,9 @@ typedef enum YUVColorspace } ColorspaceType; +extern MagickExport ColorspaceType + GetImageColorspaceType(const Image *,ExceptionInfo *); + extern MagickExport MagickBooleanType SetImageColorspace(Image *,const ColorspaceType,ExceptionInfo *), SetImageGray(Image *,ExceptionInfo *), diff --git a/MagickCore/identify.c b/MagickCore/identify.c index 0aebc6487..b986b7151 100644 --- a/MagickCore/identify.c +++ b/MagickCore/identify.c @@ -506,7 +506,6 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file, user_time; ImageType - base_type, type; MagickBooleanType @@ -556,11 +555,7 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file, if (channel_statistics == (ChannelStatistics *) NULL) return(MagickFalse); (void) FormatLocaleFile(file,"Channel %s locations:\n",locate); - colorspace=image->colorspace; - type=IdentifyImageType(image,exception); - if ((type == BilevelType) || (type == GrayscaleType) || - (type == GrayscaleAlphaType)) - colorspace=GRAYColorspace; + colorspace=GetImageColorspaceType(image,exception); switch (colorspace) { case RGBColorspace: @@ -684,11 +679,6 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file, /* Display verbose info about the image. */ - colorspace=image->colorspace; - type=IdentifyImageType(image,exception); - if ((type == BilevelType) || (type == GrayscaleType) || - (type == GrayscaleAlphaType)) - colorspace=GRAYColorspace; p=GetVirtualPixels(image,0,0,1,1,exception); ping=p == (const Quantum *) NULL ? MagickTrue : MagickFalse; (void) SignatureImage(image,exception); @@ -733,19 +723,24 @@ MagickExport MagickBooleanType IdentifyImage(Image *image,FILE *file, } (void) FormatLocaleFile(file," Units: %s\n",CommandOptionToMnemonic( MagickResolutionOptions,(ssize_t) image->units)); + type=GetImageType(image); (void) FormatLocaleFile(file," Type: %s\n",CommandOptionToMnemonic( MagickTypeOptions,(ssize_t) type)); - base_type=GetImageType(image); - if (type != base_type) + if (image->type != type) (void) FormatLocaleFile(file," Base type: %s\n",CommandOptionToMnemonic( - MagickTypeOptions,(ssize_t) base_type)); + MagickTypeOptions,(ssize_t) image->type)); (void) FormatLocaleFile(file," Endianess: %s\n",CommandOptionToMnemonic( MagickEndianOptions,(ssize_t) image->endian)); /* Detail channel depth and extrema. */ + colorspace=GetImageColorspaceType(image,exception); (void) FormatLocaleFile(file," Colorspace: %s\n",CommandOptionToMnemonic( MagickColorspaceOptions,(ssize_t) colorspace)); + if (colorspace != image->colorspace) + (void) FormatLocaleFile(file," Base colorspace: %s\n", + CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t) + image->colorspace)); channel_statistics=(ChannelStatistics *) NULL; channel_moments=(ChannelMoments *) NULL; channel_phash=(ChannelPerceptualHash *) NULL; diff --git a/MagickCore/property.c b/MagickCore/property.c index 72eb5a858..b3d72033b 100644 --- a/MagickCore/property.c +++ b/MagickCore/property.c @@ -2801,20 +2801,9 @@ MagickExport const char *GetMagickProperty(ImageInfo *image_info, } if (LocaleCompare("colorspace",property) == 0) { - ColorspaceType - colorspace; - - ImageType - type; - - colorspace=image->colorspace; - type=IdentifyImageType(image,exception); - if ((type == BilevelType) || (type == GrayscaleType) || - (type == GrayscaleAlphaType)) - colorspace=GRAYColorspace; WarnNoImageReturn("\"%%[%s]\"",property); string=CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t) - colorspace); + GetImageColorspaceType(image,exception)); break; } if (LocaleCompare("compose",property) == 0) diff --git a/coders/json.c b/coders/json.c index 36881301c..c445414c2 100644 --- a/coders/json.c +++ b/coders/json.c @@ -951,7 +951,6 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file, user_time; ImageType - base_type, type; MagickBooleanType @@ -1030,17 +1029,12 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file, } JSONFormatLocaleFile(file," \"units\": %s,\n",CommandOptionToMnemonic( MagickResolutionOptions,(ssize_t) image->units)); - colorspace=image->colorspace; - type=IdentifyImageType(image,exception); - if ((type == BilevelType) || (type == GrayscaleType) || - (type == GrayscaleAlphaType)) - colorspace=GRAYColorspace; + type=GetImageType(image); JSONFormatLocaleFile(file," \"type\": %s,\n",CommandOptionToMnemonic( MagickTypeOptions,(ssize_t) type)); - base_type=GetImageType(image); - if (type != base_type) + if (image->type != type) JSONFormatLocaleFile(file," \"baseType\": %s,\n", - CommandOptionToMnemonic(MagickTypeOptions,(ssize_t) base_type)); + CommandOptionToMnemonic(MagickTypeOptions,(ssize_t) image->type)); JSONFormatLocaleFile(file," \"endianess\": %s,\n", CommandOptionToMnemonic(MagickEndianOptions,(ssize_t) image->endian)); locate=GetImageArtifact(image,"identify:locate"); @@ -1075,6 +1069,7 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file, if (image->alpha_trait != UndefinedPixelTrait) (void) PrintChannelLocations(file,image,AlphaPixelChannel,"Alpha", type,max_locations,MagickTrue,channel_statistics); + colorspace=GetImageColorspaceType(image,exception); switch (colorspace) { case RGBColorspace: @@ -1114,8 +1109,13 @@ static MagickBooleanType EncodeImageAttributes(Image *image,FILE *file, /* Detail channel depth and extrema. */ + colorspace=GetImageColorspaceType(image,exception); JSONFormatLocaleFile(file," \"colorspace\": %s,\n", CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t) colorspace)); + if (image->colorspace != colorspace) + JSONFormatLocaleFile(file," \"baseColorspace\": %s,\n", + CommandOptionToMnemonic(MagickColorspaceOptions,(ssize_t) + image->colorspace)); channel_statistics=(ChannelStatistics *) NULL; channel_moments=(ChannelMoments *) NULL; channel_phash=(ChannelPerceptualHash *) NULL; -- 2.50.1