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 "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 {
34  MSBEndian
36 
37 typedef enum
38 {
43 
44 typedef enum
45 {
51 
52 typedef enum
53 {
74  GrayPadQuantum, /* deprecated */
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 
156  GetQuantumEndian(const QuantumInfo *);
157 
159  SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
162  SetQuantumPad(const Image *,QuantumInfo *,const size_t);
163 
165  GetQuantumFormat(const QuantumInfo *);
166 
170 
173 
174 extern MagickExport size_t
176  const QuantumType,unsigned char *magick_restrict,ExceptionInfo *),
179  const unsigned char *magick_restrict,ExceptionInfo *);
180 
181 extern MagickExport unsigned char
182  *GetQuantumPixels(const QuantumInfo *);
183 
184 extern MagickExport void
191  SetQuantumScale(QuantumInfo *,const double);
192 
193 #if defined(__cplusplus) || defined(c_plusplus)
194 }
195 #endif
196 
197 #endif
_Image::colorspace
ColorspaceType colorspace
Definition: image.h:158
DisassociatedQuantumAlpha
@ DisassociatedQuantumAlpha
Definition: quantum.h:41
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:64
_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:68
statistic.h
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:75
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:62
AlphaQuantum
@ AlphaQuantum
Definition: quantum.h:55
BGROQuantum
@ BGROQuantum
Definition: quantum.h:81
BGRQuantum
@ BGRQuantum
Definition: quantum.h:80
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:905
GreenQuantum
@ GreenQuantum
Definition: quantum.h:63
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:73
TrueColorType
@ TrueColorType
Definition: image.h:57
quantum.h
CMYKQuantum
@ CMYKQuantum
Definition: quantum.h:59
UndefinedQuantum
@ UndefinedQuantum
Definition: quantum.h:54
MagickTrue
@ MagickTrue
Definition: magick-type.h:194
blob.h
semaphore.h
blob-private.h
RGBAQuantum
@ RGBAQuantum
Definition: quantum.h:69
SetQuantumDepth
MagickExport MagickBooleanType SetQuantumDepth(const Image *image, QuantumInfo *quantum_info, const size_t depth)
Definition: quantum.c:661
EndianType
EndianType
Definition: quantum.h:31
CbYCrYQuantum
@ CbYCrYQuantum
Definition: quantum.h:76
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:473
SetQuantumEndian
MagickExport MagickBooleanType SetQuantumEndian(const Image *image, QuantumInfo *quantum_info, const EndianType endian)
Definition: quantum.c:725
_MemoryInfo
Definition: memory.c:132
cache-private.h
FloatingPointQuantumFormat
@ FloatingPointQuantumFormat
Definition: quantum.h:47
SemaphoreInfo
Definition: semaphore.c:60
_Image
Definition: image.h:153
_Image::endian
EndianType endian
Definition: image.h:229
CyanQuantum
@ CyanQuantum
Definition: quantum.h:60
UnsignedQuantumFormat
@ UnsignedQuantumFormat
Definition: quantum.h:49
MagickMax
#define MagickMax(x, y)
Definition: image-private.h:26
CbYCrAQuantum
@ CbYCrAQuantum
Definition: quantum.h:78
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:40
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
ClampToQuantum
static Quantum ClampToQuantum(const MagickRealType value)
Definition: quantum.h:87
MagentaQuantum
@ MagentaQuantum
Definition: quantum.h:66
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:1008
MagickFalse
@ MagickFalse
Definition: magick-type.h:193
BlueQuantum
@ BlueQuantum
Definition: quantum.h:57
_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:70
color-private.h
SignedQuantumFormat
@ SignedQuantumFormat
Definition: quantum.h:48
GetQuantumInfo
MagickExport void GetQuantumInfo(const ImageInfo *, QuantumInfo *)
CMYKAQuantum
@ CMYKAQuantum
Definition: quantum.h:58
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:192
StringToDouble
static double StringToDouble(const char *magick_restrict string, char **magick_restrict sentinal)
Definition: string-private.h:42
CMYKOQuantum
@ CMYKOQuantum
Definition: quantum.h:79
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:33
UndefinedEndian
@ UndefinedEndian
Definition: quantum.h:32
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:61
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:39
SetQuantumMinIsWhite
MagickExport void SetQuantumMinIsWhite(QuantumInfo *quantum_info, const MagickBooleanType min_is_white)
Definition: quantum.c:943
PseudoClass
@ PseudoClass
Definition: magick-type.h:188
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:56
memory_.h
MSBEndian
@ MSBEndian
Definition: quantum.h:34
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:71
RGBQuantum
@ RGBQuantum
Definition: quantum.h:72
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:46
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:77
_QuantumInfo::scale
double scale
Definition: quantum-private.h:57
ResourceLimitFatalError
@ ResourceLimitFatalError
Definition: exception.h:78
IndexQuantum
@ IndexQuantum
Definition: quantum.h:65
GrayPadQuantum
@ GrayPadQuantum
Definition: quantum.h:74
OpacityQuantum
@ OpacityQuantum
Definition: quantum.h:67
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