MagickCore  6.9.7
quantum.h
Go to the documentation of this file.
1 /*
2  Copyright 1999-2017 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.
6  obtain a copy of the License at
7 
8  http://www.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)
26 extern "C" {
27 #endif
28 
29 #define RoundToQuantum(quantum) ClampToQuantum(quantum)
30 
31 typedef enum
32 {
36 } EndianType;
37 
38 typedef enum
39 {
44 
45 typedef enum
46 {
52 
53 typedef enum
54 {
75  GrayPadQuantum, /* deprecated */
83 } QuantumType;
84 
85 typedef struct _QuantumInfo
87 
88 static inline Quantum ClampToQuantum(const MagickRealType value)
89 {
90 #if defined(MAGICKCORE_HDRI_SUPPORT)
91  if (value < DBL_MIN)
92  return((Quantum) DBL_MIN);
93  if (value > DBL_MAX)
94  return((Quantum) DBL_MAX);
95  return((Quantum) value);
96 #else
97  if (value <= 0.0f)
98  return((Quantum) 0);
99  if (value >= (MagickRealType) QuantumRange)
100  return(QuantumRange);
101  return((Quantum) (value+0.5f));
102 #endif
103 }
104 
105 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
106 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
107 {
108 #if !defined(MAGICKCORE_HDRI_SUPPORT)
109  return((unsigned char) quantum);
110 #else
111  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
112  return(0);
113  if (quantum >= 255.0)
114  return(255);
115  return((unsigned char) (quantum+0.5));
116 #endif
117 }
118 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
119 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
120 {
121 #if !defined(MAGICKCORE_HDRI_SUPPORT)
122  return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
123 #else
124  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
125  return(0);
126  if ((quantum/257.0) >= 255.0)
127  return(255);
128  return((unsigned char) (quantum/257.0+0.5));
129 #endif
130 }
131 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
132 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
133 {
134 #if !defined(MAGICKCORE_HDRI_SUPPORT)
135  return((unsigned char) ((quantum+MagickULLConstant(8421504))/
136  MagickULLConstant(16843009)));
137 #else
138  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
139  return(0);
140  if ((quantum/16843009.0) >= 255.0)
141  return(255);
142  return((unsigned char) (quantum/16843009.0+0.5));
143 #endif
144 }
145 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
146 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
147 {
148 #if !defined(MAGICKCORE_HDRI_SUPPORT)
149  return((unsigned char) (quantum/72340172838076673.0+0.5));
150 #else
151  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
152  return(0);
153  if ((quantum/72340172838076673.0) >= 255.0)
154  return(255);
155  return((unsigned char) (quantum/72340172838076673.0+0.5));
156 #endif
157 }
158 #endif
159 
160 extern MagickExport EndianType
161  GetQuantumEndian(const QuantumInfo *);
162 
164  SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
165  SetQuantumEndian(const Image *,QuantumInfo *,const EndianType),
166  SetQuantumFormat(const Image *,QuantumInfo *,const QuantumFormatType),
167  SetQuantumPad(const Image *,QuantumInfo *,const size_t);
168 
169 extern MagickExport QuantumFormatType
170  GetQuantumFormat(const QuantumInfo *);
171 
173  *AcquireQuantumInfo(const ImageInfo *,Image *),
175 
176 extern MagickExport QuantumType
178 
179 extern MagickExport size_t
180  ExportQuantumPixels(const Image *,const CacheView *,const QuantumInfo *,
181  const QuantumType,unsigned char *magick_restrict,ExceptionInfo *),
182  GetQuantumExtent(const Image *,const QuantumInfo *,const QuantumType),
183  ImportQuantumPixels(Image *,CacheView *,const QuantumInfo *,const QuantumType,
184  const unsigned char *magick_restrict,ExceptionInfo *);
185 
186 extern MagickExport unsigned char
187  *GetQuantumPixels(const QuantumInfo *);
188 
189 extern MagickExport void
191  SetQuantumAlphaType(QuantumInfo *,const QuantumAlphaType),
192  SetQuantumImageType(Image *,const QuantumType),
195  SetQuantumQuantum(QuantumInfo *,const size_t),
196  SetQuantumScale(QuantumInfo *,const double);
197 
198 #if defined(__cplusplus) || defined(c_plusplus)
199 }
200 #endif
201 
202 #endif
#define magick_restrict
Definition: MagickCore.h:41
Definition: quantum.h:71
Definition: quantum.h:62
QuantumFormatType
Definition: quantum.h:45
Definition: quantum.h:59
Definition: quantum.h:79
MagickExport void SetQuantumImageType(Image *, const QuantumType)
Definition: quantum.h:48
MagickExport size_t ImportQuantumPixels(Image *, CacheView *, const QuantumInfo *, const QuantumType, const unsigned char *magick_restrict, ExceptionInfo *)
Definition: quantum.h:66
Definition: quantum.h:50
#define MagickULLConstant(c)
Definition: magick-type.h:40
MagickExport MagickBooleanType SetQuantumFormat(const Image *, QuantumInfo *, const QuantumFormatType)
MagickExport QuantumType GetQuantumType(Image *, ExceptionInfo *)
Definition: quantum.c:518
Definition: quantum.h:58
Definition: exception.h:102
Definition: quantum.h:67
Definition: quantum.h:75
Definition: image.h:361
MagickExport QuantumInfo * DestroyQuantumInfo(QuantumInfo *)
Definition: quantum.c:214
Definition: quantum.h:34
Definition: quantum.h:35
MagickExport void SetQuantumMinIsWhite(QuantumInfo *, const MagickBooleanType)
Definition: quantum.h:33
Definition: cache-view.c:65
float MagickRealType
Definition: magick-type.h:80
EndianType
Definition: quantum.h:31
Definition: image.h:152
size_t quantum
Definition: quantum-private.h:45
MagickExport size_t ExportQuantumPixels(const Image *, const CacheView *, const QuantumInfo *, const QuantumType, unsigned char *magick_restrict, ExceptionInfo *)
MagickExport MagickBooleanType SetQuantumDepth(const Image *, QuantumInfo *, const size_t)
Definition: quantum.h:69
Definition: quantum.h:49
Definition: quantum.h:73
MagickBooleanType
Definition: magick-type.h:215
Definition: quantum.h:42
Definition: quantum.h:72
Definition: quantum.h:80
Definition: quantum.h:57
Definition: quantum.h:78
Definition: quantum.h:47
Definition: quantum.h:55
Definition: quantum.h:81
Definition: quantum.h:70
Definition: quantum.h:64
Definition: quantum.h:40
Definition: quantum.h:74
Definition: quantum.h:56
Definition: quantum.h:61
Definition: quantum.h:60
Definition: quantum.h:68
MagickExport unsigned char * GetQuantumPixels(const QuantumInfo *)
Definition: quantum.c:486
MagickExport size_t GetQuantumExtent(const Image *, const QuantumInfo *, const QuantumType)
Definition: quantum-private.h:42
#define IsNaN(a)
Definition: magick-type.h:227
MagickExport void SetQuantumScale(QuantumInfo *, const double)
Definition: quantum.c:1004
static Quantum ClampToQuantum(const MagickRealType value)
Definition: quantum.h:88
Definition: quantum.h:65
Definition: magick-type.h:217
unsigned short Quantum
Definition: magick-type.h:97
MagickExport MagickBooleanType SetQuantumEndian(const Image *, QuantumInfo *, const EndianType)
Definition: quantum.h:77
MagickExport void SetQuantumQuantum(QuantumInfo *, const size_t)
MagickExport QuantumFormatType GetQuantumFormat(const QuantumInfo *)
Definition: quantum.c:384
MagickExport void GetQuantumInfo(const ImageInfo *, QuantumInfo *)
MagickExport MagickBooleanType SetQuantumPad(const Image *, QuantumInfo *, const size_t)
Definition: quantum.c:901
QuantumType
Definition: quantum.h:53
Definition: quantum.h:82
Definition: quantum.h:63
Definition: quantum.h:41
#define MagickExport
Definition: method-attribute.h:98
MagickExport EndianType GetQuantumEndian(const QuantumInfo *)
Definition: quantum.c:355
MagickExport void SetQuantumPack(QuantumInfo *, const MagickBooleanType)
Definition: quantum.h:76
QuantumAlphaType
Definition: quantum.h:38
MagickExport void SetQuantumAlphaType(QuantumInfo *, const QuantumAlphaType)
MagickExport QuantumInfo * AcquireQuantumInfo(const ImageInfo *, Image *)
#define QuantumRange
Definition: magick-type.h:98