MagickCore  6.9.10
Convert, Edit, Or Compose Bitmap Images
quantum-private.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_PRIVATE_H
19 #define MAGICKCORE_QUANTUM_PRIVATE_H
20 
21 #include "magick/memory_.h"
22 #include "magick/cache.h"
23 #include "magick/image-private.h"
24 #include "magick/pixel-accessor.h"
25 
26 #if defined(__cplusplus) || defined(c_plusplus)
27 extern "C" {
28 #endif
29 
30 typedef struct _QuantumState
31 {
32  double
34 
35  unsigned int
37 
38  size_t
40 
41  const unsigned int
42  *mask;
43 } QuantumState;
44 
46 {
47  size_t
50 
53 
54  double
58 
59  size_t
60  pad;
61 
65 
68 
69  size_t
71 
73  **pixels;
74 
75  size_t
77 
80 
83 
86 
87  size_t
89 };
90 
91 extern MagickPrivate void
93 
94 static inline MagickSizeType GetQuantumRange(const size_t depth)
95 {
97  one;
98 
99  size_t
100  max_depth;
101 
102  if (depth == 0)
103  return(0);
104  one=1;
105  max_depth=8*sizeof(MagickSizeType);
106  return((MagickSizeType) ((one << (MagickMin(depth,max_depth)-1))+
107  ((one << (MagickMin(depth,max_depth)-1))-1)));
108 }
109 
110 static inline float HalfToSinglePrecision(const unsigned short half)
111 {
112 #define ExponentBias (127-15)
113 #define ExponentMask 0x7c00
114 #define ExponentShift 23
115 #define SignBitShift 31
116 #define SignificandShift 13
117 #define SignificandMask 0x00000400
118 
119  typedef union _SinglePrecision
120  {
121  unsigned int
122  fixed_point;
123 
124  float
125  single_precision;
126  } SinglePrecision;
127 
128  register unsigned int
129  exponent,
130  significand,
131  sign_bit;
132 
133  SinglePrecision
134  map;
135 
136  unsigned int
137  value;
138 
139  /*
140  The IEEE 754 standard specifies half precision as having:
141 
142  Sign bit: 1 bit
143  Exponent width: 5 bits
144  Significand precision: 11 (10 explicitly stored)
145  */
146  sign_bit=(unsigned int) ((half >> 15) & 0x00000001);
147  exponent=(unsigned int) ((half >> 10) & 0x0000001f);
148  significand=(unsigned int) (half & 0x000003ff);
149  if (exponent == 0)
150  {
151  if (significand == 0)
152  value=sign_bit << SignBitShift;
153  else
154  {
155  while ((significand & SignificandMask) == 0)
156  {
157  significand<<=1;
158  exponent--;
159  }
160  exponent++;
161  significand&=(~SignificandMask);
162  exponent+=ExponentBias;
163  value=(sign_bit << SignBitShift) | (exponent << ExponentShift) |
164  (significand << SignificandShift);
165  }
166  }
167  else
168  if (exponent == SignBitShift)
169  {
170  value=(sign_bit << SignBitShift) | 0x7f800000;
171  if (significand != 0)
172  value|=(significand << SignificandShift);
173  }
174  else
175  {
176  exponent+=ExponentBias;
177  significand<<=SignificandShift;
178  value=(sign_bit << SignBitShift) | (exponent << ExponentShift) |
179  significand;
180  }
181  map.fixed_point=value;
182  return(map.single_precision);
183 }
184 
185 static inline unsigned char *PopCharPixel(const unsigned char pixel,
186  unsigned char *pixels)
187 {
188  *pixels++=pixel;
189  return(pixels);
190 }
191 
192 static inline unsigned char *PopLongPixel(const EndianType endian,
193  const unsigned int pixel,unsigned char *pixels)
194 {
195  register unsigned int
196  quantum;
197 
198  quantum=(unsigned int) pixel;
199  if (endian == LSBEndian)
200  {
201  *pixels++=(unsigned char) (quantum);
202  *pixels++=(unsigned char) (quantum >> 8);
203  *pixels++=(unsigned char) (quantum >> 16);
204  *pixels++=(unsigned char) (quantum >> 24);
205  return(pixels);
206  }
207  *pixels++=(unsigned char) (quantum >> 24);
208  *pixels++=(unsigned char) (quantum >> 16);
209  *pixels++=(unsigned char) (quantum >> 8);
210  *pixels++=(unsigned char) (quantum);
211  return(pixels);
212 }
213 
214 static inline unsigned char *PopShortPixel(const EndianType endian,
215  const unsigned short pixel,unsigned char *pixels)
216 {
217  register unsigned int
218  quantum;
219 
220  quantum=pixel;
221  if (endian == LSBEndian)
222  {
223  *pixels++=(unsigned char) (quantum);
224  *pixels++=(unsigned char) (quantum >> 8);
225  return(pixels);
226  }
227  *pixels++=(unsigned char) (quantum >> 8);
228  *pixels++=(unsigned char) (quantum);
229  return(pixels);
230 }
231 
232 static inline const unsigned char *PushCharPixel(const unsigned char *pixels,
233  unsigned char *pixel)
234 {
235  *pixel=(*pixels++);
236  return(pixels);
237 }
238 
239 static inline const unsigned char *PushLongPixel(const EndianType endian,
240  const unsigned char *pixels,unsigned int *pixel)
241 {
242  register unsigned int
243  quantum;
244 
245  if (endian == LSBEndian)
246  {
247  quantum=((unsigned int) *pixels++);
248  quantum|=((unsigned int) *pixels++ << 8);
249  quantum|=((unsigned int) *pixels++ << 16);
250  quantum|=((unsigned int) *pixels++ << 24);
251  *pixel=quantum;
252  return(pixels);
253  }
254  quantum=((unsigned int) *pixels++ << 24);
255  quantum|=((unsigned int) *pixels++ << 16);
256  quantum|=((unsigned int) *pixels++ << 8);
257  quantum|=((unsigned int) *pixels++);
258  *pixel=quantum;
259  return(pixels);
260 }
261 
262 static inline const unsigned char *PushShortPixel(const EndianType endian,
263  const unsigned char *pixels,unsigned short *pixel)
264 {
265  register unsigned int
266  quantum;
267 
268  if (endian == LSBEndian)
269  {
270  quantum=(unsigned int) *pixels++;
271  quantum|=(unsigned int) (*pixels++ << 8);
272  *pixel=(unsigned short) (quantum & 0xffff);
273  return(pixels);
274  }
275  quantum=(unsigned int) (*pixels++ << 8);
276  quantum|=(unsigned int) *pixels++;
277  *pixel=(unsigned short) (quantum & 0xffff);
278  return(pixels);
279 }
280 
281 static inline Quantum ScaleAnyToQuantum(const QuantumAny quantum,
282  const QuantumAny range)
283 {
284  if (quantum > range)
285  return(QuantumRange);
286 #if !defined(MAGICKCORE_HDRI_SUPPORT)
287  return((Quantum) (((MagickRealType) QuantumRange*quantum)*
288  PerceptibleReciprocal((double) range)+0.5));
289 #else
290  return((Quantum) (((MagickRealType) QuantumRange*quantum)*
291  PerceptibleReciprocal((double) range)));
292 #endif
293 }
294 
295 static inline QuantumAny ScaleQuantumToAny(const Quantum quantum,
296  const QuantumAny range)
297 {
298 #if !defined(MAGICKCORE_HDRI_SUPPORT)
299  return((QuantumAny) ((MagickRealType) range*quantum/QuantumRange));
300 #else
301  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
302  return((QuantumAny) 0UL);
303  if (((MagickRealType) range*quantum/QuantumRange) >= 18446744073709551615.0)
304  return((QuantumAny) MagickULLConstant(18446744073709551615));
305  return((QuantumAny) ((MagickRealType) range*quantum/QuantumRange+0.5));
306 #endif
307 }
308 
309 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
310 static inline Quantum ScaleCharToQuantum(const unsigned char value)
311 {
312  return((Quantum) value);
313 }
314 
315 static inline Quantum ScaleLongToQuantum(const unsigned int value)
316 {
317 #if !defined(MAGICKCORE_HDRI_SUPPORT)
318  return((Quantum) ((value)/16843009UL));
319 #else
320  return((Quantum) (value/16843009.0));
321 #endif
322 }
323 
324 static inline Quantum ScaleMapToQuantum(const MagickRealType value)
325 {
326  if (value <= 0.0)
327  return((Quantum) 0);
328  if (value >= MaxMap)
329  return(QuantumRange);
330 #if !defined(MAGICKCORE_HDRI_SUPPORT)
331  return((Quantum) (value+0.5));
332 #else
333  return((Quantum) value);
334 #endif
335 }
336 
337 static inline unsigned int ScaleQuantumToLong(const Quantum quantum)
338 {
339 #if !defined(MAGICKCORE_HDRI_SUPPORT)
340  return((unsigned int) (16843009UL*quantum));
341 #else
342  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
343  return(0U);
344  if ((16843009.0*quantum) >= 4294967295.0)
345  return(4294967295UL);
346  return((unsigned int) (16843009.0*quantum+0.5));
347 #endif
348 }
349 
350 static inline unsigned int ScaleQuantumToMap(const Quantum quantum)
351 {
352  if (quantum >= (Quantum) MaxMap)
353  return((unsigned int) MaxMap);
354 #if !defined(MAGICKCORE_HDRI_SUPPORT)
355  return((unsigned int) quantum);
356 #else
357  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
358  return(0U);
359  return((unsigned int) (quantum+0.5));
360 #endif
361 }
362 
363 static inline unsigned short ScaleQuantumToShort(const Quantum quantum)
364 {
365 #if !defined(MAGICKCORE_HDRI_SUPPORT)
366  return((unsigned short) (257UL*quantum));
367 #else
368  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
369  return(0);
370  if ((257.0*quantum) >= 65535.0)
371  return(65535);
372  return((unsigned short) (257.0*quantum+0.5));
373 #endif
374 }
375 
376 static inline Quantum ScaleShortToQuantum(const unsigned short value)
377 {
378 #if !defined(MAGICKCORE_HDRI_SUPPORT)
379  return((Quantum) ((value+128U)/257U));
380 #else
381  return((Quantum) (value/257.0));
382 #endif
383 }
384 #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
385 static inline Quantum ScaleCharToQuantum(const unsigned char value)
386 {
387 #if !defined(MAGICKCORE_HDRI_SUPPORT)
388  return((Quantum) (257U*value));
389 #else
390  return((Quantum) (257.0*value));
391 #endif
392 }
393 
394 static inline Quantum ScaleLongToQuantum(const unsigned int value)
395 {
396 #if !defined(MAGICKCORE_HDRI_SUPPORT)
397  return((Quantum) ((value)/MagickULLConstant(65537)));
398 #else
399  return((Quantum) (value/65537.0));
400 #endif
401 }
402 
403 static inline Quantum ScaleMapToQuantum(const MagickRealType value)
404 {
405  if (value <= 0.0)
406  return((Quantum) 0);
407  if (value >= MaxMap)
408  return(QuantumRange);
409 #if !defined(MAGICKCORE_HDRI_SUPPORT)
410  return((Quantum) (value+0.5));
411 #else
412  return((Quantum) value);
413 #endif
414 }
415 
416 static inline unsigned int ScaleQuantumToLong(const Quantum quantum)
417 {
418 #if !defined(MAGICKCORE_HDRI_SUPPORT)
419  return((unsigned int) (65537UL*quantum));
420 #else
421  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
422  return(0U);
423  if ((65537.0*quantum) >= 4294967295.0)
424  return(4294967295U);
425  return((unsigned int) (65537.0*quantum+0.5));
426 #endif
427 }
428 
429 static inline unsigned int ScaleQuantumToMap(const Quantum quantum)
430 {
431  if (quantum >= (Quantum) MaxMap)
432  return((unsigned int) MaxMap);
433 #if !defined(MAGICKCORE_HDRI_SUPPORT)
434  return((unsigned int) quantum);
435 #else
436  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
437  return(0U);
438  return((unsigned int) (quantum+0.5));
439 #endif
440 }
441 
442 static inline unsigned short ScaleQuantumToShort(const Quantum quantum)
443 {
444 #if !defined(MAGICKCORE_HDRI_SUPPORT)
445  return((unsigned short) quantum);
446 #else
447  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
448  return(0);
449  if (quantum >= 65535.0)
450  return(65535);
451  return((unsigned short) (quantum+0.5));
452 #endif
453 }
454 
455 static inline Quantum ScaleShortToQuantum(const unsigned short value)
456 {
457  return((Quantum) value);
458 }
459 #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
460 static inline Quantum ScaleCharToQuantum(const unsigned char value)
461 {
462 #if !defined(MAGICKCORE_HDRI_SUPPORT)
463  return((Quantum) (16843009UL*value));
464 #else
465  return((Quantum) (16843009.0*value));
466 #endif
467 }
468 
469 static inline Quantum ScaleLongToQuantum(const unsigned int value)
470 {
471  return((Quantum) value);
472 }
473 
474 static inline Quantum ScaleMapToQuantum(const MagickRealType value)
475 {
476  if (value <= 0.0)
477  return((Quantum) 0);
478  if (value >= (Quantum) MaxMap)
479  return(QuantumRange);
480 #if !defined(MAGICKCORE_HDRI_SUPPORT)
481  return((Quantum) (65537.0*value+0.5));
482 #else
483  return((Quantum) (65537.0*value));
484 #endif
485 }
486 
487 static inline unsigned int ScaleQuantumToLong(const Quantum quantum)
488 {
489 #if !defined(MAGICKCORE_HDRI_SUPPORT)
490  return((unsigned int) quantum);
491 #else
492  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
493  return(0U);
494  if ((quantum) >= 4294967295.0)
495  return(4294967295);
496  return((unsigned int) (quantum+0.5));
497 #endif
498 }
499 
500 static inline unsigned int ScaleQuantumToMap(const Quantum quantum)
501 {
502  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
503  return(0U);
504  if ((quantum/65537) >= (Quantum) MaxMap)
505  return((unsigned int) MaxMap);
506 #if !defined(MAGICKCORE_HDRI_SUPPORT)
507  return((unsigned int) ((quantum+MagickULLConstant(32768))/
508  MagickULLConstant(65537)));
509 #else
510  return((unsigned int) (quantum/65537.0+0.5));
511 #endif
512 }
513 
514 static inline unsigned short ScaleQuantumToShort(const Quantum quantum)
515 {
516 #if !defined(MAGICKCORE_HDRI_SUPPORT)
517  return((unsigned short) ((quantum+MagickULLConstant(32768))/
518  MagickULLConstant(65537)));
519 #else
520  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
521  return(0);
522  if ((quantum/65537.0) >= 65535.0)
523  return(65535);
524  return((unsigned short) (quantum/65537.0+0.5));
525 #endif
526 }
527 
528 static inline Quantum ScaleShortToQuantum(const unsigned short value)
529 {
530 #if !defined(MAGICKCORE_HDRI_SUPPORT)
531  return((Quantum) (65537UL*value));
532 #else
533  return((Quantum) (65537.0*value));
534 #endif
535 }
536 #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
537 static inline Quantum ScaleCharToQuantum(const unsigned char value)
538 {
539  return((Quantum) (72340172838076673.0*value));
540 }
541 
542 static inline Quantum ScaleLongToQuantum(const unsigned int value)
543 {
544  return((Quantum) (4294967297.0*value));
545 }
546 
547 static inline Quantum ScaleMapToQuantum(const MagickRealType value)
548 {
549  if (value <= 0.0)
550  return((Quantum) 0);
551  if (value >= MaxMap)
552  return(QuantumRange);
553  return((Quantum) (281479271743489.0*value));
554 }
555 
556 static inline unsigned int ScaleQuantumToLong(const Quantum quantum)
557 {
558  return((unsigned int) (quantum/4294967297.0+0.5));
559 }
560 
561 static inline unsigned int ScaleQuantumToMap(const Quantum quantum)
562 {
563  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
564  return(0U);
565  if ((quantum/281479271743489.0) >= MaxMap)
566  return((unsigned int) MaxMap);
567  return((unsigned int) (quantum/281479271743489.0+0.5));
568 }
569 
570 static inline unsigned short ScaleQuantumToShort(const Quantum quantum)
571 {
572  if ((IsNaN(quantum) != MagickFalse) || (quantum <= 0.0))
573  return(0);
574  if ((quantum/281479271743489.0) >= 65535.0)
575  return(65535);
576  return((unsigned short) (quantum/281479271743489.0+0.5));
577 }
578 
579 static inline Quantum ScaleShortToQuantum(const unsigned short value)
580 {
581  return((Quantum) (281479271743489.0*value));
582 }
583 #endif
584 
585 static inline unsigned short SinglePrecisionToHalf(const float value)
586 {
587  typedef union _SinglePrecision
588  {
589  unsigned int
590  fixed_point;
591 
592  float
593  single_precision;
594  } SinglePrecision;
595 
596  register int
597  exponent;
598 
599  register unsigned int
600  significand,
601  sign_bit;
602 
603  SinglePrecision
604  map;
605 
606  unsigned short
607  half;
608 
609  /*
610  The IEEE 754 standard specifies half precision as having:
611 
612  Sign bit: 1 bit
613  Exponent width: 5 bits
614  Significand precision: 11 (10 explicitly stored)
615  */
616  map.single_precision=value;
617  sign_bit=(map.fixed_point >> 16) & 0x00008000;
618  exponent=(int) ((map.fixed_point >> ExponentShift) & 0x000000ff)-ExponentBias;
619  significand=map.fixed_point & 0x007fffff;
620  if (exponent <= 0)
621  {
622  int
623  shift;
624 
625  if (exponent < -10)
626  return((unsigned short) sign_bit);
627  significand=significand | 0x00800000;
628  shift=(int) (14-exponent);
629  significand=(unsigned int) ((significand+((1 << (shift-1))-1)+
630  ((significand >> shift) & 0x01)) >> shift);
631  return((unsigned short) (sign_bit | significand));
632  }
633  else
634  if (exponent == (0xff-ExponentBias))
635  {
636  if (significand == 0)
637  return((unsigned short) (sign_bit | ExponentMask));
638  else
639  {
640  significand>>=SignificandShift;
641  half=(unsigned short) (sign_bit | significand |
642  (significand == 0) | ExponentMask);
643  return(half);
644  }
645  }
646  significand=significand+((significand >> SignificandShift) & 0x01)+0x00000fff;
647  if ((significand & 0x00800000) != 0)
648  {
649  significand=0;
650  exponent++;
651  }
652  if (exponent > 30)
653  {
654  float
655  alpha;
656 
657  register int
658  i;
659 
660  /*
661  Float overflow.
662  */
663  alpha=1.0e10;
664  for (i=0; i < 10; i++)
665  alpha*=alpha;
666  return((unsigned short) (sign_bit | ExponentMask));
667  }
668  half=(unsigned short) (sign_bit | (exponent << 10) |
669  (significand >> SignificandShift));
670  return(half);
671 }
672 
673 #if defined(__cplusplus) || defined(c_plusplus)
674 }
675 #endif
676 
677 #endif
_Image::colorspace
ColorspaceType colorspace
Definition: image.h:158
ExportCMYKOQuantum
static void ExportCMYKOQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, const IndexPacket *magick_restrict indexes, unsigned char *magick_restrict q, ExceptionInfo *exception)
Definition: quantum-export.c:1765
QuantumScale
#define QuantumScale
Definition: magick-type.h:120
MagickExport
#define MagickExport
Definition: method-attribute.h:80
SinglePrecisionToHalf
static unsigned short SinglePrecisionToHalf(const float value)
Definition: quantum-private.h:585
_Image::debug
MagickBooleanType debug
Definition: image.h:290
_Image::filename
char filename[MaxTextExtent]
Definition: image.h:278
TransparentOpacity
#define TransparentOpacity
Definition: image.h:28
PushQuantumLongPixel
static const unsigned char * PushQuantumLongPixel(QuantumInfo *quantum_info, const unsigned char *magick_restrict pixels, unsigned int *quantum)
Definition: quantum-import.c:226
OpaqueOpacity
#define OpaqueOpacity
Definition: image.h:27
PopQuantumPixel
static unsigned char * PopQuantumPixel(QuantumInfo *quantum_info, const QuantumAny pixel, unsigned char *magick_restrict pixels)
Definition: quantum-export.c:177
IndexAlphaQuantum
@ IndexAlphaQuantum
Definition: quantum.h:65
ExportAlphaQuantum
static void ExportAlphaQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:242
_QuantumInfo::extent
size_t extent
Definition: quantum-private.h:76
magick.h
GetAuthenticPixelQueue
MagickExport PixelPacket * GetAuthenticPixelQueue(const Image *image)
Definition: cache.c:1548
GetMagickModule
#define GetMagickModule()
Definition: log.h:29
SetPixelBlack
#define SetPixelBlack(indexes, value)
Definition: pixel-accessor.h:70
_QuantumInfo::number_threads
size_t number_threads
Definition: quantum-private.h:70
RedQuantum
@ RedQuantum
Definition: quantum.h:69
statistic.h
SetPixelOpacity
#define SetPixelOpacity(pixel, value)
Definition: pixel-accessor.h:81
QuantumAlphaType
QuantumAlphaType
Definition: quantum.h:38
PushDoublePixel
static const unsigned char * PushDoublePixel(const QuantumInfo *quantum_info, const unsigned char *magick_restrict pixels, double *pixel)
Definition: quantum-import.c:122
geometry.h
MagickCoreSignature
#define MagickCoreSignature
Definition: method-attribute.h:86
_Image::depth
size_t depth
Definition: image.h:176
CorruptImageError
@ CorruptImageError
Definition: exception.h:60
PushFloatPixel
static const unsigned char * PushFloatPixel(const QuantumInfo *quantum_info, const unsigned char *magick_restrict pixels, float *pixel)
Definition: quantum-import.c:161
GetPixelBlack
#define GetPixelBlack(indexes)
Definition: pixel-accessor.h:37
GetPixelLuma
static MagickRealType GetPixelLuma(const Image *magick_restrict image, const PixelPacket *magick_restrict pixel)
Definition: pixel-accessor.h:138
ExponentBias
#define ExponentBias
_QuantumInfo::pad
size_t pad
Definition: quantum-private.h:60
magick_restrict
#define magick_restrict
Definition: MagickCore.h:41
PopCharPixel
static unsigned char * PopCharPixel(const unsigned char pixel, unsigned char *pixels)
Definition: quantum-private.h:185
PopFloatPixel
static unsigned char * PopFloatPixel(QuantumInfo *quantum_info, const float pixel, unsigned char *magick_restrict pixels)
Definition: quantum-export.c:149
ExportRGBQuantum
static void ExportRGBQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:3048
ImportGrayAlphaQuantum
static void ImportGrayAlphaQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:2353
ImportRGBOQuantum
static void ImportRGBOQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:3780
ExportBGROQuantum
static void ExportBGROQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:878
property.h
SetPixelRed
#define SetPixelRed(pixel, value)
Definition: pixel-accessor.h:82
ImportBGROQuantum
static void ImportBGROQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:908
SetPixelRGBO
#define SetPixelRGBO(pixel, packet)
Definition: pixel-accessor.h:96
quantum-private.h
image-private.h
ExponentShift
#define ExponentShift
monitor.h
_Image::columns
size_t columns
Definition: image.h:174
SetPixelGreen
#define SetPixelGreen(pixel, value)
Definition: pixel-accessor.h: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
MagickSizeType
size_t MagickSizeType
Definition: magick-type.h:136
IndexPacket
Quantum IndexPacket
Definition: pixel.h:129
resource_.h
GetCacheViewVirtualIndexQueue
const MagickExport IndexPacket * GetCacheViewVirtualIndexQueue(const CacheView *cache_view)
Definition: cache-view.c:638
_QuantumInfo::signature
size_t signature
Definition: quantum-private.h:88
GetPixelRed
#define GetPixelRed(pixel)
Definition: pixel-accessor.h:50
PopQuantumLongPixel
static unsigned char * PopQuantumLongPixel(QuantumInfo *quantum_info, const size_t pixel, unsigned char *magick_restrict pixels)
Definition: quantum-export.c:210
ExportCMYKAQuantum
static void ExportCMYKAQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, const IndexPacket *magick_restrict indexes, unsigned char *magick_restrict q, ExceptionInfo *exception)
Definition: quantum-export.c:1598
ScaleAnyToQuantum
static Quantum ScaleAnyToQuantum(const QuantumAny quantum, const QuantumAny range)
Definition: quantum-private.h:281
GetAuthenticIndexQueue
MagickExport IndexPacket * GetAuthenticIndexQueue(const Image *image)
Definition: cache.c:1325
utility.h
pixel.h
SignificandMask
#define SignificandMask
ImportBlueQuantum
static void ImportBlueQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:1256
_CacheView
Definition: cache-view.c:65
PushShortPixel
static const unsigned char * PushShortPixel(const EndianType endian, const unsigned char *pixels, unsigned short *pixel)
Definition: quantum-private.h:262
QuantumState
struct _QuantumState QuantumState
GreenQuantum
@ GreenQuantum
Definition: quantum.h:64
string_.h
YellowQuantum
@ YellowQuantum
Definition: quantum.h:74
quantum.h
CMYKQuantum
@ CMYKQuantum
Definition: quantum.h:60
GetVirtualIndexQueue
const MagickExport IndexPacket * GetVirtualIndexQueue(const Image *image)
Definition: cache.c:2809
MagickTrue
@ MagickTrue
Definition: magick-type.h:194
blob.h
semaphore.h
ExportOpacityQuantum
static void ExportOpacityQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:2842
ImportRGBQuantum
static void ImportRGBQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:3243
ResetQuantumState
MagickPrivate void ResetQuantumState(QuantumInfo *)
Definition: quantum.c:578
IsNaN
#define IsNaN(a)
Definition: magick-type.h:214
GetPixelAlpha
#define GetPixelAlpha(pixel)
Definition: pixel-accessor.h:36
GetPixelIndex
#define GetPixelIndex(indexes)
Definition: pixel-accessor.h:44
blob-private.h
RGBAQuantum
@ RGBAQuantum
Definition: quantum.h:70
ClampToQuantum
static Quantum ClampToQuantum(const MagickRealType quantum)
Definition: quantum.h:88
GetCacheViewExtent
MagickExport MagickSizeType GetCacheViewExtent(const CacheView *cache_view)
Definition: cache-view.c:395
EndianType
EndianType
Definition: quantum.h:31
CbYCrYQuantum
@ CbYCrYQuantum
Definition: quantum.h:77
ExportBGRAQuantum
static void ExportBGRAQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:636
ExportCMYKQuantum
static void ExportCMYKQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, const IndexPacket *magick_restrict indexes, unsigned char *magick_restrict q, ExceptionInfo *exception)
Definition: quantum-export.c:1451
_QuantumInfo::format
QuantumFormatType format
Definition: quantum-private.h:52
ExportIndexAlphaQuantum
static void ExportIndexAlphaQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, const IndexPacket *magick_restrict indexes, unsigned char *magick_restrict q, ExceptionInfo *exception)
Definition: quantum-export.c:2645
ExportBlackQuantum
static void ExportBlackQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, const IndexPacket *magick_restrict indexes, unsigned char *magick_restrict q, ExceptionInfo *exception)
Definition: quantum-export.c:1118
_QuantumInfo
Definition: quantum-private.h:45
TraceEvent
@ TraceEvent
Definition: log.h:38
ImportGreenQuantum
static void ImportGreenQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:2589
QuantumAny
MagickSizeType QuantumAny
Definition: magick-type.h:150
_Image::colormap
PixelPacket * colormap
Definition: image.h:180
_MemoryInfo
Definition: memory.c:131
ExportGrayAlphaQuantum
static void ExportGrayAlphaQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:2186
PopShortPixel
static unsigned char * PopShortPixel(const EndianType endian, const unsigned short pixel, unsigned char *pixels)
Definition: quantum-private.h:214
FloatingPointQuantumFormat
@ FloatingPointQuantumFormat
Definition: quantum.h:48
PopLongPixel
static unsigned char * PopLongPixel(const EndianType endian, const unsigned int pixel, unsigned char *pixels)
Definition: quantum-private.h:192
SemaphoreInfo
Definition: semaphore.c:59
PushQuantumPixel
static const unsigned char * PushQuantumPixel(QuantumInfo *quantum_info, const unsigned char *magick_restrict pixels, unsigned int *quantum)
Definition: quantum-import.c:197
_Image
Definition: image.h:152
_Image::endian
EndianType endian
Definition: image.h:229
SetPixelAlpha
#define SetPixelAlpha(pixel, value)
Definition: pixel-accessor.h:67
GetCacheViewAuthenticIndexQueue
MagickExport IndexPacket * GetCacheViewAuthenticIndexQueue(CacheView *cache_view)
Definition: cache-view.c:564
CyanQuantum
@ CyanQuantum
Definition: quantum.h:61
GetQuantumRange
static MagickSizeType GetQuantumRange(const size_t depth)
Definition: quantum-private.h:94
ExportCbYCrYQuantum
static void ExportCbYCrYQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:1332
ImageError
@ ImageError
Definition: exception.h:69
CbYCrAQuantum
@ CbYCrAQuantum
Definition: quantum.h:79
AssociatedQuantumAlpha
@ AssociatedQuantumAlpha
Definition: quantum.h:41
ImportAlphaQuantum
static void ImportAlphaQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:256
ImportCbYCrYQuantum
static void ImportCbYCrYQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:1371
_QuantumInfo::maximum
double maximum
Definition: quantum-private.h:56
stream.h
SetPixelBlue
#define SetPixelBlue(pixel, value)
Definition: pixel-accessor.h:71
MagentaQuantum
@ MagentaQuantum
Definition: quantum.h:67
ImportCMYKOQuantum
static void ImportCMYKOQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q, IndexPacket *magick_restrict indexes, ExceptionInfo *exception)
Definition: quantum-import.c:1812
GetVirtualPixelQueue
const MagickExport PixelPacket * GetVirtualPixelQueue(const Image *image)
Definition: cache.c:3386
MagickPrivate
#define MagickPrivate
Definition: method-attribute.h:81
MagickFalse
@ MagickFalse
Definition: magick-type.h:193
SignificandShift
#define SignificandShift
ExportBlueQuantum
static void ExportBlueQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:1229
ImportBGRQuantum
static void ImportBGRQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:371
GetPixelBlue
#define GetPixelBlue(pixel)
Definition: pixel-accessor.h:38
BlueQuantum
@ BlueQuantum
Definition: quantum.h:58
_QuantumInfo::min_is_white
MagickBooleanType min_is_white
Definition: quantum-private.h:63
pixel-private.h
GetPixelOpacity
#define GetPixelOpacity(pixel)
Definition: pixel-accessor.h:49
GetImageExtent
MagickExport MagickSizeType GetImageExtent(const Image *image)
Definition: cache.c:1714
_QuantumState::mask
const unsigned int * mask
Definition: quantum-private.h:42
GetCacheViewVirtualPixelQueue
const MagickExport PixelPacket * GetCacheViewVirtualPixelQueue(const CacheView *cache_view)
Definition: cache-view.c:677
_QuantumInfo::pixels
MemoryInfo ** pixels
Definition: quantum-private.h:73
PushColormapIndex
static IndexPacket PushColormapIndex(const Image *image, const size_t index, MagickBooleanType *range_exception)
Definition: quantum-import.c:113
BGRAQuantum
@ BGRAQuantum
Definition: quantum.h:71
ImportIndexAlphaQuantum
static void ImportIndexAlphaQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q, IndexPacket *magick_restrict indexes, ExceptionInfo *exception)
Definition: quantum-import.c:2909
color-private.h
CMYKAQuantum
@ CMYKAQuantum
Definition: quantum.h:59
PerceptibleReciprocal
static double PerceptibleReciprocal(const double x)
Definition: pixel-accessor.h:124
QuantumRange
#define QuantumRange
Definition: magick-type.h:86
CMYKColorspace
@ CMYKColorspace
Definition: colorspace.h:39
_QuantumInfo::state
QuantumState state
Definition: quantum-private.h:82
_QuantumState::bits
size_t bits
Definition: quantum-private.h:39
cache.h
ImportQuantumPixels
MagickExport size_t ImportQuantumPixels(Image *image, CacheView *image_view, const QuantumInfo *quantum_info, const QuantumType quantum_type, const unsigned char *magick_restrict pixels, ExceptionInfo *exception)
Definition: quantum-import.c:4009
QuantumType
QuantumType
Definition: quantum.h:53
constitute.h
ImportCMYKQuantum
static void ImportCMYKQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q, IndexPacket *magick_restrict indexes, ExceptionInfo *exception)
Definition: quantum-import.c:1463
_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
ImportIndexQuantum
static void ImportIndexQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q, IndexPacket *magick_restrict indexes, ExceptionInfo *exception)
Definition: quantum-import.c:2704
CMYKOQuantum
@ CMYKOQuantum
Definition: quantum.h:80
LSBEndian
@ LSBEndian
Definition: quantum.h:34
_ExceptionInfo
Definition: exception.h:102
ScaleQuantumToAny
static QuantumAny ScaleQuantumToAny(const Quantum quantum, const QuantumAny range)
Definition: quantum-private.h:295
SetPixelIndex
#define SetPixelIndex(indexes, value)
Definition: pixel-accessor.h:78
studio.h
_Image::storage_class
ClassType storage_class
Definition: image.h:155
GrayAlphaQuantum
@ GrayAlphaQuantum
Definition: quantum.h:62
ExportRedQuantum
static void ExportRedQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:2945
ImportRGBAQuantum
static void ImportRGBAQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:3551
MagickRealType
MagickDoubleType MagickRealType
Definition: magick-type.h:125
ExportBGRQuantum
static void ExportBGRQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:353
GetQuantumPixels
MagickExport unsigned char * GetQuantumPixels(const QuantumInfo *quantum_info)
Definition: quantum.c:490
_QuantumInfo::endian
EndianType endian
Definition: quantum-private.h:79
PseudoClass
@ PseudoClass
Definition: magick-type.h:188
ExportRGBOQuantum
static void ExportRGBOQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:3573
BlackQuantum
@ BlackQuantum
Definition: quantum.h:57
ExportGrayQuantum
static void ExportGrayQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:1932
memory_.h
ExportGreenQuantum
static void ExportGreenQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:2390
SignBitShift
#define SignBitShift
_QuantumInfo::alpha_type
QuantumAlphaType alpha_type
Definition: quantum-private.h:67
ExponentMask
#define ExponentMask
RGBOQuantum
@ RGBOQuantum
Definition: quantum.h:72
RGBQuantum
@ RGBQuantum
Definition: quantum.h:73
pixel-accessor.h
exception-private.h
ThrowMagickException
MagickExport MagickBooleanType ThrowMagickException(ExceptionInfo *exception, const char *module, const char *function, const size_t line, const ExceptionType severity, const char *tag, const char *format,...)
Definition: exception.c:1068
PushCharPixel
static const unsigned char * PushCharPixel(const unsigned char *pixels, unsigned char *pixel)
Definition: quantum-private.h:232
exception.h
QuantumFormatType
QuantumFormatType
Definition: quantum.h:45
option.h
ImportGrayQuantum
static void ImportGrayQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:1994
MagickULLConstant
#define MagickULLConstant(c)
Definition: magick-type.h:39
_QuantumInfo::quantum
size_t quantum
Definition: quantum-private.h:49
ExportQuantumPixels
MagickExport size_t ExportQuantumPixels(const Image *image, const CacheView *image_view, const QuantumInfo *quantum_info, const QuantumType quantum_type, unsigned char *magick_restrict pixels, ExceptionInfo *exception)
Definition: quantum-export.c:3813
GetPixelGreen
#define GetPixelGreen(pixel)
Definition: pixel-accessor.h:43
ImportRedQuantum
static void ImportRedQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:3128
MaxMap
#define MaxMap
Definition: magick-type.h:78
list.h
PushLongPixel
static const unsigned char * PushLongPixel(const EndianType endian, const unsigned char *pixels, unsigned int *pixel)
Definition: quantum-private.h:239
_QuantumState::pixel
unsigned int pixel
Definition: quantum-private.h:36
HalfToSinglePrecision
static float HalfToSinglePrecision(const unsigned short half)
Definition: quantum-private.h:110
ExportIndexQuantum
static void ExportIndexQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, const IndexPacket *magick_restrict indexes, unsigned char *magick_restrict q, ExceptionInfo *exception)
Definition: quantum-export.c:2493
LogMagickEvent
MagickExport MagickBooleanType LogMagickEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
Definition: log.c:1399
ImportCMYKAQuantum
static void ImportCMYKAQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q, IndexPacket *magick_restrict indexes, ExceptionInfo *exception)
Definition: quantum-import.c:1630
_QuantumInfo::depth
size_t depth
Definition: quantum-private.h:48
_QuantumState
Definition: quantum-private.h:30
_QuantumInfo::minimum
double minimum
Definition: quantum-private.h:55
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
ExportRGBAQuantum
static void ExportRGBAQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const PixelPacket *magick_restrict p, unsigned char *magick_restrict q)
Definition: quantum-export.c:3331
MagickMin
#define MagickMin(x, y)
Definition: image-private.h:27
IndexQuantum
@ IndexQuantum
Definition: quantum.h:66
GetCacheViewAuthenticPixelQueue
MagickExport PixelPacket * GetCacheViewAuthenticPixelQueue(CacheView *cache_view)
Definition: cache-view.c:601
ImportBGRAQuantum
static void ImportBGRAQuantum(QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q)
Definition: quantum-import.c:679
PopDoublePixel
static unsigned char * PopDoublePixel(QuantumInfo *quantum_info, const double pixel, unsigned char *magick_restrict pixels)
Definition: quantum-export.c:114
OpacityQuantum
@ OpacityQuantum
Definition: quantum.h:68
_PixelPacket
Definition: pixel.h:131
ImportBlackQuantum
static void ImportBlackQuantum(const Image *image, QuantumInfo *quantum_info, const MagickSizeType number_pixels, const unsigned char *magick_restrict p, PixelPacket *magick_restrict q, IndexPacket *magick_restrict indexes, ExceptionInfo *exception)
Definition: quantum-import.c:1137
Quantum
unsigned short Quantum
Definition: magick-type.h:85
_QuantumInfo::pack
MagickBooleanType pack
Definition: quantum-private.h:64