MagickCore  6.9.10
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.
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)
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);
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 
157  GetQuantumEndian(const QuantumInfo *);
158 
160  SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
161  SetQuantumEndian(const Image *,QuantumInfo *,const EndianType),
163  SetQuantumPad(const Image *,QuantumInfo *,const size_t);
164 
166  GetQuantumFormat(const QuantumInfo *);
167 
169  *AcquireQuantumInfo(const ImageInfo *,Image *),
171 
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),
180  const unsigned char *magick_restrict,ExceptionInfo *);
181 
182 extern MagickExport unsigned char
183  *GetQuantumPixels(const QuantumInfo *);
184 
185 extern MagickExport void
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
_Image::colorspace
ColorspaceType colorspace
Definition: image.h:158
DisassociatedQuantumAlpha
@ DisassociatedQuantumAlpha
Definition: quantum.h:42
DestroyQuantumInfo
MagickExport QuantumInfo * DestroyQuantumInfo(QuantumInfo *quantum_info)
Definition: quantum.c:214
MagickExport
#define MagickExport
Definition: method-attribute.h:80
_Image::debug
MagickBooleanType debug
Definition: image.h:290
SetQuantumImageType
MagickExport void SetQuantumImageType(Image *, const QuantumType)
_Image::filename
char filename[MaxTextExtent]
Definition: image.h:278
GetQuantumInfo
MagickExport void GetQuantumInfo(const ImageInfo *image_info, QuantumInfo *quantum_info)
Definition: quantum.c:419
_Image::matte
MagickBooleanType matte
Definition: image.h:171
IndexAlphaQuantum
@ IndexAlphaQuantum
Definition: quantum.h:65
_QuantumInfo::extent
size_t extent
Definition: quantum-private.h:76
ColorSeparationType
@ ColorSeparationType
Definition: image.h:59
magick.h
AcquireVirtualMemory
MagickExport MemoryInfo * AcquireVirtualMemory(const size_t count, const size_t quantum)
Definition: memory.c:593
GetQuantumType
MagickExport QuantumType GetQuantumType(Image *, ExceptionInfo *)
Definition: quantum.c:522
GetMagickModule
#define GetMagickModule()
Definition: log.h:29
_QuantumInfo::number_threads
size_t number_threads
Definition: quantum-private.h:70
RedQuantum
@ RedQuantum
Definition: quantum.h:69
statistic.h
GetImageOption
const MagickExport char * GetImageOption(const ImageInfo *image_info, const char *key)
Definition: option.c:1949
SetQuantumFormat
MagickExport MagickBooleanType SetQuantumFormat(const Image *, QuantumInfo *, const QuantumFormatType)
QuantumAlphaType
QuantumAlphaType
Definition: quantum.h:38
geometry.h
MagickCoreSignature
#define MagickCoreSignature
Definition: method-attribute.h:86
ImportQuantumPixels
MagickExport size_t ImportQuantumPixels(Image *, CacheView *, const QuantumInfo *, const QuantumType, const unsigned char *magick_restrict, ExceptionInfo *)
_Image::depth
size_t depth
Definition: image.h:176
RGBPadQuantum
@ RGBPadQuantum
Definition: quantum.h:76
DestroyQuantumInfo
MagickExport QuantumInfo * DestroyQuantumInfo(QuantumInfo *)
Definition: quantum.c:214
_QuantumInfo::pad
size_t pad
Definition: quantum-private.h:60
magick_restrict
#define magick_restrict
Definition: MagickCore.h:41
AcquireQuantumPixels
static MagickBooleanType AcquireQuantumPixels(QuantumInfo *quantum_info, const size_t extent)
Definition: quantum.c:157
GetQuantumType
MagickExport QuantumType GetQuantumType(Image *image, ExceptionInfo *exception)
Definition: quantum.c:522
_ImageInfo::endian
EndianType endian
Definition: image.h:390
property.h
SetQuantumDepth
MagickExport MagickBooleanType SetQuantumDepth(const Image *, QuantumInfo *, const size_t)
quantum-private.h
SetQuantumMinIsWhite
MagickExport void SetQuantumMinIsWhite(QuantumInfo *, const MagickBooleanType)
monitor.h
_Image::columns
size_t columns
Definition: image.h:174
QuantumSignature
#define QuantumSignature
Definition: quantum.c:77
delegate.h
GrayQuantum
@ GrayQuantum
Definition: quantum.h:63
AlphaQuantum
@ AlphaQuantum
Definition: quantum.h:56
BGROQuantum
@ BGROQuantum
Definition: quantum.h:82
BGRQuantum
@ BGRQuantum
Definition: quantum.h:81
resource_.h
_Image::type
ImageType type
Definition: image.h:334
_QuantumInfo::signature
size_t signature
Definition: quantum-private.h:88
utility.h
pixel.h
_CacheView
Definition: cache-view.c:65
SetQuantumPad
MagickExport MagickBooleanType SetQuantumPad(const Image *image, QuantumInfo *quantum_info, const size_t pad)
Definition: quantum.c:905
GreenQuantum
@ GreenQuantum
Definition: quantum.h:64
ExportQuantumPixels
MagickExport size_t ExportQuantumPixels(const Image *, const CacheView *, const QuantumInfo *, const QuantumType, unsigned char *magick_restrict, ExceptionInfo *)
string_.h
YellowQuantum
@ YellowQuantum
Definition: quantum.h:74
TrueColorType
@ TrueColorType
Definition: image.h:57
quantum.h
CMYKQuantum
@ CMYKQuantum
Definition: quantum.h:60
UndefinedQuantum
@ UndefinedQuantum
Definition: quantum.h:55
MagickTrue
@ MagickTrue
Definition: magick-type.h:194
blob.h
semaphore.h
IsNaN
#define IsNaN(a)
Definition: magick-type.h:214
blob-private.h
RGBAQuantum
@ RGBAQuantum
Definition: quantum.h:70
SetQuantumDepth
MagickExport MagickBooleanType SetQuantumDepth(const Image *image, QuantumInfo *quantum_info, const size_t depth)
Definition: quantum.c:661
ClampToQuantum
static Quantum ClampToQuantum(const MagickRealType quantum)
Definition: quantum.h:88
EndianType
EndianType
Definition: quantum.h:31
CbYCrYQuantum
@ CbYCrYQuantum
Definition: quantum.h:77
thread-private.h
_QuantumInfo::format
QuantumFormatType format
Definition: quantum-private.h:52
_QuantumInfo
Definition: quantum-private.h:45
TraceEvent
@ TraceEvent
Definition: log.h:38
AcquireMagickMemory
MagickExport void * AcquireMagickMemory(const size_t size)
Definition: memory.c:473
SetQuantumEndian
MagickExport MagickBooleanType SetQuantumEndian(const Image *image, QuantumInfo *quantum_info, const EndianType endian)
Definition: quantum.c:725
_MemoryInfo
Definition: memory.c:131
cache-private.h
FloatingPointQuantumFormat
@ FloatingPointQuantumFormat
Definition: quantum.h:48
SemaphoreInfo
Definition: semaphore.c:59
_Image
Definition: image.h:152
_Image::endian
EndianType endian
Definition: image.h:229
CyanQuantum
@ CyanQuantum
Definition: quantum.h:61
UnsignedQuantumFormat
@ UnsignedQuantumFormat
Definition: quantum.h:50
MagickMax
#define MagickMax(x, y)
Definition: image-private.h:33
CbYCrAQuantum
@ CbYCrAQuantum
Definition: quantum.h:79
LocaleCompare
MagickExport int LocaleCompare(const char *p, const char *q)
Definition: locale.c:1440
SetQuantumImageType
MagickExport void SetQuantumImageType(Image *image, const QuantumType quantum_type)
Definition: quantum.c:804
attribute.h
AssociatedQuantumAlpha
@ AssociatedQuantumAlpha
Definition: quantum.h:41
SetQuantumScale
MagickExport void SetQuantumScale(QuantumInfo *, const double)
Definition: quantum.c:1008
PaletteType
@ PaletteType
Definition: image.h:55
SetQuantumAlphaType
MagickExport void SetQuantumAlphaType(QuantumInfo *quantum_info, const QuantumAlphaType type)
Definition: quantum.c:626
_QuantumInfo::maximum
double maximum
Definition: quantum-private.h:56
stream.h
MagentaQuantum
@ MagentaQuantum
Definition: quantum.h:67
MagickPrivate
#define MagickPrivate
Definition: method-attribute.h:81
_ImageInfo
Definition: image.h:361
BilevelType
@ BilevelType
Definition: image.h:52
SetQuantumScale
MagickExport void SetQuantumScale(QuantumInfo *quantum_info, const double scale)
Definition: quantum.c:1008
MagickFalse
@ MagickFalse
Definition: magick-type.h:193
BlueQuantum
@ BlueQuantum
Definition: quantum.h:58
_QuantumInfo::min_is_white
MagickBooleanType min_is_white
Definition: quantum-private.h:63
pixel-private.h
image.h
_QuantumState::mask
const unsigned int * mask
Definition: quantum-private.h:42
_QuantumInfo::pixels
MemoryInfo ** pixels
Definition: quantum-private.h:73
AllocateSemaphoreInfo
MagickExport SemaphoreInfo * AllocateSemaphoreInfo(void)
Definition: semaphore.c:192
ResetQuantumState
MagickPrivate void ResetQuantumState(QuantumInfo *quantum_info)
Definition: quantum.c:578
BGRAQuantum
@ BGRAQuantum
Definition: quantum.h:71
color-private.h
SignedQuantumFormat
@ SignedQuantumFormat
Definition: quantum.h:49
GetQuantumInfo
MagickExport void GetQuantumInfo(const ImageInfo *, QuantumInfo *)
CMYKAQuantum
@ CMYKAQuantum
Definition: quantum.h:59
QuantumRange
#define QuantumRange
Definition: magick-type.h:86
CMYKColorspace
@ CMYKColorspace
Definition: colorspace.h:39
GetQuantumFormat
MagickExport QuantumFormatType GetQuantumFormat(const QuantumInfo *quantum_info)
Definition: quantum.c:388
_QuantumInfo::state
QuantumState state
Definition: quantum-private.h:82
_Image::rows
size_t rows
Definition: image.h:175
_QuantumState::bits
size_t bits
Definition: quantum-private.h:39
GetQuantumPixels
MagickExport unsigned char * GetQuantumPixels(const QuantumInfo *)
Definition: quantum.c:490
cache.h
DestroySemaphoreInfo
MagickExport void DestroySemaphoreInfo(SemaphoreInfo **semaphore_info)
Definition: semaphore.c:293
colorspace.h
QuantumType
QuantumType
Definition: quantum.h:53
constitute.h
DestroyQuantumPixels
static void DestroyQuantumPixels(QuantumInfo *)
Definition: quantum.c:249
GetQuantumExtent
MagickExport size_t GetQuantumExtent(const Image *, const QuantumInfo *, const QuantumType)
GetVirtualMemoryBlob
MagickExport void * GetVirtualMemoryBlob(const MemoryInfo *memory_info)
Definition: memory.c:971
RelinquishVirtualMemory
MagickExport MemoryInfo * RelinquishVirtualMemory(MemoryInfo *memory_info)
Definition: memory.c:1144
_QuantumInfo::semaphore
SemaphoreInfo * semaphore
Definition: quantum-private.h:85
_Image::signature
size_t signature
Definition: image.h:307
MagickBooleanType
MagickBooleanType
Definition: magick-type.h:191
StringToDouble
static double StringToDouble(const char *magick_restrict string, char **magick_restrict sentinal)
Definition: string-private.h:42
CMYKOQuantum
@ CMYKOQuantum
Definition: quantum.h:80
SetQuantumEndian
MagickExport MagickBooleanType SetQuantumEndian(const Image *, QuantumInfo *, const EndianType)
GetQuantumEndian
MagickExport EndianType GetQuantumEndian(const QuantumInfo *)
Definition: quantum.c:359
RelinquishMagickMemory
MagickExport void * RelinquishMagickMemory(void *memory)
Definition: memory.c:1077
SetQuantumPack
MagickExport void SetQuantumPack(QuantumInfo *, const MagickBooleanType)
LSBEndian
@ LSBEndian
Definition: quantum.h:34
UndefinedEndian
@ UndefinedEndian
Definition: quantum.h:33
GetQuantumFormat
MagickExport QuantumFormatType GetQuantumFormat(const QuantumInfo *)
Definition: quantum.c:388
_ExceptionInfo
Definition: exception.h:102
studio.h
_Image::storage_class
ClassType storage_class
Definition: image.h:155
GrayAlphaQuantum
@ GrayAlphaQuantum
Definition: quantum.h:62
ParseCommandOption
MagickExport ssize_t ParseCommandOption(const CommandOption option, const MagickBooleanType list, const char *options)
Definition: option.c:2586
MagickRealType
MagickDoubleType MagickRealType
Definition: magick-type.h:125
SetQuantumPad
MagickExport MagickBooleanType SetQuantumPad(const Image *, QuantumInfo *, const size_t)
Definition: quantum.c:905
GetQuantumPixels
MagickExport unsigned char * GetQuantumPixels(const QuantumInfo *quantum_info)
Definition: quantum.c:490
_QuantumInfo::endian
EndianType endian
Definition: quantum-private.h:79
GrayscaleType
@ GrayscaleType
Definition: image.h:53
UndefinedQuantumAlpha
@ UndefinedQuantumAlpha
Definition: quantum.h:40
SetQuantumMinIsWhite
MagickExport void SetQuantumMinIsWhite(QuantumInfo *quantum_info, const MagickBooleanType min_is_white)
Definition: quantum.c:943
PseudoClass
@ PseudoClass
Definition: magick-type.h:188
ThreadResource
@ ThreadResource
Definition: resource_.h:33
BlackQuantum
@ BlackQuantum
Definition: quantum.h:57
memory_.h
MSBEndian
@ MSBEndian
Definition: quantum.h:35
SetQuantumQuantum
MagickExport void SetQuantumQuantum(QuantumInfo *, const size_t)
AcquireQuantumInfo
MagickExport QuantumInfo * AcquireQuantumInfo(const ImageInfo *image_info, Image *image)
Definition: quantum.c:109
_QuantumInfo::alpha_type
QuantumAlphaType alpha_type
Definition: quantum-private.h:67
RGBOQuantum
@ RGBOQuantum
Definition: quantum.h:72
RGBQuantum
@ RGBQuantum
Definition: quantum.h:73
MagickEpsilon
#define MagickEpsilon
Definition: magick-type.h:115
exception-private.h
ThrowFatalException
#define ThrowFatalException(severity, tag)
Definition: exception-private.h:42
exception.h
QuantumFormatType
QuantumFormatType
Definition: quantum.h:45
option.h
UndefinedQuantumFormat
@ UndefinedQuantumFormat
Definition: quantum.h:47
GetQuantumEndian
MagickExport EndianType GetQuantumEndian(const QuantumInfo *quantum_info)
Definition: quantum.c:359
MagickULLConstant
#define MagickULLConstant(c)
Definition: magick-type.h:39
_QuantumInfo::quantum
size_t quantum
Definition: quantum-private.h:49
list.h
_QuantumState::pixel
unsigned int pixel
Definition: quantum-private.h:36
MagickQuantumFormatOptions
@ MagickQuantumFormatOptions
Definition: option.h:85
LogMagickEvent
MagickExport MagickBooleanType LogMagickEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
Definition: log.c:1399
_QuantumInfo::depth
size_t depth
Definition: quantum-private.h:48
string-private.h
colorspace-private.h
SetQuantumQuantum
MagickExport void SetQuantumQuantum(QuantumInfo *quantum_info, const size_t quantum)
Definition: quantum.c:976
SetQuantumFormat
MagickExport MagickBooleanType SetQuantumFormat(const Image *image, QuantumInfo *quantum_info, const QuantumFormatType format)
Definition: quantum.c:765
_QuantumInfo::minimum
double minimum
Definition: quantum-private.h:55
SetQuantumAlphaType
MagickExport void SetQuantumAlphaType(QuantumInfo *, const QuantumAlphaType)
AcquireQuantumInfo
MagickExport QuantumInfo * AcquireQuantumInfo(const ImageInfo *, Image *)
GetQuantumExtent
MagickExport size_t GetQuantumExtent(const Image *image, const QuantumInfo *quantum_info, const QuantumType quantum_type)
Definition: quantum.c:307
_QuantumState::inverse_scale
double inverse_scale
Definition: quantum-private.h:33
CbYCrQuantum
@ CbYCrQuantum
Definition: quantum.h:78
_QuantumInfo::scale
double scale
Definition: quantum-private.h:57
ResourceLimitFatalError
@ ResourceLimitFatalError
Definition: exception.h:78
MagickMin
#define MagickMin(x, y)
Definition: image-private.h:34
IndexQuantum
@ IndexQuantum
Definition: quantum.h:66
GrayPadQuantum
@ GrayPadQuantum
Definition: quantum.h:75
OpacityQuantum
@ OpacityQuantum
Definition: quantum.h:68
GetMagickResourceLimit
MagickExport MagickSizeType GetMagickResourceLimit(const ResourceType type)
Definition: resource.c:771
IsGrayColorspace
static MagickBooleanType IsGrayColorspace(const ColorspaceType colorspace)
Definition: colorspace-private.h:96
AcquireQuantumMemory
MagickExport void * AcquireQuantumMemory(const size_t count, const size_t quantum)
Definition: memory.c:544
Quantum
unsigned short Quantum
Definition: magick-type.h:85
GetOpenMPThreadId
static int GetOpenMPThreadId(void)
Definition: thread-private.h:120
_QuantumInfo::pack
MagickBooleanType pack
Definition: quantum-private.h:64
SetQuantumPack
MagickExport void SetQuantumPack(QuantumInfo *quantum_info, const MagickBooleanType pack)
Definition: quantum.c:870