MagickCore  6.9.11-60
Convert, Edit, Or Compose Bitmap Images
quantum.h
Go to the documentation of this file.
1 /*
2  Copyright 1999-2021 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 "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 {
35  MSBEndian
37 
38 typedef enum
39 {
44 
45 typedef enum
46 {
52 
53 typedef enum
54 {
75  GrayPadQuantum, /* deprecated */
84 
85 typedef struct _QuantumInfo
87 
89 {
90 #if defined(MAGICKCORE_HDRI_SUPPORT)
91  return((Quantum) quantum);
92 #else
93  if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
94  return((Quantum) 0);
96  return(QuantumRange);
97  return((Quantum) (quantum+0.5));
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) != 0) || (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) != 0) || (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) != 0) || (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) != 0) || (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),
163  SetQuantumPad(const Image *,QuantumInfo *,const size_t);
164 
166  GetQuantumFormat(const QuantumInfo *);
167 
171 
174 
175 extern MagickExport size_t
177  const QuantumType,unsigned char *magick_restrict,ExceptionInfo *),
180  const unsigned char *magick_restrict,ExceptionInfo *);
181 
182 extern MagickExport unsigned char
183  *GetQuantumPixels(const QuantumInfo *);
184 
185 extern MagickExport void
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:705
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
SetQuantumFormat
MagickExport MagickBooleanType SetQuantumFormat(const Image *, QuantumInfo *, const QuantumFormatType)
QuantumAlphaType
QuantumAlphaType
Definition: quantum.h:39
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:66
SetQuantumPad
MagickExport MagickBooleanType SetQuantumPad(const Image *image, QuantumInfo *quantum_info, const size_t pad)
Definition: quantum.c:908
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:205
blob.h
semaphore.h
IsNaN
#define IsNaN(a)
Definition: magick-type.h:225
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:32
CbYCrYQuantum
@ CbYCrYQuantum
Definition: quantum.h:77
thread-private.h
_QuantumInfo::format
QuantumFormatType format
Definition: quantum-private.h:52
_QuantumInfo
Definition: quantum-private.h:46
TraceEvent
@ TraceEvent
Definition: log.h:38
AcquireMagickMemory
MagickExport void * AcquireMagickMemory(const size_t size)
Definition: memory.c:552
SetQuantumEndian
MagickExport MagickBooleanType SetQuantumEndian(const Image *image, QuantumInfo *quantum_info, const EndianType endian)
Definition: quantum.c:728
_MemoryInfo
Definition: memory.c:164
cache-private.h
FloatingPointQuantumFormat
@ FloatingPointQuantumFormat
Definition: quantum.h:48
SemaphoreInfo
Definition: semaphore.c:61
_Image
Definition: image.h:153
_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:36
CbYCrAQuantum
@ CbYCrAQuantum
Definition: quantum.h:79
LocaleCompare
MagickExport int LocaleCompare(const char *p, const char *q)
Definition: locale.c:1435
SetQuantumImageType
MagickExport void SetQuantumImageType(Image *image, const QuantumType quantum_type)
Definition: quantum.c:807
attribute.h
AssociatedQuantumAlpha
@ AssociatedQuantumAlpha
Definition: quantum.h:41
SetQuantumScale
MagickExport void SetQuantumScale(QuantumInfo *, const double)
Definition: quantum.c:1011
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:362
BilevelType
@ BilevelType
Definition: image.h:52
SetQuantumScale
MagickExport void SetQuantumScale(QuantumInfo *quantum_info, const double scale)
Definition: quantum.c:1011
MagickFalse
@ MagickFalse
Definition: magick-type.h:204
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:90
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:351
colorspace.h
QuantumType
QuantumType
Definition: quantum.h:54
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:1090
RelinquishVirtualMemory
MagickExport MemoryInfo * RelinquishVirtualMemory(MemoryInfo *memory_info)
Definition: memory.c:1229
_QuantumInfo::semaphore
SemaphoreInfo * semaphore
Definition: quantum-private.h:85
_Image::signature
size_t signature
Definition: image.h:307
MagickBooleanType
MagickBooleanType
Definition: magick-type.h:203
StringToDouble
static double StringToDouble(const char *magick_restrict string, char **magick_restrict sentinal)
Definition: string-private.h:82
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:1162
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:103
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:129
SetQuantumPad
MagickExport MagickBooleanType SetQuantumPad(const Image *, QuantumInfo *, const size_t)
Definition: quantum.c:908
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:946
PseudoClass
@ PseudoClass
Definition: magick-type.h:199
GetImageOption
MagickExport const char * GetImageOption(const ImageInfo *image_info, const char *key)
Definition: option.c:1949
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:119
exception-private.h
ThrowFatalException
#define ThrowFatalException(severity, tag)
Definition: exception-private.h:42
exception.h
QuantumFormatType
QuantumFormatType
Definition: quantum.h:46
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:1420
_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:979
SetQuantumFormat
MagickExport MagickBooleanType SetQuantumFormat(const Image *image, QuantumInfo *quantum_info, const QuantumFormatType format)
Definition: quantum.c:768
_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:37
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:842
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:665
Quantum
unsigned short Quantum
Definition: magick-type.h:89
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:873