MagickCore  7.0.9
Convert, Edit, Or Compose Bitmap Images
quantum.h
Go to the documentation of this file.
1 /*
2  Copyright 1999-2019 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 "MagickCore/image.h"
23 #include "MagickCore/semaphore.h"
24 
25 #if defined(__cplusplus) || defined(c_plusplus)
26 extern "C" {
27 #endif
28 
29 typedef enum
30 {
34 } EndianType;
35 
36 typedef enum
37 {
42 
43 typedef enum
44 {
50 
51 typedef enum
52 {
80 } QuantumType;
81 
82 typedef struct _QuantumInfo
84 
85 static inline Quantum ClampToQuantum(const MagickRealType value)
86 {
87 #if defined(MAGICKCORE_HDRI_SUPPORT)
88  if (value < DBL_MIN)
89  return((Quantum) DBL_MIN);
90  if (value > DBL_MAX)
91  return((Quantum) DBL_MAX);
92  return((Quantum) value);
93 #else
94  if (value <= 0.0f)
95  return((Quantum) 0);
96  if (value >= (MagickRealType) QuantumRange)
97  return(QuantumRange);
98  return((Quantum) (value+0.5f));
99 #endif
100 }
101 
102 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
103 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
104 {
105 #if !defined(MAGICKCORE_HDRI_SUPPORT)
106  return((unsigned char) quantum);
107 #else
108  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
109  return(0);
110  if (quantum >= 255.0)
111  return(255);
112  return((unsigned char) (quantum+0.5));
113 #endif
114 }
115 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
116 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
117 {
118 #if !defined(MAGICKCORE_HDRI_SUPPORT)
119  return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
120 #else
121  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
122  return(0);
123  if ((quantum/257.0) >= 255.0)
124  return(255);
125  return((unsigned char) (quantum/257.0+0.5));
126 #endif
127 }
128 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
129 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
130 {
131 #if !defined(MAGICKCORE_HDRI_SUPPORT)
132  return((unsigned char) ((quantum+MagickULLConstant(8421504))/
133  MagickULLConstant(16843009)));
134 #else
135  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
136  return(0);
137  if ((quantum/16843009.0) >= 255.0)
138  return(255);
139  return((unsigned char) (quantum/16843009.0+0.5));
140 #endif
141 }
142 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
143 static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
144 {
145 #if !defined(MAGICKCORE_HDRI_SUPPORT)
146  return((unsigned char) (quantum/72340172838076673.0+0.5));
147 #else
148  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
149  return(0);
150  if ((quantum/72340172838076673.0) >= 255.0)
151  return(255);
152  return((unsigned char) (quantum/72340172838076673.0+0.5));
153 #endif
154 }
155 #endif
156 
158  GetQuantumEndian(const QuantumInfo *);
159 
161  SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
162  SetQuantumEndian(const Image *,QuantumInfo *,const EndianType),
164  SetQuantumPad(const Image *,QuantumInfo *,const size_t);
165 
167  GetQuantumFormat(const QuantumInfo *);
168 
170  *AcquireQuantumInfo(const ImageInfo *,Image *),
172 
175 
176 extern MagickExport size_t
178  unsigned char *magick_restrict,ExceptionInfo *),
179  GetQuantumExtent(const Image *,const QuantumInfo *,const QuantumType),
181  const unsigned char *magick_restrict,ExceptionInfo *);
182 
183 extern MagickExport unsigned char
184  *GetQuantumPixels(const QuantumInfo *);
185 
186 extern MagickExport void
192  SetQuantumQuantum(QuantumInfo *,const size_t),
193  SetQuantumScale(QuantumInfo *,const double);
194 
195 #if defined(__cplusplus) || defined(c_plusplus)
196 }
197 #endif
198 
199 #endif
#define magick_restrict
Definition: MagickCore.h:41
Definition: quantum.h:55
Definition: quantum.h:67
MagickDoubleType MagickRealType
Definition: magick-type.h:120
QuantumFormatType
Definition: quantum.h:43
Definition: quantum.h:63
MagickExport EndianType GetQuantumEndian(const QuantumInfo *quantum_info)
Definition: quantum.c:358
Definition: quantum.h:60
MagickExport MagickBooleanType SetQuantumFormat(const Image *image, QuantumInfo *quantum_info, const QuantumFormatType format)
Definition: quantum.c:766
Definition: quantum.h:46
Definition: quantum.h:71
Definition: quantum.h:48
#define MagickULLConstant(c)
Definition: magick-type.h:36
Definition: quantum.h:59
Definition: exception.h:101
Definition: quantum.h:72
Definition: image.h:375
Definition: quantum.h:32
Definition: quantum.h:33
Definition: quantum.h:31
Definition: cache-view.c:65
MagickExport MagickBooleanType SetQuantumEndian(const Image *image, QuantumInfo *quantum_info, const EndianType endian)
Definition: quantum.c:726
EndianType
Definition: quantum.h:29
Definition: image.h:151
size_t quantum
Definition: quantum-private.h:48
Definition: quantum.h:74
Definition: quantum.h:47
Definition: quantum.h:78
MagickBooleanType
Definition: magick-type.h:158
MagickExport size_t ImportQuantumPixels(const Image *image, CacheView *image_view, QuantumInfo *quantum_info, const QuantumType quantum_type, const unsigned char *magick_restrict pixels, ExceptionInfo *exception)
Definition: quantum-import.c:4093
Definition: quantum.h:40
Definition: quantum.h:76
MagickExport MagickBooleanType SetQuantumDepth(const Image *image, QuantumInfo *quantum_info, const size_t depth)
Definition: quantum.c:662
Definition: quantum.h:64
Definition: quantum.h:58
Definition: quantum.h:61
Definition: quantum.h:45
MagickExport MagickBooleanType SetQuantumPad(const Image *image, QuantumInfo *quantum_info, const size_t pad)
Definition: quantum.c:906
MagickExport void SetQuantumAlphaType(QuantumInfo *quantum_info, const QuantumAlphaType type)
Definition: quantum.c:627
Definition: quantum.h:53
Definition: quantum.h:57
Definition: quantum.h:75
Definition: quantum.h:69
Definition: quantum.h:38
Definition: quantum.h:79
MagickExport void SetQuantumScale(QuantumInfo *quantum_info, const double scale)
Definition: quantum.c:1009
Definition: quantum.h:54
Definition: quantum.h:66
Definition: quantum.h:65
MagickExport size_t ExportQuantumPixels(const Image *image, CacheView *image_view, QuantumInfo *quantum_info, const QuantumType quantum_type, unsigned char *magick_restrict pixels, ExceptionInfo *exception)
Definition: quantum-export.c:3867
MagickExport unsigned char * GetQuantumPixels(const QuantumInfo *quantum_info)
Definition: quantum.c:489
Definition: quantum.h:73
MagickExport void SetQuantumMinIsWhite(QuantumInfo *quantum_info, const MagickBooleanType min_is_white)
Definition: quantum.c:944
MagickExport void SetQuantumImageType(Image *image, const QuantumType quantum_type)
Definition: quantum.c:805
Definition: quantum-private.h:45
#define IsNaN(a)
Definition: magick-type.h:181
static Quantum ClampToQuantum(const MagickRealType value)
Definition: quantum.h:85
Definition: quantum.h:70
Definition: magick-type.h:160
MagickExport QuantumFormatType GetQuantumFormat(const QuantumInfo *quantum_info)
Definition: quantum.c:387
unsigned short Quantum
Definition: magick-type.h:82
MagickExport void SetQuantumQuantum(QuantumInfo *quantum_info, const size_t quantum)
Definition: quantum.c:977
Definition: quantum.h:62
QuantumType
Definition: quantum.h:51
Definition: quantum.h:56
Definition: quantum.h:68
Definition: quantum.h:39
#define MagickExport
Definition: method-attribute.h:80
Definition: quantum.h:77
MagickExport void GetQuantumInfo(const ImageInfo *image_info, QuantumInfo *quantum_info)
Definition: quantum.c:418
MagickExport QuantumInfo * AcquireQuantumInfo(const ImageInfo *image_info, Image *image)
Definition: quantum.c:110
QuantumAlphaType
Definition: quantum.h:36
MagickExport void SetQuantumPack(QuantumInfo *quantum_info, const MagickBooleanType pack)
Definition: quantum.c:871
#define QuantumRange
Definition: magick-type.h:83
MagickExport QuantumInfo * DestroyQuantumInfo(QuantumInfo *quantum_info)
Definition: quantum.c:213
MagickExport size_t GetQuantumExtent(const Image *image, const QuantumInfo *quantum_info, const QuantumType quantum_type)
Definition: quantum.c:306
MagickExport QuantumType GetQuantumType(Image *image, ExceptionInfo *exception)
Definition: quantum.c:523