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