18#ifndef MAGICKCORE_QUANTUM_H
19#define MAGICKCORE_QUANTUM_H
22#include "MagickCore/image.h"
23#include "MagickCore/semaphore.h"
25#if defined(__cplusplus) || defined(c_plusplus)
38 UndefinedQuantumAlpha,
39 AssociatedQuantumAlpha,
40 DisassociatedQuantumAlpha
45 UndefinedQuantumFormat,
46 FloatingPointQuantumFormat,
86static inline Quantum ClampToQuantum(
const MagickRealType quantum)
88#if defined(MAGICKCORE_HDRI_SUPPORT)
89 return((Quantum) quantum);
91 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
93 if (quantum >= (MagickRealType) QuantumRange)
95 return((Quantum) (quantum+0.5));
99#if (MAGICKCORE_QUANTUM_DEPTH == 8)
100static inline unsigned char ScaleQuantumToChar(
const Quantum quantum)
102#if !defined(MAGICKCORE_HDRI_SUPPORT)
103 return((
unsigned char) quantum);
105 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
106 return((
unsigned char) 0);
107 if (quantum >= 255.0)
108 return((
unsigned char) 255);
109 return((
unsigned char) (quantum+0.5));
112#elif (MAGICKCORE_QUANTUM_DEPTH == 16)
113static inline unsigned char ScaleQuantumToChar(
const Quantum quantum)
115#if !defined(MAGICKCORE_HDRI_SUPPORT)
116 return((
unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
118 if ((IsNaN(quantum) != 0) || (quantum <= 0.0f))
119 return((
unsigned char) 0);
121 const Quantum scaled = quantum/257.0f;
122 if (scaled >= 255.0f)
123 return((
unsigned char) 255);
124 return((
unsigned char) (scaled+0.5f));
128#elif (MAGICKCORE_QUANTUM_DEPTH == 32)
129static inline unsigned char ScaleQuantumToChar(
const Quantum quantum)
131#if !defined(MAGICKCORE_HDRI_SUPPORT)
132 return((
unsigned char) ((quantum+MagickULLConstant(8421504))/
133 MagickULLConstant(16843009)));
135 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
138 const Quantum scaled = quantum/16843009.0;
140 return((
unsigned char) 255);
141 return((
unsigned char) (scaled+0.5));
145#elif (MAGICKCORE_QUANTUM_DEPTH == 64)
146static inline unsigned char ScaleQuantumToChar(
const Quantum quantum)
148#if !defined(MAGICKCORE_HDRI_SUPPORT)
149 return((
unsigned char) (quantum/72340172838076673.0+0.5));
151 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
154 const Quantum scaled = quantum/72340172838076673.0;
156 return((
unsigned char) 255);
157 return((
unsigned char) (scaled+0.5));
163extern MagickExport EndianType
166extern MagickExport MagickBooleanType
172extern MagickExport QuantumFormatType
179extern MagickExport QuantumType
182extern MagickExport
size_t
189extern MagickExport
unsigned char
192extern MagickExport
void
194 SetQuantumAlphaType(
QuantumInfo *,
const QuantumAlphaType),
195 SetQuantumImageType(
Image *,
const QuantumType),
196 SetQuantumMinIsWhite(
QuantumInfo *,
const MagickBooleanType),
197 SetQuantumPack(
QuantumInfo *,
const MagickBooleanType),
201#if defined(__cplusplus) || defined(c_plusplus)