2 Copyright 1999-2008 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 #if defined(__cplusplus) || defined(c_plusplus)
25 #include "MagickCore/semaphore.h"
36 UndefinedQuantumAlpha,
37 AssociatedQuantumAlpha,
38 DisassociatedQuantumAlpha
43 UndefinedQuantumFormat,
44 FloatingPointQuantumFormat,
80 typedef struct _QuantumInfo
83 static inline Quantum ClampToQuantum(const double value)
85 #if defined(MAGICKCORE_HDRI_SUPPORT)
86 return((Quantum) value);
90 if (value >= (double) QuantumRange)
92 return((Quantum) (value+0.5));
96 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
97 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
99 #if !defined(MAGICKCORE_HDRI_SUPPORT)
100 return((unsigned char) quantum);
104 if (quantum >= 255.0)
106 return((unsigned char) (quantum+0.5));
109 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
110 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
112 #if !defined(MAGICKCORE_HDRI_SUPPORT)
113 return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
117 if ((quantum/257.0) >= 255.0)
119 return((unsigned char) (quantum/257.0+0.5));
122 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
123 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
125 #if !defined(MAGICKCORE_HDRI_SUPPORT)
126 return((unsigned char) ((quantum+MagickULLConstant(8421504))/
127 MagickULLConstant(16843009)));
131 if ((quantum/16843009.0) >= 255.0)
133 return((unsigned char) (quantum/16843009.0+0.5));
136 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
137 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
139 #if !defined(MAGICKCORE_HDRI_SUPPORT)
140 return((unsigned char) (quantum/72340172838076673.0+0.5));
144 if ((quantum/72340172838076673.0) >= 255.0)
146 return((unsigned char) (quantum/72340172838076673.0+0.5));
151 extern MagickExport MagickBooleanType
152 SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
153 SetQuantumFormat(const Image *,QuantumInfo *,const QuantumFormatType),
154 SetQuantumPad(const Image *,QuantumInfo *,const size_t);
156 extern MagickExport QuantumFormatType
157 GetQuantumFormat(const QuantumInfo *);
159 extern MagickExport QuantumInfo
160 *AcquireQuantumInfo(const ImageInfo *,Image *),
161 *DestroyQuantumInfo(QuantumInfo *);
163 extern MagickExport QuantumType
164 GetQuantumType(Image *,ExceptionInfo *);
166 extern MagickExport size_t
167 ExportQuantumPixels(const Image *,CacheView *,QuantumInfo *,const QuantumType,
168 unsigned char *,ExceptionInfo *),
169 GetQuantumExtent(const Image *,const QuantumInfo *,const QuantumType),
170 ImportQuantumPixels(const Image *,CacheView *,QuantumInfo *,const QuantumType,
171 const unsigned char *,ExceptionInfo *);
173 extern MagickExport unsigned char
174 *GetQuantumPixels(const QuantumInfo *);
176 extern MagickExport void
177 GetQuantumInfo(const ImageInfo *,QuantumInfo *),
178 SetQuantumAlphaType(QuantumInfo *,const QuantumAlphaType),
179 SetQuantumImageType(Image *,const QuantumType),
180 SetQuantumMinIsWhite(QuantumInfo *,const MagickBooleanType),
181 SetQuantumPack(QuantumInfo *,const MagickBooleanType),
182 SetQuantumQuantum(QuantumInfo *,const size_t),
183 SetQuantumScale(QuantumInfo *,const double);
185 #if defined(__cplusplus) || defined(c_plusplus)