2 Copyright 1999-2014 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
5 You may not use this file except in compliance with the License.
6 obtain a copy of the License at
8 http://www.imagemagick.org/script/license.php
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
16 MagickCore quantum inline methods.
18 #ifndef _MAGICKCORE_QUANTUM_H
19 #define _MAGICKCORE_QUANTUM_H
21 #include "MagickCore/image.h"
22 #include "MagickCore/semaphore.h"
24 #if defined(__cplusplus) || defined(c_plusplus)
37 UndefinedQuantumAlpha,
38 AssociatedQuantumAlpha,
39 DisassociatedQuantumAlpha
44 UndefinedQuantumFormat,
45 FloatingPointQuantumFormat,
81 typedef struct _QuantumInfo
84 static inline Quantum ClampToQuantum(const MagickRealType value)
86 #if defined(MAGICKCORE_HDRI_SUPPORT)
87 return((Quantum) value);
91 if (value >= (MagickRealType) QuantumRange)
93 return((Quantum) (value+0.5f));
97 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
98 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
100 #if !defined(MAGICKCORE_HDRI_SUPPORT)
101 return((unsigned char) quantum);
105 if (quantum >= 255.0)
107 return((unsigned char) (quantum+0.5));
110 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
111 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
113 #if !defined(MAGICKCORE_HDRI_SUPPORT)
114 return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
118 if ((quantum/257.0) >= 255.0)
120 return((unsigned char) (quantum/257.0+0.5));
123 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
124 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
126 #if !defined(MAGICKCORE_HDRI_SUPPORT)
127 return((unsigned char) ((quantum+MagickULLConstant(8421504))/
128 MagickULLConstant(16843009)));
132 if ((quantum/16843009.0) >= 255.0)
134 return((unsigned char) (quantum/16843009.0+0.5));
137 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
138 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
140 #if !defined(MAGICKCORE_HDRI_SUPPORT)
141 return((unsigned char) (quantum/72340172838076673.0+0.5));
145 if ((quantum/72340172838076673.0) >= 255.0)
147 return((unsigned char) (quantum/72340172838076673.0+0.5));
152 extern MagickExport EndianType
153 GetQuantumEndian(const QuantumInfo *);
155 extern MagickExport MagickBooleanType
156 SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
157 SetQuantumEndian(const Image *,QuantumInfo *,const EndianType),
158 SetQuantumFormat(const Image *,QuantumInfo *,const QuantumFormatType),
159 SetQuantumPad(const Image *,QuantumInfo *,const size_t);
161 extern MagickExport QuantumFormatType
162 GetQuantumFormat(const QuantumInfo *);
164 extern MagickExport QuantumInfo
165 *AcquireQuantumInfo(const ImageInfo *,Image *),
166 *DestroyQuantumInfo(QuantumInfo *);
168 extern MagickExport QuantumType
169 GetQuantumType(Image *,ExceptionInfo *);
171 extern MagickExport size_t
172 ExportQuantumPixels(const Image *,CacheView *,QuantumInfo *,const QuantumType,
173 unsigned char *,ExceptionInfo *),
174 GetQuantumExtent(const Image *,const QuantumInfo *,const QuantumType),
175 ImportQuantumPixels(const Image *,CacheView *,QuantumInfo *,const QuantumType,
176 const unsigned char *,ExceptionInfo *);
178 extern MagickExport unsigned char
179 *GetQuantumPixels(const QuantumInfo *);
181 extern MagickExport void
182 GetQuantumInfo(const ImageInfo *,QuantumInfo *),
183 SetQuantumAlphaType(QuantumInfo *,const QuantumAlphaType),
184 SetQuantumImageType(Image *,const QuantumType),
185 SetQuantumMinIsWhite(QuantumInfo *,const MagickBooleanType),
186 SetQuantumPack(QuantumInfo *,const MagickBooleanType),
187 SetQuantumQuantum(QuantumInfo *,const size_t),
188 SetQuantumScale(QuantumInfo *,const double);
190 #if defined(__cplusplus) || defined(c_plusplus)