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 
89 {
90 #if defined(MAGICKCORE_HDRI_SUPPORT)
91  return((Quantum) quantum);
92 #else
93  if (quantum <= 0.0f)
94  return((Quantum) 0);
95  if (quantum >= (MagickRealType) QuantumRange)
96  return(QuantumRange);
97  return((Quantum) (quantum+0.5f));
98 #endif
99 }
100 
101 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
102 static 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) != MagickFalse) || (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)
115 static 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) != MagickFalse) || (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)
128 static 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) != MagickFalse) || (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)
142 static 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) != MagickFalse) || (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 
156 extern MagickExport EndianType
157  GetQuantumEndian(const QuantumInfo *);
158 
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);
164 
165 extern MagickExport QuantumFormatType
166  GetQuantumFormat(const QuantumInfo *);
167 
169  *AcquireQuantumInfo(const ImageInfo *,Image *),
171 
172 extern MagickExport QuantumType
174 
175 extern 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 *);
181 
182 extern MagickExport unsigned char
183  *GetQuantumPixels(const QuantumInfo *);
184 
185 extern MagickExport void
187  SetQuantumAlphaType(QuantumInfo *,const QuantumAlphaType),
188  SetQuantumImageType(Image *,const QuantumType),
191  SetQuantumQuantum(QuantumInfo *,const size_t),
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
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:36
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:76
static Quantum ClampToQuantum(const MagickRealType quantum)
Definition: quantum.h:88
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:211
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:234
MagickExport void SetQuantumScale(QuantumInfo *, const double)
Definition: quantum.c:1004
Definition: quantum.h:65
Definition: magick-type.h:213
unsigned short Quantum
Definition: magick-type.h:93
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:94