18#ifndef MAGICKCORE_QUANTUM_H
19#define MAGICKCORE_QUANTUM_H
22#include "magick/image.h"
23#include "magick/semaphore.h"
25#if defined(__cplusplus) || defined(c_plusplus)
29#define RoundToQuantum(quantum) ClampToQuantum(quantum)
40 UndefinedQuantumAlpha,
41 AssociatedQuantumAlpha,
42 DisassociatedQuantumAlpha
47 UndefinedQuantumFormat,
48 FloatingPointQuantumFormat,
88static inline Quantum ClampToQuantum(
const MagickRealType quantum)
90#if defined(MAGICKCORE_HDRI_SUPPORT)
91 return((Quantum) quantum);
93 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
95 if (quantum >= (MagickRealType) QuantumRange)
97 return((Quantum) (quantum+0.5));
101#if (MAGICKCORE_QUANTUM_DEPTH == 8)
102static inline unsigned char ScaleQuantumToChar(
const Quantum quantum)
104#if !defined(MAGICKCORE_HDRI_SUPPORT)
105 return((
unsigned char) quantum);
107 if ((IsNaN(quantum) != 0) || (quantum <= 0.0f))
109 if (quantum >= 255.0)
111 return((
unsigned char) (quantum+0.5f));
114#elif (MAGICKCORE_QUANTUM_DEPTH == 16)
115static inline unsigned char ScaleQuantumToChar(
const Quantum quantum)
117#if !defined(MAGICKCORE_HDRI_SUPPORT)
118 return((
unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
120 if ((IsNaN(quantum) != 0) || (quantum <= 0.0f))
122 if ((quantum/257.0f) >= 255.0f)
124 return((
unsigned char) (quantum/257.0f+0.5f));
127#elif (MAGICKCORE_QUANTUM_DEPTH == 32)
128static inline unsigned char ScaleQuantumToChar(
const Quantum quantum)
130#if !defined(MAGICKCORE_HDRI_SUPPORT)
131 return((
unsigned char) ((quantum+MagickULLConstant(8421504))/
132 MagickULLConstant(16843009)));
134 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
136 if ((quantum/16843009.0) >= 255.0)
138 return((
unsigned char) (quantum/16843009.0+0.5));
141#elif (MAGICKCORE_QUANTUM_DEPTH == 64)
142static inline unsigned char ScaleQuantumToChar(
const Quantum quantum)
144#if !defined(MAGICKCORE_HDRI_SUPPORT)
145 return((
unsigned char) (quantum/72340172838076673.0+0.5));
147 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
149 if ((quantum/72340172838076673.0) >= 255.0)
151 return((
unsigned char) (quantum/72340172838076673.0+0.5));
156extern MagickExport EndianType
157 GetQuantumEndian(
const QuantumInfo *);
159extern MagickExport MagickBooleanType
160 SetQuantumDepth(
const Image *,QuantumInfo *,
const size_t),
161 SetQuantumEndian(
const Image *,QuantumInfo *,
const EndianType),
162 SetQuantumFormat(
const Image *,QuantumInfo *,
const QuantumFormatType),
163 SetQuantumPad(
const Image *,QuantumInfo *,
const size_t);
165extern MagickExport QuantumFormatType
166 GetQuantumFormat(
const QuantumInfo *);
168extern MagickExport QuantumInfo
169 *AcquireQuantumInfo(
const ImageInfo *,Image *),
170 *DestroyQuantumInfo(QuantumInfo *);
172extern MagickExport QuantumType
173 GetQuantumType(Image *,ExceptionInfo *);
175extern MagickExport
size_t
176 ExportQuantumPixels(
const Image *,
const CacheView *,
const QuantumInfo *,
177 const QuantumType,
unsigned char *magick_restrict,ExceptionInfo *),
178 GetQuantumExtent(
const Image *,
const QuantumInfo *,
const QuantumType),
179 ImportQuantumPixels(Image *,CacheView *,
const QuantumInfo *,
const QuantumType,
180 const unsigned char *magick_restrict,ExceptionInfo *);
182extern MagickExport
unsigned char
183 *GetQuantumPixels(
const QuantumInfo *);
185extern MagickExport
void
186 GetQuantumInfo(
const ImageInfo *,QuantumInfo *),
187 SetQuantumAlphaType(QuantumInfo *,
const QuantumAlphaType),
188 SetQuantumImageType(Image *,
const QuantumType),
189 SetQuantumMinIsWhite(QuantumInfo *,
const MagickBooleanType),
190 SetQuantumPack(QuantumInfo *,
const MagickBooleanType),
191 SetQuantumQuantum(QuantumInfo *,
const size_t),
192 SetQuantumScale(QuantumInfo *,
const double);
194#if defined(__cplusplus) || defined(c_plusplus)