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 "MagickCore/image.h"
00022 #include "MagickCore/semaphore.h"
00023 
00024 #if defined(__cplusplus) || defined(c_plusplus)
00025 extern "C" {
00026 #endif
00027 
00028 typedef enum
00029 {
00030   UndefinedEndian,
00031   LSBEndian,
00032   MSBEndian
00033 } EndianType;
00034 
00035 typedef enum
00036 {
00037   UndefinedQuantumAlpha,
00038   AssociatedQuantumAlpha,
00039   DisassociatedQuantumAlpha
00040 } QuantumAlphaType;
00041 
00042 typedef enum
00043 {
00044   UndefinedQuantumFormat,
00045   FloatingPointQuantumFormat,
00046   SignedQuantumFormat,
00047   UnsignedQuantumFormat
00048 } QuantumFormatType;
00049 
00050 typedef enum
00051 {
00052   UndefinedQuantum,
00053   AlphaQuantum,
00054   BGRAQuantum,
00055   BGROQuantum,
00056   BGRQuantum,
00057   BlackQuantum,
00058   BlueQuantum,
00059   CbYCrAQuantum,
00060   CbYCrQuantum,
00061   CbYCrYQuantum,
00062   CMYKAQuantum,
00063   CMYKOQuantum,
00064   CMYKQuantum,
00065   CyanQuantum,
00066   GrayAlphaQuantum,
00067   GrayQuantum,
00068   GreenQuantum,
00069   IndexAlphaQuantum,
00070   IndexQuantum,
00071   MagentaQuantum,
00072   OpacityQuantum,
00073   RedQuantum,
00074   RGBAQuantum,
00075   RGBOQuantum,
00076   RGBPadQuantum,
00077   RGBQuantum,
00078   YellowQuantum
00079 } QuantumType;
00080 
00081 typedef struct _QuantumInfo
00082   QuantumInfo;
00083 
00084 static inline Quantum ClampToQuantum(const MagickRealType value)
00085 {
00086 #if defined(MAGICKCORE_HDRI_SUPPORT)
00087   return((Quantum) value);
00088 #else
00089   if (value <= 0.0f)
00090     return((Quantum) 0);
00091   if (value >= (MagickRealType) QuantumRange)
00092     return(QuantumRange);
00093   return((Quantum) (value+0.5f));
00094 #endif
00095 }
00096 
00097 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
00098 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
00099 {
00100 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00101   return((unsigned char) quantum);
00102 #else
00103   if (quantum <= 0.0)
00104     return(0);
00105   if (quantum >= 255.0)
00106     return(255);
00107   return((unsigned char) (quantum+0.5));
00108 #endif
00109 }
00110 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
00111 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
00112 {
00113 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00114   return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
00115 #else
00116   if (quantum <= 0.0)
00117     return(0);
00118   if ((quantum/257.0) >= 255.0)
00119     return(255);
00120   return((unsigned char) (quantum/257.0+0.5));
00121 #endif
00122 }
00123 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
00124 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
00125 {
00126 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00127   return((unsigned char) ((quantum+MagickULLConstant(8421504))/
00128     MagickULLConstant(16843009)));
00129 #else
00130   if (quantum <= 0.0)
00131     return(0);
00132   if ((quantum/16843009.0) >= 255.0)
00133     return(255);
00134   return((unsigned char) (quantum/16843009.0+0.5));
00135 #endif
00136 }
00137 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
00138 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
00139 {
00140 #if !defined(MAGICKCORE_HDRI_SUPPORT)
00141   return((unsigned char) (quantum/72340172838076673.0+0.5));
00142 #else
00143   if (quantum <= 0.0)
00144     return(0);
00145   if ((quantum/72340172838076673.0) >= 255.0)
00146     return(255);
00147   return((unsigned char) (quantum/72340172838076673.0+0.5));
00148 #endif
00149 }
00150 #endif
00151 
00152 extern MagickExport EndianType
00153   GetQuantumEndian(const QuantumInfo *);
00154 
00155 extern MagickExport MagickBooleanType
00156   SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
00157   SetQuantumEndian(const Image *,QuantumInfo *,const EndianType),
00158   SetQuantumFormat(const Image *,QuantumInfo *,const QuantumFormatType),
00159   SetQuantumPad(const Image *,QuantumInfo *,const size_t);
00160 
00161 extern MagickExport QuantumFormatType
00162   GetQuantumFormat(const QuantumInfo *);
00163 
00164 extern MagickExport QuantumInfo
00165   *AcquireQuantumInfo(const ImageInfo *,Image *),
00166   *DestroyQuantumInfo(QuantumInfo *);
00167 
00168 extern MagickExport QuantumType
00169   GetQuantumType(Image *,ExceptionInfo *);
00170 
00171 extern MagickExport size_t
00172   ExportQuantumPixels(const Image *,CacheView *,QuantumInfo *,const QuantumType,
00173     unsigned char *magick_restrict,ExceptionInfo *),
00174   GetQuantumExtent(const Image *,const QuantumInfo *,const QuantumType),
00175   ImportQuantumPixels(const Image *,CacheView *,QuantumInfo *,const QuantumType,
00176     const unsigned char *magick_restrict,ExceptionInfo *);
00177 
00178 extern MagickExport unsigned char
00179   *GetQuantumPixels(const QuantumInfo *);
00180 
00181 extern MagickExport void
00182   GetQuantumInfo(const ImageInfo *,QuantumInfo *),
00183   SetQuantumAlphaType(QuantumInfo *,const QuantumAlphaType),
00184   SetQuantumImageType(Image *,const QuantumType),
00185   SetQuantumMinIsWhite(QuantumInfo *,const MagickBooleanType),
00186   SetQuantumPack(QuantumInfo *,const MagickBooleanType),
00187   SetQuantumQuantum(QuantumInfo *,const size_t),
00188   SetQuantumScale(QuantumInfo *,const double);
00189 
00190 #if defined(__cplusplus) || defined(c_plusplus)
00191 }
00192 #endif
00193 
00194 #endif

Generated on 19 Aug 2019 for MagickCore by  doxygen 1.6.1