]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/attribute.c
Update web pages
[imagemagick] / MagickCore / attribute.c
index 75f8d4f6be2fc2d96e8be8ee7bd5a0c9b6347f11..de44234422ebfd0e2f65858a57e1e27b0917b091 100644 (file)
@@ -145,7 +145,7 @@ MagickExport RectangleInfo GetImageBoundingBox(const Image *image,
     y;
 
   assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
+  assert(image->signature == MagickCoreSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   bounds.width=0;
@@ -236,7 +236,7 @@ MagickExport RectangleInfo GetImageBoundingBox(const Image *image,
     }
   }
   image_view=DestroyCacheView(image_view);
-  if ((bounds.width == 0) || (bounds.height == 0))
+  if ((bounds.width == 0) && (bounds.height == 0))
     (void) ThrowMagickException(exception,GetMagickModule(),OptionWarning,
       "GeometryDoesNotContainImage","`%s'",image->filename);
   else
@@ -294,7 +294,7 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
     Compute image depth.
   */
   assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
+  assert(image->signature == MagickCoreSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   number_threads=(size_t) GetMagickResourceLimit(ThreadResource);
@@ -305,7 +305,8 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
   status=MagickTrue;
   for (i=0; i < (ssize_t) number_threads; i++)
     current_depth[i]=1;
-  if ((image->storage_class == PseudoClass) && (image->alpha_trait == UndefinedPixelTrait))
+  if ((image->storage_class == PseudoClass) &&
+      (image->alpha_trait == UndefinedPixelTrait))
     {
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
       #pragma omp parallel for schedule(static,4) shared(status) \
@@ -533,14 +534,6 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception)
 %      a maximum of MAGICKCORE_QUANTUM_DEPTH.
 %
 */
-
-static inline double MagickMin(const double x,const double y)
-{
-  if (x < y)
-    return(x);
-  return(y);
-}
-
 MagickExport size_t GetImageQuantumDepth(const Image *image,
   const MagickBooleanType constrain)
 {
@@ -575,76 +568,68 @@ MagickExport size_t GetImageQuantumDepth(const Image *image,
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  GetImageType() returns the potential type of image:
+%  GetImageType() returns the type of image:
 %
 %        Bilevel         Grayscale        GrayscaleMatte
 %        Palette         PaletteMatte     TrueColor
 %        TrueColorMatte  ColorSeparation  ColorSeparationMatte
 %
-%  To ensure the image type matches its potential, use SetImageType():
-%
-%    (void) SetImageType(image,GetImageType(image));
-%
 %  The format of the GetImageType method is:
 %
-%      ImageType GetImageType(const Image *image,ExceptionInfo *exception)
+%      ImageType GetImageType(const Image *image)
 %
 %  A description of each parameter follows:
 %
 %    o image: the image.
 %
-%    o exception: return any errors or warnings in this structure.
-%
 */
-MagickExport ImageType GetImageType(const Image *image,ExceptionInfo *exception)
+MagickExport ImageType GetImageType(const Image *image)
 {
   assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
-  if (image->debug != MagickFalse)
-    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+  assert(image->signature == MagickCoreSignature);
   if (image->colorspace == CMYKColorspace)
     {
       if (image->alpha_trait == UndefinedPixelTrait)
         return(ColorSeparationType);
-      return(ColorSeparationMatteType);
+      return(ColorSeparationAlphaType);
     }
-  if (IsImageMonochrome(image,exception) != MagickFalse)
+  if (IsImageMonochrome(image) != MagickFalse)
     return(BilevelType);
-  if (IsImageGray(image,exception) != MagickFalse)
+  if (IsImageGray(image) != MagickFalse)
     {
       if (image->alpha_trait != UndefinedPixelTrait)
-        return(GrayscaleMatteType);
+        return(GrayscaleAlphaType);
       return(GrayscaleType);
     }
-  if (IsPaletteImage(image,exception) != MagickFalse)
+  if (IsPaletteImage(image) != MagickFalse)
     {
       if (image->alpha_trait != UndefinedPixelTrait)
-        return(PaletteMatteType);
+        return(PaletteAlphaType);
       return(PaletteType);
     }
   if (image->alpha_trait != UndefinedPixelTrait)
-    return(TrueColorMatteType);
+    return(TrueColorAlphaType);
   return(TrueColorType);
 }
-\f
+
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%     I s I m a g e G r a y                                                   %
+%     I d e n t i f y I m a g e G r a y                                       %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  IsImageGray() returns MagickTrue if all the pixels in the image have the
-%  same red, green, and blue intensities.
+%  IdentifyImageGray() returns grayscale if all the pixels in the image have
+%  the same red, green, and blue intensities, and bi-level is the intensity is
+%  either 0 or QuantumRange. Otherwise undefined is returned.
 %
-%  The format of the IsImageGray method is:
+%  The format of the IdentifyImageGray method is:
 %
-%      MagickBooleanType IsImageGray(const Image *image,
-%        ExceptionInfo *exception)
+%      ImageType IdentifyImageGray(const Image *image,ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
 %
@@ -653,7 +638,7 @@ MagickExport ImageType GetImageType(const Image *image,ExceptionInfo *exception)
 %    o exception: return any errors or warnings in this structure.
 %
 */
-MagickExport MagickBooleanType IsImageGray(const Image *image,
+MagickExport ImageType IdentifyImageGray(const Image *image,
   ExceptionInfo *exception)
 {
   CacheView
@@ -672,15 +657,14 @@ MagickExport MagickBooleanType IsImageGray(const Image *image,
     y;
 
   assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
+  assert(image->signature == MagickCoreSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   if ((image->type == BilevelType) || (image->type == GrayscaleType) ||
-      (image->type == GrayscaleMatteType))
-    return(MagickTrue);
-  if ((IsGrayColorspace(image->colorspace) == MagickFalse) &&
-      (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse))
-    return(MagickFalse);
+      (image->type == GrayscaleAlphaType))
+    return(image->type);
+  if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse)
+    return(UndefinedType);
   type=BilevelType;
   image_view=AcquireVirtualCacheView(image,exception);
   for (y=0; y < (ssize_t) image->rows; y++)
@@ -704,35 +688,29 @@ MagickExport MagickBooleanType IsImageGray(const Image *image,
       break;
   }
   image_view=DestroyCacheView(image_view);
-  if (type == UndefinedType)
-    return(MagickFalse);
-  ((Image *) image)->colorspace=GRAYColorspace;
-  if (SyncImagePixelCache((Image *) image,exception) == MagickFalse)
-    return(MagickFalse);
-  ((Image *) image)->type=type;
   if ((type == GrayscaleType) && (image->alpha_trait != UndefinedPixelTrait))
-    ((Image *) image)->type=GrayscaleMatteType;
-  return(MagickTrue);
+    type=GrayscaleAlphaType;
+  return(type);
 }
-\f
+
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                             %
 %                                                                             %
 %                                                                             %
-%   I s I m a g e M o n o c h r o m e                                         %
+%   I d e n t i f y I m a g e M o n o c h r o m e                             %
 %                                                                             %
 %                                                                             %
 %                                                                             %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
-%  IsImageMonochrome() returns MagickTrue if all the pixels in the image have
-%  the same red, green, and blue intensities and the intensity is either
+%  IdentifyImageMonochrome() returns MagickTrue if all the pixels in the image
+%  have the same red, green, and blue intensities and the intensity is either
 %  0 or QuantumRange.
 %
-%  The format of the IsImageMonochrome method is:
+%  The format of the IdentifyImageMonochrome method is:
 %
-%      MagickBooleanType IsImageMonochrome(const Image *image,
+%      MagickBooleanType IdentifyImageMonochrome(const Image *image,
 %        ExceptionInfo *exception)
 %
 %  A description of each parameter follows:
@@ -742,7 +720,7 @@ MagickExport MagickBooleanType IsImageGray(const Image *image,
 %    o exception: return any errors or warnings in this structure.
 %
 */
-MagickExport MagickBooleanType IsImageMonochrome(const Image *image,
+MagickExport MagickBooleanType IdentifyImageMonochrome(const Image *image,
   ExceptionInfo *exception)
 {
   CacheView
@@ -761,13 +739,12 @@ MagickExport MagickBooleanType IsImageMonochrome(const Image *image,
     y;
 
   assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
+  assert(image->signature == MagickCoreSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   if (image->type == BilevelType)
     return(MagickTrue);
-  if ((IsGrayColorspace(image->colorspace) == MagickFalse) &&
-      (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse))
+  if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse)
     return(MagickFalse);
   type=BilevelType;
   image_view=AcquireVirtualCacheView(image,exception);
@@ -789,13 +766,137 @@ MagickExport MagickBooleanType IsImageMonochrome(const Image *image,
       break;
   }
   image_view=DestroyCacheView(image_view);
-  if (type == UndefinedType)
-    return(MagickFalse);
-  ((Image *) image)->colorspace=GRAYColorspace;
-  if (SyncImagePixelCache((Image *) image,exception) == MagickFalse)
-    return(MagickFalse);
-  ((Image *) image)->type=type;
-  return(MagickTrue);
+  if (type == BilevelType)
+    return(MagickTrue);
+  return(MagickFalse);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   I d e n t i f y I m a g e T y p e                                         %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  IdentifyImageType() returns the potential type of image:
+%
+%        Bilevel         Grayscale        GrayscaleMatte
+%        Palette         PaletteMatte     TrueColor
+%        TrueColorMatte  ColorSeparation  ColorSeparationMatte
+%
+%  To ensure the image type matches its potential, use SetImageType():
+%
+%    (void) SetImageType(image,IdentifyImageType(image,exception),exception);
+%
+%  The format of the IdentifyImageType method is:
+%
+%      ImageType IdentifyImageType(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 ImageType IdentifyImageType(const Image *image,
+  ExceptionInfo *exception)
+{
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
+  if (image->debug != MagickFalse)
+    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
+  if (image->colorspace == CMYKColorspace)
+    {
+      if (image->alpha_trait == UndefinedPixelTrait)
+        return(ColorSeparationType);
+      return(ColorSeparationAlphaType);
+    }
+  if (IdentifyImageMonochrome(image,exception) != MagickFalse)
+    return(BilevelType);
+  if (IdentifyImageGray(image,exception) != UndefinedType)
+    {
+      if (image->alpha_trait != UndefinedPixelTrait)
+        return(GrayscaleAlphaType);
+      return(GrayscaleType);
+    }
+  if (IdentifyPaletteImage(image,exception) != MagickFalse)
+    {
+      if (image->alpha_trait != UndefinedPixelTrait)
+        return(PaletteAlphaType);
+      return(PaletteType);
+    }
+  if (image->alpha_trait != UndefinedPixelTrait)
+    return(TrueColorAlphaType);
+  return(TrueColorType);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%     I s I m a g e G r a y                                                   %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  IsImageGray() returns MagickTrue if the type of the image is grayscale or
+%  bi-level.
+%
+%  The format of the IsImageGray method is:
+%
+%      MagickBooleanType IsImageGray(const Image *image)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+*/
+MagickExport MagickBooleanType IsImageGray(const Image *image)
+{
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
+  if ((image->type == BilevelType) || (image->type == GrayscaleType) ||
+      (image->type == GrayscaleAlphaType))
+    return(MagickTrue);
+  return(MagickFalse);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%   I s I m a g e M o n o c h r o m e                                         %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  IsImageMonochrome() returns MagickTrue if type of the image is bi-level.
+%
+%  The format of the IsImageMonochrome method is:
+%
+%      MagickBooleanType IsImageMonochrome(const Image *image)
+%
+%  A description of each parameter follows:
+%
+%    o image: the image.
+%
+*/
+MagickExport MagickBooleanType IsImageMonochrome(const Image *image)
+{
+  assert(image != (Image *) NULL);
+  assert(image->signature == MagickCoreSignature);
+  if (image->type == BilevelType)
+    return(MagickTrue);
+  return(MagickFalse);
 }
 \f
 /*
@@ -845,7 +946,7 @@ MagickExport MagickBooleanType IsImageOpaque(const Image *image,
     Determine if image is opaque.
   */
   assert(image != (Image *) NULL);
-  assert(image->signature == MagickSignature);
+  assert(image->signature == MagickCoreSignature);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   if (image->alpha_trait == UndefinedPixelTrait)
@@ -863,7 +964,7 @@ MagickExport MagickBooleanType IsImageOpaque(const Image *image,
       p+=GetPixelChannels(image);
     }
     if (x < (ssize_t) image->columns)
-     break;
+      break;
   }
   image_view=DestroyCacheView(image_view);
   return(y < (ssize_t) image->rows ? MagickFalse : MagickTrue);
@@ -898,20 +999,6 @@ MagickExport MagickBooleanType IsImageOpaque(const Image *image,
 %    o exception: return any errors or warnings in this structure.
 %
 */
-
-static inline Quantum ClampPixel(const MagickRealType value)
-{
-#if !defined(MAGICKCORE_HDRI_SUPPORT)
-  return((Quantum) value);
-#else
-  if (value < 0.0f)
-    return(0.0f);
-  if (value >= (MagickRealType) QuantumRange)
-    return((Quantum) QuantumRange);
-  return(value);
-#endif
-}
-
 MagickExport MagickBooleanType SetImageDepth(Image *image,
   const size_t depth,ExceptionInfo *exception)
 {
@@ -930,7 +1017,7 @@ MagickExport MagickBooleanType SetImageDepth(Image *image,
   assert(image != (Image *) NULL);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
-  assert(image->signature == MagickSignature);
+  assert(image->signature == MagickCoreSignature);
   if (depth >= MAGICKCORE_QUANTUM_DEPTH)
     {
       image->depth=depth;
@@ -1156,7 +1243,7 @@ MagickExport MagickBooleanType SetImageType(Image *image,const ImageType type,
   assert(image != (Image *) NULL);
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
-  assert(image->signature == MagickSignature);
+  assert(image->signature == MagickCoreSignature);
   status=MagickTrue;
   image_info=AcquireImageInfo();
   image_info->dither=image->dither;
@@ -1167,11 +1254,10 @@ MagickExport MagickBooleanType SetImageType(Image *image,const ImageType type,
   {
     case BilevelType:
     {
-      if (IsImageGray(image,exception) == MagickFalse)
-        status=TransformImageColorspace(image,GRAYColorspace,exception);
-      (void) NormalizeImage(image,exception);
-      if (IsImageMonochrome(image,exception) == MagickFalse)
+      if (SetImageMonochrome(image,exception) == MagickFalse)
         {
+          status=TransformImageColorspace(image,GRAYColorspace,exception);
+          (void) NormalizeImage(image,exception);
           quantize_info=AcquireQuantizeInfo(image_info);
           quantize_info->number_colors=2;
           quantize_info->colorspace=GRAYColorspace;
@@ -1184,14 +1270,14 @@ MagickExport MagickBooleanType SetImageType(Image *image,const ImageType type,
     }
     case GrayscaleType:
     {
-      if (IsImageGray(image,exception) == MagickFalse)
+      if (SetImageGray(image,exception) == MagickFalse)
         status=TransformImageColorspace(image,GRAYColorspace,exception);
       image->alpha_trait=UndefinedPixelTrait;
       break;
     }
-    case GrayscaleMatteType:
+    case GrayscaleAlphaType:
     {
-      if (IsImageGray(image,exception) == MagickFalse)
+      if (SetImageGray(image,exception) == MagickFalse)
         status=TransformImageColorspace(image,GRAYColorspace,exception);
       if (image->alpha_trait == UndefinedPixelTrait)
         (void) SetImageAlphaChannel(image,OpaqueAlphaChannel,exception);
@@ -1211,7 +1297,7 @@ MagickExport MagickBooleanType SetImageType(Image *image,const ImageType type,
       image->alpha_trait=UndefinedPixelTrait;
       break;
     }
-    case PaletteBilevelMatteType:
+    case PaletteBilevelAlphaType:
     {
       ChannelType
         channel_mask;
@@ -1228,7 +1314,7 @@ MagickExport MagickBooleanType SetImageType(Image *image,const ImageType type,
       quantize_info=DestroyQuantizeInfo(quantize_info);
       break;
     }
-    case PaletteMatteType:
+    case PaletteAlphaType:
     {
       if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse)
         status=TransformImageColorspace(image,sRGBColorspace,exception);
@@ -1249,7 +1335,7 @@ MagickExport MagickBooleanType SetImageType(Image *image,const ImageType type,
       image->alpha_trait=UndefinedPixelTrait;
       break;
     }
-    case TrueColorMatteType:
+    case TrueColorAlphaType:
     {
       if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse)
         status=TransformImageColorspace(image,sRGBColorspace,exception);
@@ -1272,7 +1358,7 @@ MagickExport MagickBooleanType SetImageType(Image *image,const ImageType type,
       image->alpha_trait=UndefinedPixelTrait;
       break;
     }
-    case ColorSeparationMatteType:
+    case ColorSeparationAlphaType:
     {
       if (image->colorspace != CMYKColorspace)
         {