MagickCore 6.9.11-60
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:129
#define QuantumRange
Definition magick-type.h:90
unsigned short Quantum
Definition magick-type.h:89
MagickBooleanType
Definition magick-type.h:203
#define IsNaN(a)
Definition magick-type.h:225
#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