MagickCore 6.9.12-20
Convert, Edit, Or Compose Bitmap Images
quantum.h
Go to the documentation of this file.
1/*
2 Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization
3 dedicated to making software imaging solutions freely available.
4
5 You may not use this file except in compliance with the License. You may
6 obtain a copy of the License at
7
8 https://imagemagick.org/script/license.php
9
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.
15
16 MagickCore quantum inline methods.
17*/
18#ifndef MAGICKCORE_QUANTUM_H
19#define MAGICKCORE_QUANTUM_H
20
21#include <float.h>
22#include "magick/image.h"
23#include "magick/semaphore.h"
24
25#if defined(__cplusplus) || defined(c_plusplus)
26extern "C" {
27#endif
28
29#define RoundToQuantum(quantum) ClampToQuantum(quantum)
30
31typedef enum
32{
37
38typedef enum
39{
44
45typedef enum
46{
52
53typedef enum
54{
75 GrayPadQuantum, /* deprecated */
84
85typedef struct _QuantumInfo
87
89{
90#if defined(MAGICKCORE_HDRI_SUPPORT)
91 return((Quantum) quantum);
92#else
93 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
94 return((Quantum) 0);
96 return(QuantumRange);
97 return((Quantum) (quantum+0.5));
98#endif
99}
100
101#if (MAGICKCORE_QUANTUM_DEPTH == 8)
102static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
103{
104#if !defined(MAGICKCORE_HDRI_SUPPORT)
105 return((unsigned char) quantum);
106#else
107 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
108 return(0);
109 if (quantum >= 255.0)
110 return(255);
111 return((unsigned char) (quantum+0.5));
112#endif
113}
114#elif (MAGICKCORE_QUANTUM_DEPTH == 16)
115static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
116{
117#if !defined(MAGICKCORE_HDRI_SUPPORT)
118 return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
119#else
120 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
121 return(0);
122 if ((quantum/257.0) >= 255.0)
123 return(255);
124 return((unsigned char) (quantum/257.0+0.5));
125#endif
126}
127#elif (MAGICKCORE_QUANTUM_DEPTH == 32)
128static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
129{
130#if !defined(MAGICKCORE_HDRI_SUPPORT)
131 return((unsigned char) ((quantum+MagickULLConstant(8421504))/
132 MagickULLConstant(16843009)));
133#else
134 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
135 return(0);
136 if ((quantum/16843009.0) >= 255.0)
137 return(255);
138 return((unsigned char) (quantum/16843009.0+0.5));
139#endif
140}
141#elif (MAGICKCORE_QUANTUM_DEPTH == 64)
142static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
143{
144#if !defined(MAGICKCORE_HDRI_SUPPORT)
145 return((unsigned char) (quantum/72340172838076673.0+0.5));
146#else
147 if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
148 return(0);
149 if ((quantum/72340172838076673.0) >= 255.0)
150 return(255);
151 return((unsigned char) (quantum/72340172838076673.0+0.5));
152#endif
153}
154#endif
155
158
160 SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
163 SetQuantumPad(const Image *,QuantumInfo *,const size_t);
164
167
171
174
175extern MagickExport size_t
177 const QuantumType,unsigned char *magick_restrict,ExceptionInfo *),
180 const unsigned char *magick_restrict,ExceptionInfo *);
181
182extern MagickExport unsigned char
184
185extern MagickExport void
192 SetQuantumScale(QuantumInfo *,const double);
193
194#if defined(__cplusplus) || defined(c_plusplus)
195}
196#endif
197
198#endif
#define magick_restrict
Definition: MagickCore.h:41
#define MagickULLConstant(c)
Definition: magick-type.h:39
MagickDoubleType MagickRealType
Definition: magick-type.h:125
#define QuantumRange
Definition: magick-type.h:86
unsigned short Quantum
Definition: magick-type.h:85
MagickBooleanType
Definition: magick-type.h:199
#define IsNaN(a)
Definition: magick-type.h:221
#define MagickExport
Definition: method-attribute.h:80
MagickExport MagickBooleanType SetQuantumPad(const Image *, QuantumInfo *, const size_t)
Definition: quantum.c:908
static Quantum ClampToQuantum(const MagickRealType quantum)
Definition: quantum.h:88
QuantumFormatType
Definition: quantum.h:46
@ UnsignedQuantumFormat
Definition: quantum.h:50
@ UndefinedQuantumFormat
Definition: quantum.h:47
@ SignedQuantumFormat
Definition: quantum.h:49
@ FloatingPointQuantumFormat
Definition: quantum.h:48
MagickExport void SetQuantumPack(QuantumInfo *, const MagickBooleanType)
MagickExport EndianType GetQuantumEndian(const QuantumInfo *)
Definition: quantum.c:359
MagickExport QuantumType GetQuantumType(Image *, ExceptionInfo *)
Definition: quantum.c:522
QuantumType
Definition: quantum.h:54
@ OpacityQuantum
Definition: quantum.h:68
@ MagentaQuantum
Definition: quantum.h:67
@ GrayPadQuantum
Definition: quantum.h:75
@ AlphaQuantum
Definition: quantum.h:56
@ IndexQuantum
Definition: quantum.h:66
@ GrayAlphaQuantum
Definition: quantum.h:62
@ CyanQuantum
Definition: quantum.h:61
@ RGBPadQuantum
Definition: quantum.h:76
@ BGROQuantum
Definition: quantum.h:82
@ CMYKOQuantum
Definition: quantum.h:80
@ CMYKAQuantum
Definition: quantum.h:59
@ CbYCrAQuantum
Definition: quantum.h:79
@ RGBAQuantum
Definition: quantum.h:70
@ RGBQuantum
Definition: quantum.h:73
@ GrayQuantum
Definition: quantum.h:63
@ BGRAQuantum
Definition: quantum.h:71
@ BlackQuantum
Definition: quantum.h:57
@ RedQuantum
Definition: quantum.h:69
@ IndexAlphaQuantum
Definition: quantum.h:65
@ CbYCrYQuantum
Definition: quantum.h:77
@ UndefinedQuantum
Definition: quantum.h:55
@ BGRQuantum
Definition: quantum.h:81
@ GreenQuantum
Definition: quantum.h:64
@ CMYKQuantum
Definition: quantum.h:60
@ CbYCrQuantum
Definition: quantum.h:78
@ YellowQuantum
Definition: quantum.h:74
@ RGBOQuantum
Definition: quantum.h:72
@ BlueQuantum
Definition: quantum.h:58
MagickExport void SetQuantumAlphaType(QuantumInfo *, const QuantumAlphaType)
MagickExport QuantumInfo * AcquireQuantumInfo(const ImageInfo *, Image *)
MagickExport void SetQuantumImageType(Image *, const QuantumType)
MagickExport MagickBooleanType SetQuantumDepth(const Image *, QuantumInfo *, const size_t)
MagickExport QuantumInfo * DestroyQuantumInfo(QuantumInfo *)
Definition: quantum.c:214
MagickExport size_t ExportQuantumPixels(const Image *, const CacheView *, const QuantumInfo *, const QuantumType, unsigned char *magick_restrict, ExceptionInfo *)
MagickExport size_t GetQuantumExtent(const Image *, const QuantumInfo *, const QuantumType)
MagickExport size_t ImportQuantumPixels(Image *, CacheView *, const QuantumInfo *, const QuantumType, const unsigned char *magick_restrict, ExceptionInfo *)
QuantumAlphaType
Definition: quantum.h:39
@ AssociatedQuantumAlpha
Definition: quantum.h:41
@ DisassociatedQuantumAlpha
Definition: quantum.h:42
@ UndefinedQuantumAlpha
Definition: quantum.h:40
MagickExport unsigned char * GetQuantumPixels(const QuantumInfo *)
Definition: quantum.c:490
MagickExport void SetQuantumMinIsWhite(QuantumInfo *, const MagickBooleanType)
MagickExport MagickBooleanType SetQuantumEndian(const Image *, QuantumInfo *, const EndianType)
MagickExport void SetQuantumQuantum(QuantumInfo *, const size_t)
MagickExport QuantumFormatType GetQuantumFormat(const QuantumInfo *)
Definition: quantum.c:388
MagickExport void SetQuantumScale(QuantumInfo *, const double)
Definition: quantum.c:1011
EndianType
Definition: quantum.h:32
@ MSBEndian
Definition: quantum.h:35
@ LSBEndian
Definition: quantum.h:34
@ UndefinedEndian
Definition: quantum.h:33
MagickExport void GetQuantumInfo(const ImageInfo *, QuantumInfo *)
MagickExport MagickBooleanType SetQuantumFormat(const Image *, QuantumInfo *, const QuantumFormatType)
Definition: cache-view.c:66
Definition: exception.h:103
Definition: image.h:362
Definition: image.h:153
Definition: quantum-private.h:46
size_t quantum
Definition: quantum-private.h:49