quantum.h

Go to the documentation of this file.
00001 /*
00002   Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization
00003   dedicated to making software imaging solutions freely available.
00004 
00005   You may not use this file except in compliance with the License.  You may
00006   obtain a copy of the License at
00007 
00008     https://imagemagick.org/script/license.php
00009 
00010   Unless required by applicable law or agreed to in writing, software
00011   distributed under the License is distributed on an "AS IS" BASIS,
00012   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013   See the License for the specific language governing permissions and
00014   limitations under the License.
00015 
00016   MagickCore quantum inline methods.
00017 */
00018 #ifndef MAGICKCORE_QUANTUM_H
00019 #define MAGICKCORE_QUANTUM_H
00020 
00021 #include "magick/image.h"
00022 #include "magick/semaphore.h"
00023 
00024 #if defined(__cplusplus) || defined(c_plusplus)
00025 extern "C" {
00026 #endif
00027 
00028 #define RoundToQuantum(quantum)  ClampToQuantum(quantum)
00029 
00030 typedef enum
00031 {
00032   UndefinedEndian,
00033   LSBEndian,
00034   MSBEndian
00035 } EndianType;
00036 
00037 typedef enum
00038 {
00039   UndefinedQuantumAlpha,
00040   AssociatedQuantumAlpha,
00041   DisassociatedQuantumAlpha
00042 } QuantumAlphaType;
00043 
00044 typedef enum
00045 {
00046   UndefinedQuantumFormat,
00047   FloatingPointQuantumFormat,
00048   SignedQuantumFormat,
00049   UnsignedQuantumFormat
00050 } QuantumFormatType;
00051 
00052 typedef enum
00053 {
00054   UndefinedQuantum,
00055   AlphaQuantum,
00056   BlackQuantum,
00057   BlueQuantum,
00058   CMYKAQuantum,
00059   CMYKQuantum,
00060   CyanQuantum,
00061   GrayAlphaQuantum,
00062   GrayQuantum,
00063   GreenQuantum,
00064   IndexAlphaQuantum,
00065   IndexQuantum,
00066   MagentaQuantum,
00067   OpacityQuantum,
00068   RedQuantum,
00069   RGBAQuantum,
00070   BGRAQuantum,
00071   RGBOQuantum,
00072   RGBQuantum,
00073   YellowQuantum,
00074   GrayPadQuantum,  /* deprecated */
00075   RGBPadQuantum,
00076   CbYCrYQuantum,
00077   CbYCrQuantum,
00078   CbYCrAQuantum,
00079   CMYKOQuantum,
00080   BGRQuantum,
00081   BGROQuantum
00082 } QuantumType;
00083 
00084 typedef struct _QuantumInfo
00085   QuantumInfo;
00086 
00087 static inline Quantum ClampToQuantum(const MagickRealType value)
00088 {
00089 #if defined(MAGICKCORE_HDRI_SUPPORT)
00090   return((Quantum) value);
00091 #else
00092   if (value <= 0.0f)
00093     return((Quantum) 0);
00094   if (value >= (MagickRealType) QuantumRange)
00095     return(QuantumRange);
00096   return((Quantum) (value+0.5f));
00097 #endif
00098 }
00099 
00100 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
00101 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
00102 {
00103 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00104   return((unsigned char) quantum);
00105 #else
00106   if (quantum <= 0.0)
00107     return(0);
00108   if (quantum >= 255.0)
00109     return(255);
00110   return((unsigned char) (quantum+0.5));
00111 #endif
00112 }
00113 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
00114 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
00115 {
00116 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00117   return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
00118 #else
00119   if (quantum <= 0.0)
00120     return(0);
00121   if ((quantum/257.0) >= 255.0)
00122     return(255);
00123   return((unsigned char) (quantum/257.0+0.5));
00124 #endif
00125 }
00126 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
00127 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
00128 {
00129 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00130   return((unsigned char) ((quantum+MagickULLConstant(8421504))/
00131     MagickULLConstant(16843009)));
00132 #else
00133   if (quantum <= 0.0)
00134     return(0);
00135   if ((quantum/16843009.0) >= 255.0)
00136     return(255);
00137   return((unsigned char) (quantum/16843009.0+0.5));
00138 #endif
00139 }
00140 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
00141 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
00142 {
00143 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00144   return((unsigned char) (quantum/72340172838076673.0+0.5));
00145 #else
00146   if (quantum <= 0.0)
00147     return(0);
00148   if ((quantum/72340172838076673.0) >= 255.0)
00149     return(255);
00150   return((unsigned char) (quantum/72340172838076673.0+0.5));
00151 #endif
00152 }
00153 #endif
00154 
00155 extern MagickExport EndianType
00156   GetQuantumEndian(const QuantumInfo *);
00157 
00158 extern MagickExport MagickBooleanType
00159   SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
00160   SetQuantumEndian(const Image *,QuantumInfo *,const EndianType),
00161   SetQuantumFormat(const Image *,QuantumInfo *,const QuantumFormatType),
00162   SetQuantumPad(const Image *,QuantumInfo *,const size_t);
00163 
00164 extern MagickExport QuantumFormatType
00165   GetQuantumFormat(const QuantumInfo *);
00166 
00167 extern MagickExport QuantumInfo
00168   *AcquireQuantumInfo(const ImageInfo *,Image *),
00169   *DestroyQuantumInfo(QuantumInfo *);
00170 
00171 extern MagickExport QuantumType
00172   GetQuantumType(Image *,ExceptionInfo *);
00173 
00174 extern MagickExport size_t
00175   ExportQuantumPixels(const Image *,const CacheView *,const QuantumInfo *,
00176     const QuantumType,unsigned char *magick_restrict,ExceptionInfo *),
00177   GetQuantumExtent(const Image *,const QuantumInfo *,const QuantumType),
00178   ImportQuantumPixels(Image *,CacheView *,const QuantumInfo *,const QuantumType,
00179     const unsigned char *magick_restrict,ExceptionInfo *);
00180 
00181 extern MagickExport unsigned char
00182   *GetQuantumPixels(const QuantumInfo *);
00183 
00184 extern MagickExport void
00185   GetQuantumInfo(const ImageInfo *,QuantumInfo *),
00186   SetQuantumAlphaType(QuantumInfo *,const QuantumAlphaType),
00187   SetQuantumImageType(Image *,const QuantumType),
00188   SetQuantumMinIsWhite(QuantumInfo *,const MagickBooleanType),
00189   SetQuantumPack(QuantumInfo *,const MagickBooleanType),
00190   SetQuantumQuantum(QuantumInfo *,const size_t),
00191   SetQuantumScale(QuantumInfo *,const double);
00192 
00193 #if defined(__cplusplus) || defined(c_plusplus)
00194 }
00195 #endif
00196 
00197 #endif

Generated on 23 Sep 2019 for MagickCore by  doxygen 1.6.1