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"
27 #define RoundToQuantum(quantum) ClampToQuantum(quantum)
38 UndefinedQuantumAlpha,
39 AssociatedQuantumAlpha,
40 DisassociatedQuantumAlpha
45 UndefinedQuantumFormat,
46 FloatingPointQuantumFormat,
82 typedef struct _QuantumInfo
85 static inline Quantum ClampToQuantum(const MagickRealType value)
87 #if defined(MAGICKCORE_HDRI_SUPPORT)
88 return((Quantum) value);
92 if (value >= (MagickRealType) QuantumRange)
93 return((Quantum) QuantumRange);
94 return((Quantum) (value+0.5));
98 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
99 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
101 #if !defined(MAGICKCORE_HDRI_SUPPORT)
102 return((unsigned char) quantum);
106 if (quantum >= 255.0)
108 return((unsigned char) (quantum+0.5));
111 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
112 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
114 #if !defined(MAGICKCORE_HDRI_SUPPORT)
115 return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
119 if ((quantum/257.0) >= 255.0)
121 return((unsigned char) (quantum/257.0+0.5));
124 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
125 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
127 #if !defined(MAGICKCORE_HDRI_SUPPORT)
128 return((unsigned char) ((quantum+MagickULLConstant(8421504))/
129 MagickULLConstant(16843009)));
133 if ((quantum/16843009.0) >= 255.0)
135 return((unsigned char) (quantum/16843009.0+0.5));
138 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
139 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
141 #if !defined(MAGICKCORE_HDRI_SUPPORT)
142 return((unsigned char) (quantum/72340172838076673.0+0.5));
146 if ((quantum/72340172838076673.0) >= 255.0)
148 return((unsigned char) (quantum/72340172838076673.0+0.5));
153 extern MagickExport MagickBooleanType
154 SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
155 SetQuantumFormat(const Image *,QuantumInfo *,const QuantumFormatType),
156 SetQuantumPad(const Image *,QuantumInfo *,const size_t);
158 extern MagickExport QuantumInfo
159 *AcquireQuantumInfo(const ImageInfo *,Image *),
160 *DestroyQuantumInfo(QuantumInfo *);
162 extern MagickExport QuantumType
163 GetQuantumType(Image *,ExceptionInfo *);
165 extern MagickExport size_t
166 ExportQuantumPixels(Image *,CacheView *,const QuantumInfo *,const QuantumType,
167 unsigned char *,ExceptionInfo *),
168 GetQuantumExtent(const Image *,const QuantumInfo *,const QuantumType),
169 ImportQuantumPixels(Image *,CacheView *,const QuantumInfo *,const QuantumType,
170 const unsigned char *,ExceptionInfo *);
172 extern MagickExport unsigned char
173 *GetQuantumPixels(const QuantumInfo *);
175 extern MagickExport void
176 GetQuantumInfo(const ImageInfo *,QuantumInfo *),
177 SetQuantumAlphaType(QuantumInfo *,const QuantumAlphaType),
178 SetQuantumImageType(Image *,const QuantumType),
179 SetQuantumMinIsWhite(QuantumInfo *,const MagickBooleanType),
180 SetQuantumPack(QuantumInfo *,const MagickBooleanType),
181 SetQuantumQuantum(QuantumInfo *,const size_t),
182 SetQuantumScale(QuantumInfo *,const double);
184 #if defined(__cplusplus) || defined(c_plusplus)