Coverage Report

Created: 2026-09-28 06:47

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/imagemagick/MagickCore/quantum-export.c
Line
Count
Source
1
/*
2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3
%                                                                             %
4
%                                                                             %
5
%                                                                             %
6
%                QQQ   U   U   AAA   N   N  TTTTT  U   U  M   M               %
7
%               Q   Q  U   U  A   A  NN  N    T    U   U  MM MM               %
8
%               Q   Q  U   U  AAAAA  N N N    T    U   U  M M M               %
9
%               Q  QQ  U   U  A   A  N  NN    T    U   U  M   M               %
10
%                QQQQ   UUU   A   A  N   N    T     UUU   M   M               %
11
%                                                                             %
12
%                   EEEEE  X   X  PPPP    OOO   RRRR   TTTTT                  %
13
%                   E       X X   P   P  O   O  R   R    T                    %
14
%                   EEE      X    PPPP   O   O  RRRR     T                    %
15
%                   E       X X   P      O   O  R R      T                    %
16
%                   EEEEE  X   X  P       OOO   R  R     T                    %
17
%                                                                             %
18
%                 MagickCore Methods to Export Quantum Pixels                 %
19
%                                                                             %
20
%                             Software Design                                 %
21
%                                  Cristy                                     %
22
%                               October 1998                                  %
23
%                                                                             %
24
%                                                                             %
25
%  Copyright @ 1999 ImageMagick Studio LLC, a non-profit organization         %
26
%  dedicated to making software imaging solutions freely available.           %
27
%                                                                             %
28
%  You may not use this file except in compliance with the License.  You may  %
29
%  obtain a copy of the License at                                            %
30
%                                                                             %
31
%    https://imagemagick.org/license/                                         %
32
%                                                                             %
33
%  Unless required by applicable law or agreed to in writing, software        %
34
%  distributed under the License is distributed on an "AS IS" BASIS,          %
35
%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
36
%  See the License for the specific language governing permissions and        %
37
%  limitations under the License.                                             %
38
%                                                                             %
39
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
40
%
41
%
42
*/
43

44
/*
45
  Include declarations.
46
*/
47
#include "MagickCore/studio.h"
48
#include "MagickCore/property.h"
49
#include "MagickCore/blob.h"
50
#include "MagickCore/blob-private.h"
51
#include "MagickCore/color-private.h"
52
#include "MagickCore/exception.h"
53
#include "MagickCore/exception-private.h"
54
#include "MagickCore/cache.h"
55
#include "MagickCore/constitute.h"
56
#include "MagickCore/delegate.h"
57
#include "MagickCore/geometry.h"
58
#include "MagickCore/list.h"
59
#include "MagickCore/magick.h"
60
#include "MagickCore/memory_.h"
61
#include "MagickCore/monitor.h"
62
#include "MagickCore/option.h"
63
#include "MagickCore/pixel.h"
64
#include "MagickCore/pixel-accessor.h"
65
#include "MagickCore/quantum.h"
66
#include "MagickCore/quantum-private.h"
67
#include "MagickCore/resource_.h"
68
#include "MagickCore/semaphore.h"
69
#include "MagickCore/statistic.h"
70
#include "MagickCore/stream.h"
71
#include "MagickCore/string_.h"
72
#include "MagickCore/utility.h"
73

74
/*
75
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
76
%                                                                             %
77
%                                                                             %
78
%                                                                             %
79
+   E x p o r t Q u a n t u m P i x e l s                                     %
80
%                                                                             %
81
%                                                                             %
82
%                                                                             %
83
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84
%
85
%  ExportQuantumPixels() transfers one or more pixel components from the image
86
%  pixel cache to a user supplied buffer.  The pixels are returned in network
87
%  byte order.  It returns the number of exported pixels.
88
%
89
%  The format of the ExportQuantumPixels method is:
90
%
91
%      size_t ExportQuantumPixels(const Image *image,CacheView *image_view,
92
%        QuantumInfo *quantum_info,const QuantumType quantum_type,
93
%        unsigned char *magick_restrict pixels,ExceptionInfo *exception)
94
%
95
%  A description of each parameter follows:
96
%
97
%    o image: the image.
98
%
99
%    o image_view: the image cache view.
100
%
101
%    o quantum_info: the quantum info.
102
%
103
%    o quantum_type: Declare which pixel components to transfer (RGB, RGBA,
104
%      etc).
105
%
106
%    o pixels:  The components are transferred to this buffer.
107
%
108
%    o exception: return any errors or warnings in this structure.
109
%
110
*/
111
112
static inline unsigned char *PopQuantumDoublePixel(QuantumInfo *quantum_info,
113
  const double pixel,unsigned char *magick_restrict pixels)
114
15.1k
{
115
15.1k
  double
116
15.1k
    *p;
117
118
15.1k
  unsigned char
119
15.1k
    quantum[8];
120
121
15.1k
  (void) memset(quantum,0,sizeof(quantum));
122
15.1k
  p=(double *) quantum;
123
15.1k
  *p=(double) (pixel*quantum_info->state.inverse_scale+quantum_info->minimum);
124
15.1k
  if (quantum_info->endian == LSBEndian)
125
14.1k
    {
126
14.1k
      *pixels++=quantum[0];
127
14.1k
      *pixels++=quantum[1];
128
14.1k
      *pixels++=quantum[2];
129
14.1k
      *pixels++=quantum[3];
130
14.1k
      *pixels++=quantum[4];
131
14.1k
      *pixels++=quantum[5];
132
14.1k
      *pixels++=quantum[6];
133
14.1k
      *pixels++=quantum[7];
134
14.1k
      return(pixels);
135
14.1k
    }
136
1.00k
  *pixels++=quantum[7];
137
1.00k
  *pixels++=quantum[6];
138
1.00k
  *pixels++=quantum[5];
139
1.00k
  *pixels++=quantum[4];
140
1.00k
  *pixels++=quantum[3];
141
1.00k
  *pixels++=quantum[2];
142
1.00k
  *pixels++=quantum[1];
143
1.00k
  *pixels++=quantum[0];
144
1.00k
  return(pixels);
145
15.1k
}
146
147
static inline unsigned char *PopQuantumFloatPixel(QuantumInfo *quantum_info,
148
  const float pixel,unsigned char *magick_restrict pixels)
149
467k
{
150
467k
  float
151
467k
    *p;
152
153
467k
  unsigned char
154
467k
    quantum[4];
155
156
467k
  (void) memset(quantum,0,sizeof(quantum));
157
467k
  p=(float *) quantum;
158
467k
  *p=(float) ((double) pixel*quantum_info->state.inverse_scale+
159
467k
    quantum_info->minimum);
160
467k
  if (quantum_info->endian == LSBEndian)
161
137k
    {
162
137k
      *pixels++=quantum[0];
163
137k
      *pixels++=quantum[1];
164
137k
      *pixels++=quantum[2];
165
137k
      *pixels++=quantum[3];
166
137k
      return(pixels);
167
137k
    }
168
330k
  *pixels++=quantum[3];
169
330k
  *pixels++=quantum[2];
170
330k
  *pixels++=quantum[1];
171
330k
  *pixels++=quantum[0];
172
330k
  return(pixels);
173
467k
}
174
175
static inline unsigned char *PopQuantumPixel(QuantumInfo *quantum_info,
176
  const QuantumAny pixel,unsigned char *magick_restrict pixels)
177
140M
{
178
140M
  ssize_t
179
140M
    i;
180
181
140M
  size_t
182
140M
    quantum_bits;
183
184
140M
  if (quantum_info->state.bits == 0UL)
185
353k
    quantum_info->state.bits=8U;
186
284M
  for (i=(ssize_t) quantum_info->depth; i > 0L; )
187
143M
  {
188
143M
    quantum_bits=(size_t) i;
189
143M
    if (quantum_bits > quantum_info->state.bits)
190
3.65M
      quantum_bits=quantum_info->state.bits;
191
143M
    i-=(ssize_t) quantum_bits;
192
143M
    if (i < 0)
193
0
      i=0;
194
143M
    if (quantum_info->state.bits == 8UL)
195
21.6M
      *pixels='\0';
196
143M
    quantum_info->state.bits-=quantum_bits;
197
143M
    *pixels|=(((pixel >> i) &~ (((QuantumAny) ~0UL) << quantum_bits)) <<
198
143M
      quantum_info->state.bits);
199
143M
    if (quantum_info->state.bits == 0UL)
200
21.3M
      {
201
21.3M
        pixels++;
202
21.3M
        quantum_info->state.bits=8UL;
203
21.3M
      }
204
143M
  }
205
140M
  return(pixels);
206
140M
}
207
208
static inline unsigned char *PopQuantumLongPixel(QuantumInfo *quantum_info,
209
  const size_t pixel,unsigned char *magick_restrict pixels)
210
0
{
211
0
  ssize_t
212
0
    i;
213
214
0
  size_t
215
0
    quantum_bits;
216
217
0
  if (quantum_info->state.bits == 0U)
218
0
    quantum_info->state.bits=32UL;
219
0
  for (i=(ssize_t) quantum_info->depth; i > 0; )
220
0
  {
221
0
    quantum_bits=(size_t) i;
222
0
    if (quantum_bits > quantum_info->state.bits)
223
0
      quantum_bits=quantum_info->state.bits;
224
0
    quantum_info->state.pixel|=(((pixel >> ((ssize_t) quantum_info->depth-i)) &
225
0
      quantum_info->state.mask[quantum_bits]) << (32U-
226
0
        quantum_info->state.bits));
227
0
    i-=(ssize_t) quantum_bits;
228
0
    quantum_info->state.bits-=quantum_bits;
229
0
    if (quantum_info->state.bits == 0U)
230
0
      {
231
0
        pixels=PopLongPixel(quantum_info->endian,quantum_info->state.pixel,
232
0
          pixels);
233
0
        quantum_info->state.pixel=0U;
234
0
        quantum_info->state.bits=32U;
235
0
      }
236
0
  }
237
0
  return(pixels);
238
0
}
239
240
static void ExportPixelChannel(const Image *image,QuantumInfo *quantum_info,
241
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
242
  unsigned char *magick_restrict q,PixelChannel channel)
243
1.11M
{
244
1.11M
  QuantumAny
245
1.11M
    range;
246
247
1.11M
  ssize_t
248
1.11M
    x;
249
250
1.11M
  p+=(ptrdiff_t) image->channel_map[channel].offset;
251
1.11M
  switch (quantum_info->depth)
252
1.11M
  {
253
135k
    case 8:
254
135k
    {
255
135k
      unsigned char
256
135k
        pixel;
257
258
3.21M
      for (x=0; x < (ssize_t) number_pixels; x++)
259
3.08M
      {
260
3.08M
        pixel=ScaleQuantumToChar(*p);
261
3.08M
        q=PopCharPixel(pixel,q);
262
3.08M
        p+=(ptrdiff_t) GetPixelChannels(image);
263
3.08M
        q+=(ptrdiff_t) quantum_info->pad;
264
3.08M
      }
265
135k
      break;
266
0
    }
267
656k
    case 16:
268
656k
    {
269
656k
      unsigned short
270
656k
        pixel;
271
272
656k
      if (quantum_info->format == FloatingPointQuantumFormat)
273
0
        {
274
0
          for (x=0; x < (ssize_t) number_pixels; x++)
275
0
          {
276
0
            pixel=SinglePrecisionToHalf(QuantumScale*(*p));
277
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
278
0
            p+=(ptrdiff_t) GetPixelChannels(image);
279
0
            q+=(ptrdiff_t) quantum_info->pad;
280
0
          }
281
0
          break;
282
0
        }
283
156M
      for (x=0; x < (ssize_t) number_pixels; x++)
284
155M
      {
285
155M
        pixel=ScaleQuantumToShort(*p);
286
155M
        q=PopShortPixel(quantum_info->endian,pixel,q);
287
155M
        p+=(ptrdiff_t) GetPixelChannels(image);
288
155M
        q+=(ptrdiff_t) quantum_info->pad;
289
155M
      }
290
656k
      break;
291
656k
    }
292
5.02k
    case 32:
293
5.02k
    {
294
5.02k
      unsigned int
295
5.02k
        pixel;
296
297
5.02k
      if (quantum_info->format == FloatingPointQuantumFormat)
298
3.04k
        {
299
14.0k
          for (x=0; x < (ssize_t) number_pixels; x++)
300
10.9k
          {
301
10.9k
            q=PopQuantumFloatPixel(quantum_info,(float) *p,q);
302
10.9k
            p+=(ptrdiff_t) GetPixelChannels(image);
303
10.9k
            q+=(ptrdiff_t) quantum_info->pad;
304
10.9k
          }
305
3.04k
          break;
306
3.04k
        }
307
5.14k
      for (x=0; x < (ssize_t) number_pixels; x++)
308
3.17k
      {
309
3.17k
        pixel=ScaleQuantumToLong(*p);
310
3.17k
        q=PopLongPixel(quantum_info->endian,pixel,q);
311
3.17k
        p+=(ptrdiff_t) GetPixelChannels(image);
312
3.17k
        q+=(ptrdiff_t) quantum_info->pad;
313
3.17k
      }
314
1.97k
      break;
315
5.02k
    }
316
3.28k
    case 64:
317
3.28k
    {
318
3.28k
      if (quantum_info->format == FloatingPointQuantumFormat)
319
1.80k
        {
320
4.72k
          for (x=0; x < (ssize_t) number_pixels; x++)
321
2.91k
          {
322
2.91k
            q=PopQuantumDoublePixel(quantum_info,(double) *p,q);
323
2.91k
            p+=(ptrdiff_t) GetPixelChannels(image);
324
2.91k
            q+=(ptrdiff_t) quantum_info->pad;
325
2.91k
          }
326
1.80k
          break;
327
1.80k
        }
328
1.47k
      magick_fallthrough;
329
1.47k
    }
330
320k
    default:
331
320k
    {
332
320k
      range=GetQuantumRange(quantum_info->depth);
333
137M
      for (x=0; x < (ssize_t) number_pixels; x++)
334
137M
      {
335
137M
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(*p,range),q);
336
137M
        p+=(ptrdiff_t) GetPixelChannels(image);
337
137M
        q+=(ptrdiff_t) quantum_info->pad;
338
137M
      }
339
320k
      break;
340
1.47k
    }
341
1.11M
  }
342
1.11M
}
343
344
static void ExportAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
345
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
346
  unsigned char *magick_restrict q,ExceptionInfo *exception)
347
377k
{
348
377k
  if (image->alpha_trait == UndefinedPixelTrait)
349
0
    {
350
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
351
0
        "ImageDoesNotHaveAnAlphaChannel","`%s'",image->filename);
352
0
      return;
353
0
    }
354
377k
  ExportPixelChannel(image,quantum_info,number_pixels,p,q,AlphaPixelChannel);
355
377k
}
356
357
static void ExportBGRQuantum(const Image *image,QuantumInfo *quantum_info,
358
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
359
  unsigned char *magick_restrict q)
360
0
{
361
0
  QuantumAny
362
0
    range;
363
364
0
  ssize_t
365
0
    x;
366
367
0
  ssize_t
368
0
    bit;
369
370
0
  switch (quantum_info->depth)
371
0
  {
372
0
    case 8:
373
0
    {
374
0
      for (x=0; x < (ssize_t) number_pixels; x++)
375
0
      {
376
0
        q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
377
0
        q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
378
0
        q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
379
0
        p+=(ptrdiff_t) GetPixelChannels(image);
380
0
        q+=(ptrdiff_t) quantum_info->pad;
381
0
      }
382
0
      break;
383
0
    }
384
0
    case 10:
385
0
    {
386
0
      unsigned int
387
0
        pixel;
388
389
0
      range=GetQuantumRange(quantum_info->depth);
390
0
      if (quantum_info->pack == MagickFalse)
391
0
        {
392
0
          for (x=0; x < (ssize_t) number_pixels; x++)
393
0
          {
394
0
            pixel=(unsigned int) (
395
0
              ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
396
0
              ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
397
0
              ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
398
0
            q=PopLongPixel(quantum_info->endian,pixel,q);
399
0
            p+=(ptrdiff_t) GetPixelChannels(image);
400
0
            q+=(ptrdiff_t) quantum_info->pad;
401
0
          }
402
0
          break;
403
0
        }
404
0
      if (quantum_info->quantum == 32UL)
405
0
        {
406
0
          for (x=0; x < (ssize_t) number_pixels; x++)
407
0
          {
408
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
409
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
410
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
411
0
              range);
412
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
413
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
414
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
415
0
            p+=(ptrdiff_t) GetPixelChannels(image);
416
0
            q+=(ptrdiff_t) quantum_info->pad;
417
0
          }
418
0
          break;
419
0
        }
420
0
      for (x=0; x < (ssize_t) number_pixels; x++)
421
0
      {
422
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
423
0
        q=PopQuantumPixel(quantum_info,pixel,q);
424
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
425
0
        q=PopQuantumPixel(quantum_info,pixel,q);
426
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
427
0
        q=PopQuantumPixel(quantum_info,pixel,q);
428
0
        p+=(ptrdiff_t) GetPixelChannels(image);
429
0
        q+=(ptrdiff_t) quantum_info->pad;
430
0
      }
431
0
      break;
432
0
    }
433
0
    case 12:
434
0
    {
435
0
      unsigned int
436
0
        pixel;
437
438
0
      range=GetQuantumRange(quantum_info->depth);
439
0
      if (quantum_info->pack == MagickFalse)
440
0
        {
441
0
          for (x=0; x < (3*(ssize_t) number_pixels-1); x+=2)
442
0
          {
443
0
            switch (x % 3)
444
0
            {
445
0
              default:
446
0
              case 0:
447
0
              {
448
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
449
0
                  range);
450
0
                break;
451
0
              }
452
0
              case 1:
453
0
              {
454
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
455
0
                  range);
456
0
                break;
457
0
              }
458
0
              case 2:
459
0
              {
460
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
461
0
                  range);
462
0
                p+=(ptrdiff_t) GetPixelChannels(image);
463
0
                break;
464
0
              }
465
0
            }
466
0
            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
467
0
              q);
468
0
            switch ((x+1) % 3)
469
0
            {
470
0
              default:
471
0
              case 0:
472
0
              {
473
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
474
0
                  range);
475
0
                break;
476
0
              }
477
0
              case 1:
478
0
              {
479
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
480
0
                  range);
481
0
                break;
482
0
              }
483
0
              case 2:
484
0
              {
485
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
486
0
                  range);
487
0
                p+=(ptrdiff_t) GetPixelChannels(image);
488
0
                break;
489
0
              }
490
0
            }
491
0
            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
492
0
              q);
493
0
            q+=(ptrdiff_t) quantum_info->pad;
494
0
          }
495
0
          for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
496
0
          {
497
0
            switch ((x+bit) % 3)
498
0
            {
499
0
              default:
500
0
              case 0:
501
0
              {
502
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
503
0
                  range);
504
0
                break;
505
0
              }
506
0
              case 1:
507
0
              {
508
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
509
0
                  range);
510
0
                break;
511
0
              }
512
0
              case 2:
513
0
              {
514
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
515
0
                  range);
516
0
                p+=(ptrdiff_t) GetPixelChannels(image);
517
0
                break;
518
0
              }
519
0
            }
520
0
            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
521
0
              q);
522
0
            q+=(ptrdiff_t) quantum_info->pad;
523
0
          }
524
0
          if (bit != 0)
525
0
            p+=(ptrdiff_t) GetPixelChannels(image);
526
0
          break;
527
0
        }
528
0
      if (quantum_info->quantum == 32UL)
529
0
        {
530
0
          for (x=0; x < (ssize_t) number_pixels; x++)
531
0
          {
532
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
533
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
534
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
535
0
              range);
536
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
537
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
538
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
539
0
            p+=(ptrdiff_t) GetPixelChannels(image);
540
0
            q+=(ptrdiff_t) quantum_info->pad;
541
0
          }
542
0
          break;
543
0
        }
544
0
      for (x=0; x < (ssize_t) number_pixels; x++)
545
0
      {
546
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
547
0
        q=PopQuantumPixel(quantum_info,pixel,q);
548
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
549
0
        q=PopQuantumPixel(quantum_info,pixel,q);
550
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
551
0
        q=PopQuantumPixel(quantum_info,pixel,q);
552
0
        p+=(ptrdiff_t) GetPixelChannels(image);
553
0
        q+=(ptrdiff_t) quantum_info->pad;
554
0
      }
555
0
      break;
556
0
    }
557
0
    case 16:
558
0
    {
559
0
      unsigned short
560
0
        pixel;
561
562
0
      if (quantum_info->format == FloatingPointQuantumFormat)
563
0
        {
564
0
          for (x=0; x < (ssize_t) number_pixels; x++)
565
0
          {
566
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
567
0
              GetPixelBlue(image,p));
568
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
569
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
570
0
              GetPixelGreen(image,p));
571
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
572
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
573
0
              GetPixelRed(image,p));
574
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
575
0
            p+=(ptrdiff_t) GetPixelChannels(image);
576
0
            q+=(ptrdiff_t) quantum_info->pad;
577
0
          }
578
0
          break;
579
0
        }
580
0
      for (x=0; x < (ssize_t) number_pixels; x++)
581
0
      {
582
0
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
583
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
584
0
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
585
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
586
0
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
587
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
588
0
        p+=(ptrdiff_t) GetPixelChannels(image);
589
0
        q+=(ptrdiff_t) quantum_info->pad;
590
0
      }
591
0
      break;
592
0
    }
593
0
    case 32:
594
0
    {
595
0
      unsigned int
596
0
        pixel;
597
598
0
      if (quantum_info->format == FloatingPointQuantumFormat)
599
0
        {
600
0
          for (x=0; x < (ssize_t) number_pixels; x++)
601
0
          {
602
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
603
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
604
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
605
0
            p+=(ptrdiff_t) GetPixelChannels(image);
606
0
            q+=(ptrdiff_t) quantum_info->pad;
607
0
          }
608
0
          break;
609
0
        }
610
0
      for (x=0; x < (ssize_t) number_pixels; x++)
611
0
      {
612
0
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
613
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
614
0
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
615
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
616
0
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
617
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
618
0
        p+=(ptrdiff_t) GetPixelChannels(image);
619
0
        q+=(ptrdiff_t) quantum_info->pad;
620
0
      }
621
0
      break;
622
0
    }
623
0
    case 64:
624
0
    {
625
0
      if (quantum_info->format == FloatingPointQuantumFormat)
626
0
        {
627
0
          for (x=0; x < (ssize_t) number_pixels; x++)
628
0
          {
629
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
630
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
631
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
632
0
            p+=(ptrdiff_t) GetPixelChannels(image);
633
0
            q+=(ptrdiff_t) quantum_info->pad;
634
0
          }
635
0
          break;
636
0
        }
637
0
      magick_fallthrough;
638
0
    }
639
0
    default:
640
0
    {
641
0
      range=GetQuantumRange(quantum_info->depth);
642
0
      for (x=0; x < (ssize_t) number_pixels; x++)
643
0
      {
644
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
645
0
          range),q);
646
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
647
0
          range),q);
648
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
649
0
          range),q);
650
0
        p+=(ptrdiff_t) GetPixelChannels(image);
651
0
        q+=(ptrdiff_t) quantum_info->pad;
652
0
      }
653
0
      break;
654
0
    }
655
0
  }
656
0
}
657
658
static void ExportBGRAQuantum(const Image *image,QuantumInfo *quantum_info,
659
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
660
  unsigned char *magick_restrict q)
661
0
{
662
0
  QuantumAny
663
0
    range;
664
665
0
  ssize_t
666
0
    x;
667
668
0
  switch (quantum_info->depth)
669
0
  {
670
0
    case 8:
671
0
    {
672
0
      unsigned char
673
0
        pixel;
674
675
0
      for (x=0; x < (ssize_t) number_pixels; x++)
676
0
      {
677
0
        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
678
0
        q=PopCharPixel(pixel,q);
679
0
        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
680
0
        q=PopCharPixel(pixel,q);
681
0
        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
682
0
        q=PopCharPixel(pixel,q);
683
0
        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
684
0
        q=PopCharPixel(pixel,q);
685
0
        p+=(ptrdiff_t) GetPixelChannels(image);
686
0
        q+=(ptrdiff_t) quantum_info->pad;
687
0
      }
688
0
      break;
689
0
    }
690
0
    case 10:
691
0
    {
692
0
      unsigned int
693
0
        pixel;
694
695
0
      range=GetQuantumRange(quantum_info->depth);
696
0
      if (quantum_info->pack == MagickFalse)
697
0
        {
698
0
          ssize_t
699
0
            i;
700
701
0
          size_t
702
0
            quantum;
703
704
0
          ssize_t
705
0
            n;
706
707
0
          n=0;
708
0
          quantum=0;
709
0
          pixel=0;
710
0
          for (x=0; x < (ssize_t) number_pixels; x++)
711
0
          {
712
0
            for (i=0; i < 4; i++)
713
0
            {
714
0
              switch (i)
715
0
              {
716
0
                case 0: quantum=(size_t) GetPixelRed(image,p); break;
717
0
                case 1: quantum=(size_t) GetPixelGreen(image,p); break;
718
0
                case 2: quantum=(size_t) GetPixelBlue(image,p); break;
719
0
                case 3: quantum=(size_t) GetPixelAlpha(image,p); break;
720
0
              }
721
0
              switch (n % 3)
722
0
              {
723
0
                case 0:
724
0
                {
725
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
726
0
                    range) << 22);
727
0
                  break;
728
0
                }
729
0
                case 1:
730
0
                {
731
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
732
0
                    range) << 12);
733
0
                  break;
734
0
                }
735
0
                case 2:
736
0
                {
737
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
738
0
                    range) << 2);
739
0
                  q=PopLongPixel(quantum_info->endian,pixel,q);
740
0
                  pixel=0;
741
0
                  break;
742
0
                }
743
0
              }
744
0
              n++;
745
0
            }
746
0
            p+=(ptrdiff_t) GetPixelChannels(image);
747
0
            q+=(ptrdiff_t) quantum_info->pad;
748
0
          }
749
0
          break;
750
0
        }
751
0
      if (quantum_info->quantum == 32UL)
752
0
        {
753
0
          for (x=0; x < (ssize_t) number_pixels; x++)
754
0
          {
755
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
756
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
757
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
758
0
              range);
759
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
760
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
761
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
762
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
763
0
              range);
764
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
765
0
            p+=(ptrdiff_t) GetPixelChannels(image);
766
0
            q+=(ptrdiff_t) quantum_info->pad;
767
0
          }
768
0
          break;
769
0
        }
770
0
      for (x=0; x < (ssize_t) number_pixels; x++)
771
0
      {
772
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
773
0
        q=PopQuantumPixel(quantum_info,pixel,q);
774
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
775
0
        q=PopQuantumPixel(quantum_info,pixel,q);
776
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
777
0
        q=PopQuantumPixel(quantum_info,pixel,q);
778
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
779
0
        q=PopQuantumPixel(quantum_info,pixel,q);
780
0
        p+=(ptrdiff_t) GetPixelChannels(image);
781
0
        q+=(ptrdiff_t) quantum_info->pad;
782
0
      }
783
0
      break;
784
0
    }
785
0
    case 16:
786
0
    {
787
0
      unsigned short
788
0
        pixel;
789
790
0
      if (quantum_info->format == FloatingPointQuantumFormat)
791
0
        {
792
0
          for (x=0; x < (ssize_t) number_pixels; x++)
793
0
          {
794
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
795
0
              GetPixelBlue(image,p));
796
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
797
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
798
0
              GetPixelGreen(image,p));
799
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
800
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
801
0
              GetPixelRed(image,p));
802
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
803
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
804
0
              GetPixelAlpha(image,p));
805
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
806
0
            p+=(ptrdiff_t) GetPixelChannels(image);
807
0
            q+=(ptrdiff_t) quantum_info->pad;
808
0
          }
809
0
          break;
810
0
        }
811
0
      for (x=0; x < (ssize_t) number_pixels; x++)
812
0
      {
813
0
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
814
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
815
0
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
816
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
817
0
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
818
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
819
0
        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
820
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
821
0
        p+=(ptrdiff_t) GetPixelChannels(image);
822
0
        q+=(ptrdiff_t) quantum_info->pad;
823
0
      }
824
0
      break;
825
0
    }
826
0
    case 32:
827
0
    {
828
0
      unsigned int
829
0
        pixel;
830
831
0
      if (quantum_info->format == FloatingPointQuantumFormat)
832
0
        {
833
0
          for (x=0; x < (ssize_t) number_pixels; x++)
834
0
          {
835
0
            float
836
0
              float_pixel;
837
838
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
839
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
840
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
841
0
            float_pixel=(float) GetPixelAlpha(image,p);
842
0
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
843
0
            p+=(ptrdiff_t) GetPixelChannels(image);
844
0
            q+=(ptrdiff_t) quantum_info->pad;
845
0
          }
846
0
          break;
847
0
        }
848
0
      for (x=0; x < (ssize_t) number_pixels; x++)
849
0
      {
850
0
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
851
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
852
0
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
853
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
854
0
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
855
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
856
0
        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
857
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
858
0
        p+=(ptrdiff_t) GetPixelChannels(image);
859
0
        q+=(ptrdiff_t) quantum_info->pad;
860
0
      }
861
0
      break;
862
0
    }
863
0
    case 64:
864
0
    {
865
0
      if (quantum_info->format == FloatingPointQuantumFormat)
866
0
        {
867
0
          double
868
0
            pixel;
869
870
0
          for (x=0; x < (ssize_t) number_pixels; x++)
871
0
          {
872
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
873
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
874
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
875
0
            pixel=(double) GetPixelAlpha(image,p);
876
0
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
877
0
            p+=(ptrdiff_t) GetPixelChannels(image);
878
0
            q+=(ptrdiff_t) quantum_info->pad;
879
0
          }
880
0
          break;
881
0
        }
882
0
      magick_fallthrough;
883
0
    }
884
0
    default:
885
0
    {
886
0
      range=GetQuantumRange(quantum_info->depth);
887
0
      for (x=0; x < (ssize_t) number_pixels; x++)
888
0
      {
889
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
890
0
          range),q);
891
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
892
0
          range),q);
893
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
894
0
          range),q);
895
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
896
0
          range),q);
897
0
        p+=(ptrdiff_t) GetPixelChannels(image);
898
0
        q+=(ptrdiff_t) quantum_info->pad;
899
0
      }
900
0
      break;
901
0
    }
902
0
  }
903
0
}
904
905
static void ExportBGROQuantum(const Image *image,QuantumInfo *quantum_info,
906
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
907
  unsigned char *magick_restrict q)
908
0
{
909
0
  QuantumAny
910
0
    range;
911
912
0
  ssize_t
913
0
    x;
914
915
0
  switch (quantum_info->depth)
916
0
  {
917
0
    case 8:
918
0
    {
919
0
      unsigned char
920
0
        pixel;
921
922
0
      for (x=0; x < (ssize_t) number_pixels; x++)
923
0
      {
924
0
        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
925
0
        q=PopCharPixel(pixel,q);
926
0
        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
927
0
        q=PopCharPixel(pixel,q);
928
0
        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
929
0
        q=PopCharPixel(pixel,q);
930
0
        pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
931
0
        q=PopCharPixel(pixel,q);
932
0
        p+=(ptrdiff_t) GetPixelChannels(image);
933
0
        q+=(ptrdiff_t) quantum_info->pad;
934
0
      }
935
0
      break;
936
0
    }
937
0
    case 10:
938
0
    {
939
0
      unsigned int
940
0
        pixel;
941
942
0
      range=GetQuantumRange(quantum_info->depth);
943
0
      if (quantum_info->pack == MagickFalse)
944
0
        {
945
0
          ssize_t
946
0
            i;
947
948
0
          size_t
949
0
            quantum;
950
951
0
          ssize_t
952
0
            n;
953
954
0
          n=0;
955
0
          quantum=0;
956
0
          pixel=0;
957
0
          for (x=0; x < (ssize_t) number_pixels; x++)
958
0
          {
959
0
            for (i=0; i < 4; i++)
960
0
            {
961
0
              switch (i)
962
0
              {
963
0
                case 0: quantum=(size_t) GetPixelRed(image,p); break;
964
0
                case 1: quantum=(size_t) GetPixelGreen(image,p); break;
965
0
                case 2: quantum=(size_t) GetPixelBlue(image,p); break;
966
0
                case 3: quantum=(size_t) GetPixelOpacity(image,p); break;
967
0
              }
968
0
              switch (n % 3)
969
0
              {
970
0
                case 0:
971
0
                {
972
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
973
0
                    range) << 22);
974
0
                  break;
975
0
                }
976
0
                case 1:
977
0
                {
978
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
979
0
                    range) << 12);
980
0
                  break;
981
0
                }
982
0
                case 2:
983
0
                {
984
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
985
0
                    range) << 2);
986
0
                  q=PopLongPixel(quantum_info->endian,pixel,q);
987
0
                  pixel=0;
988
0
                  break;
989
0
                }
990
0
              }
991
0
              n++;
992
0
            }
993
0
            p+=(ptrdiff_t) GetPixelChannels(image);
994
0
            q+=(ptrdiff_t) quantum_info->pad;
995
0
          }
996
0
          break;
997
0
        }
998
0
      if (quantum_info->quantum == 32UL)
999
0
        {
1000
0
          for (x=0; x < (ssize_t) number_pixels; x++)
1001
0
          {
1002
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
1003
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
1004
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
1005
0
              range);
1006
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
1007
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
1008
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
1009
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
1010
0
              range);
1011
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
1012
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1013
0
            q+=(ptrdiff_t) quantum_info->pad;
1014
0
          }
1015
0
          break;
1016
0
        }
1017
0
      for (x=0; x < (ssize_t) number_pixels; x++)
1018
0
      {
1019
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
1020
0
        q=PopQuantumPixel(quantum_info,pixel,q);
1021
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
1022
0
        q=PopQuantumPixel(quantum_info,pixel,q);
1023
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
1024
0
        q=PopQuantumPixel(quantum_info,pixel,q);
1025
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
1026
0
        q=PopQuantumPixel(quantum_info,pixel,q);
1027
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1028
0
        q+=(ptrdiff_t) quantum_info->pad;
1029
0
      }
1030
0
      break;
1031
0
    }
1032
0
    case 16:
1033
0
    {
1034
0
      unsigned short
1035
0
        pixel;
1036
1037
0
      if (quantum_info->format == FloatingPointQuantumFormat)
1038
0
        {
1039
0
          for (x=0; x < (ssize_t) number_pixels; x++)
1040
0
          {
1041
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1042
0
              GetPixelBlue(image,p));
1043
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1044
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1045
0
              GetPixelGreen(image,p));
1046
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1047
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1048
0
              GetPixelRed(image,p));
1049
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1050
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1051
0
              GetPixelOpacity(image,p));
1052
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1053
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1054
0
            q+=(ptrdiff_t) quantum_info->pad;
1055
0
          }
1056
0
          break;
1057
0
        }
1058
0
      for (x=0; x < (ssize_t) number_pixels; x++)
1059
0
      {
1060
0
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1061
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1062
0
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1063
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1064
0
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1065
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1066
0
        pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
1067
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1068
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1069
0
        q+=(ptrdiff_t) quantum_info->pad;
1070
0
      }
1071
0
      break;
1072
0
    }
1073
0
    case 32:
1074
0
    {
1075
0
      unsigned int
1076
0
        pixel;
1077
1078
0
      if (quantum_info->format == FloatingPointQuantumFormat)
1079
0
        {
1080
0
          for (x=0; x < (ssize_t) number_pixels; x++)
1081
0
          {
1082
0
            float
1083
0
              float_pixel;
1084
1085
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1086
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
1087
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
1088
0
            float_pixel=(float) GetPixelOpacity(image,p);
1089
0
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
1090
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1091
0
            q+=(ptrdiff_t) quantum_info->pad;
1092
0
          }
1093
0
          break;
1094
0
        }
1095
0
      for (x=0; x < (ssize_t) number_pixels; x++)
1096
0
      {
1097
0
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1098
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1099
0
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1100
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1101
0
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1102
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1103
0
        pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
1104
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1105
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1106
0
        q+=(ptrdiff_t) quantum_info->pad;
1107
0
      }
1108
0
      break;
1109
0
    }
1110
0
    case 64:
1111
0
    {
1112
0
      if (quantum_info->format == FloatingPointQuantumFormat)
1113
0
        {
1114
0
          double
1115
0
            pixel;
1116
1117
0
          for (x=0; x < (ssize_t) number_pixels; x++)
1118
0
          {
1119
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
1120
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
1121
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
1122
0
            pixel=(double) GetPixelOpacity(image,p);
1123
0
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
1124
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1125
0
            q+=(ptrdiff_t) quantum_info->pad;
1126
0
          }
1127
0
          break;
1128
0
        }
1129
0
      magick_fallthrough;
1130
0
    }
1131
0
    default:
1132
0
    {
1133
0
      range=GetQuantumRange(quantum_info->depth);
1134
0
      for (x=0; x < (ssize_t) number_pixels; x++)
1135
0
      {
1136
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1137
0
          range),q);
1138
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1139
0
          range),q);
1140
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1141
0
          range),q);
1142
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
1143
0
          range),q);
1144
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1145
0
        q+=(ptrdiff_t) quantum_info->pad;
1146
0
      }
1147
0
      break;
1148
0
    }
1149
0
  }
1150
0
}
1151
1152
static void ExportBlackQuantum(const Image *image,QuantumInfo *quantum_info,
1153
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
1154
  unsigned char *magick_restrict q,ExceptionInfo *exception)
1155
1.28k
{
1156
1.28k
  if (image->colorspace != CMYKColorspace)
1157
0
    {
1158
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1159
0
        "ColorSeparatedImageRequired","`%s'",image->filename);
1160
0
      return;
1161
0
    }
1162
1.28k
  ExportPixelChannel(image,quantum_info,number_pixels,p,q,BlackPixelChannel);
1163
1.28k
}
1164
1165
static void ExportCbYCrYQuantum(const Image *image,QuantumInfo *quantum_info,
1166
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
1167
  unsigned char *magick_restrict q)
1168
0
{
1169
0
  Quantum
1170
0
    cbcr[4];
1171
1172
0
  ssize_t
1173
0
    i,
1174
0
    x;
1175
1176
0
  unsigned int
1177
0
    pixel;
1178
1179
0
  size_t
1180
0
    quantum;
1181
1182
0
  ssize_t
1183
0
    n;
1184
1185
0
  n=0;
1186
0
  quantum=0;
1187
0
  switch (quantum_info->depth)
1188
0
  {
1189
0
    case 10:
1190
0
    {
1191
0
      if (quantum_info->pack == MagickFalse)
1192
0
        {
1193
0
          for (x=0; x < (ssize_t) number_pixels; x+=2)
1194
0
          {
1195
0
            for (i=0; i < 4; i++)
1196
0
            {
1197
0
              switch (n % 3)
1198
0
              {
1199
0
                case 0:
1200
0
                {
1201
0
                  quantum=(size_t) GetPixelRed(image,p);
1202
0
                  break;
1203
0
                }
1204
0
                case 1:
1205
0
                {
1206
0
                  quantum=(size_t) GetPixelGreen(image,p);
1207
0
                  break;
1208
0
                }
1209
0
                case 2:
1210
0
                {
1211
0
                  quantum=(size_t) GetPixelBlue(image,p);
1212
0
                  break;
1213
0
                }
1214
0
              }
1215
0
              cbcr[i]=(Quantum) quantum;
1216
0
              n++;
1217
0
            }
1218
0
            pixel=(unsigned int) ((size_t) (cbcr[1]) << 22 | (size_t)
1219
0
              (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
1220
0
            q=PopLongPixel(quantum_info->endian,pixel,q);
1221
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1222
0
            pixel=(unsigned int) ((size_t) (cbcr[3]) << 22 | (size_t)
1223
0
              (cbcr[0]) << 12 | (size_t) (cbcr[2]) << 2);
1224
0
            q=PopLongPixel(quantum_info->endian,pixel,q);
1225
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1226
0
            q+=(ptrdiff_t) quantum_info->pad;
1227
0
          }
1228
0
          break;
1229
0
        }
1230
0
      break;
1231
0
    }
1232
0
    default:
1233
0
    {
1234
0
      QuantumAny
1235
0
        range;
1236
1237
0
      for (x=0; x < (ssize_t) number_pixels; x+=2)
1238
0
      {
1239
0
        for (i=0; i < 4; i++)
1240
0
        {
1241
0
          switch (n % 3)
1242
0
          {
1243
0
            case 0:
1244
0
            {
1245
0
              quantum=(size_t) GetPixelRed(image,p);
1246
0
              break;
1247
0
            }
1248
0
            case 1:
1249
0
            {
1250
0
              quantum=(size_t) GetPixelGreen(image,p);
1251
0
              break;
1252
0
            }
1253
0
            case 2:
1254
0
            {
1255
0
              quantum=(size_t) GetPixelBlue(image,p);
1256
0
              break;
1257
0
            }
1258
0
          }
1259
0
          cbcr[i]=(Quantum) quantum;
1260
0
          n++;
1261
0
        }
1262
0
        range=GetQuantumRange(quantum_info->depth);
1263
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[1],range),q);
1264
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1265
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1266
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1267
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[3],range),q);
1268
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[0],range),q);
1269
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(cbcr[2],range),q);
1270
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1271
0
        q+=(ptrdiff_t) quantum_info->pad;
1272
0
      }
1273
0
      break;
1274
0
    }
1275
0
  }
1276
0
}
1277
1278
static void ExportCMYKQuantum(const Image *image,QuantumInfo *quantum_info,
1279
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
1280
  unsigned char *magick_restrict q,ExceptionInfo *exception)
1281
24.1k
{
1282
24.1k
  ssize_t
1283
24.1k
    x;
1284
1285
24.1k
  if (image->colorspace != CMYKColorspace)
1286
0
    {
1287
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1288
0
        "ColorSeparatedImageRequired","`%s'",image->filename);
1289
0
      return;
1290
0
    }
1291
24.1k
  switch (quantum_info->depth)
1292
24.1k
  {
1293
4.97k
    case 8:
1294
4.97k
    {
1295
4.97k
      unsigned char
1296
4.97k
        pixel;
1297
1298
2.00M
      for (x=0; x < (ssize_t) number_pixels; x++)
1299
1.99M
      {
1300
1.99M
        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1301
1.99M
        q=PopCharPixel(pixel,q);
1302
1.99M
        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1303
1.99M
        q=PopCharPixel(pixel,q);
1304
1.99M
        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1305
1.99M
        q=PopCharPixel(pixel,q);
1306
1.99M
        pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1307
1.99M
        q=PopCharPixel(pixel,q);
1308
1.99M
        p+=(ptrdiff_t) GetPixelChannels(image);
1309
1.99M
        q+=(ptrdiff_t) quantum_info->pad;
1310
1.99M
      }
1311
4.97k
      break;
1312
0
    }
1313
7.62k
    case 16:
1314
7.62k
    {
1315
7.62k
      unsigned short
1316
7.62k
        pixel;
1317
1318
7.62k
      if (quantum_info->format == FloatingPointQuantumFormat)
1319
4.61k
        {
1320
88.5k
          for (x=0; x < (ssize_t) number_pixels; x++)
1321
83.9k
          {
1322
83.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1323
83.9k
              GetPixelRed(image,p));
1324
83.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1325
83.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1326
83.9k
              GetPixelGreen(image,p));
1327
83.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1328
83.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1329
83.9k
              GetPixelBlue(image,p));
1330
83.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1331
83.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1332
83.9k
              GetPixelBlack(image,p));
1333
83.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1334
83.9k
            p+=(ptrdiff_t) GetPixelChannels(image);
1335
83.9k
            q+=(ptrdiff_t) quantum_info->pad;
1336
83.9k
          }
1337
4.61k
          break;
1338
4.61k
        }
1339
55.3k
      for (x=0; x < (ssize_t) number_pixels; x++)
1340
52.3k
      {
1341
52.3k
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1342
52.3k
        q=PopShortPixel(quantum_info->endian,pixel,q);
1343
52.3k
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1344
52.3k
        q=PopShortPixel(quantum_info->endian,pixel,q);
1345
52.3k
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1346
52.3k
        q=PopShortPixel(quantum_info->endian,pixel,q);
1347
52.3k
        pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1348
52.3k
        q=PopShortPixel(quantum_info->endian,pixel,q);
1349
52.3k
        p+=(ptrdiff_t) GetPixelChannels(image);
1350
52.3k
        q+=(ptrdiff_t) quantum_info->pad;
1351
52.3k
      }
1352
3.01k
      break;
1353
7.62k
    }
1354
8.38k
    case 32:
1355
8.38k
    {
1356
8.38k
      unsigned int
1357
8.38k
        pixel;
1358
1359
8.38k
      if (quantum_info->format == FloatingPointQuantumFormat)
1360
1.24k
        {
1361
6.43k
          for (x=0; x < (ssize_t) number_pixels; x++)
1362
5.19k
          {
1363
5.19k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelRed(image,p),
1364
5.19k
              q);
1365
5.19k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelGreen(image,p),
1366
5.19k
              q);
1367
5.19k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlue(image,p),
1368
5.19k
              q);
1369
5.19k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlack(image,p),
1370
5.19k
              q);
1371
5.19k
            p+=(ptrdiff_t) GetPixelChannels(image);
1372
5.19k
            q+=(ptrdiff_t) quantum_info->pad;
1373
5.19k
          }
1374
1.24k
          break;
1375
1.24k
        }
1376
27.7k
      for (x=0; x < (ssize_t) number_pixels; x++)
1377
20.6k
      {
1378
20.6k
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1379
20.6k
        q=PopLongPixel(quantum_info->endian,pixel,q);
1380
20.6k
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1381
20.6k
        q=PopLongPixel(quantum_info->endian,pixel,q);
1382
20.6k
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1383
20.6k
        q=PopLongPixel(quantum_info->endian,pixel,q);
1384
20.6k
        pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1385
20.6k
        q=PopLongPixel(quantum_info->endian,pixel,q);
1386
20.6k
        p+=(ptrdiff_t) GetPixelChannels(image);
1387
20.6k
        q+=(ptrdiff_t) quantum_info->pad;
1388
20.6k
      }
1389
7.14k
      break;
1390
8.38k
    }
1391
1.02k
    case 64:
1392
1.02k
    {
1393
1.02k
      if (quantum_info->format == FloatingPointQuantumFormat)
1394
130
        {
1395
810
          for (x=0; x < (ssize_t) number_pixels; x++)
1396
680
          {
1397
680
            q=PopQuantumDoublePixel(quantum_info,(double)
1398
680
              GetPixelRed(image,p),q);
1399
680
            q=PopQuantumDoublePixel(quantum_info,(double)
1400
680
              GetPixelGreen(image,p),q);
1401
680
            q=PopQuantumDoublePixel(quantum_info,(double)
1402
680
              GetPixelBlue(image,p),q);
1403
680
            q=PopQuantumDoublePixel(quantum_info,(double)
1404
680
              GetPixelBlack(image,p),q);
1405
680
            p+=(ptrdiff_t) GetPixelChannels(image);
1406
680
            q+=(ptrdiff_t) quantum_info->pad;
1407
680
          }
1408
130
          break;
1409
130
        }
1410
896
      magick_fallthrough;
1411
896
    }
1412
3.03k
    default:
1413
3.03k
    {
1414
3.03k
      QuantumAny
1415
3.03k
        range;
1416
1417
3.03k
      range=GetQuantumRange(quantum_info->depth);
1418
67.2k
      for (x=0; x < (ssize_t) number_pixels; x++)
1419
64.1k
      {
1420
64.1k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1421
64.1k
          range),q);
1422
64.1k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1423
64.1k
          range),q);
1424
64.1k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1425
64.1k
          range),q);
1426
64.1k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1427
64.1k
          range),q);
1428
64.1k
        p+=(ptrdiff_t) GetPixelChannels(image);
1429
64.1k
        q+=(ptrdiff_t) quantum_info->pad;
1430
64.1k
      }
1431
3.03k
      break;
1432
896
    }
1433
24.1k
  }
1434
24.1k
}
1435
1436
static void ExportCMYKAQuantum(const Image *image,QuantumInfo *quantum_info,
1437
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
1438
  unsigned char *magick_restrict q,ExceptionInfo *exception)
1439
34.9k
{
1440
34.9k
  ssize_t
1441
34.9k
    x;
1442
1443
34.9k
  if (image->colorspace != CMYKColorspace)
1444
0
    {
1445
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1446
0
        "ColorSeparatedImageRequired","`%s'",image->filename);
1447
0
      return;
1448
0
    }
1449
34.9k
  switch (quantum_info->depth)
1450
34.9k
  {
1451
7.02k
    case 8:
1452
7.02k
    {
1453
7.02k
      unsigned char
1454
7.02k
        pixel;
1455
1456
7.42M
      for (x=0; x < (ssize_t) number_pixels; x++)
1457
7.42M
      {
1458
7.42M
        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1459
7.42M
        q=PopCharPixel(pixel,q);
1460
7.42M
        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1461
7.42M
        q=PopCharPixel(pixel,q);
1462
7.42M
        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1463
7.42M
        q=PopCharPixel(pixel,q);
1464
7.42M
        pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1465
7.42M
        q=PopCharPixel(pixel,q);
1466
7.42M
        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
1467
7.42M
        q=PopCharPixel(pixel,q);
1468
7.42M
        p+=(ptrdiff_t) GetPixelChannels(image);
1469
7.42M
        q+=(ptrdiff_t) quantum_info->pad;
1470
7.42M
      }
1471
7.02k
      break;
1472
0
    }
1473
8.95k
    case 16:
1474
8.95k
    {
1475
8.95k
      unsigned short
1476
8.95k
        pixel;
1477
1478
8.95k
      if (quantum_info->format == FloatingPointQuantumFormat)
1479
3.52k
        {
1480
77.4k
          for (x=0; x < (ssize_t) number_pixels; x++)
1481
73.9k
          {
1482
73.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1483
73.9k
              GetPixelRed(image,p));
1484
73.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1485
73.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1486
73.9k
              GetPixelGreen(image,p));
1487
73.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1488
73.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1489
73.9k
              GetPixelBlue(image,p));
1490
73.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1491
73.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1492
73.9k
              GetPixelBlack(image,p));
1493
73.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1494
73.9k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1495
73.9k
              GetPixelAlpha(image,p));
1496
73.9k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1497
73.9k
            p+=(ptrdiff_t) GetPixelChannels(image);
1498
73.9k
            q+=(ptrdiff_t) quantum_info->pad;
1499
73.9k
          }
1500
3.52k
          break;
1501
3.52k
        }
1502
3.63M
      for (x=0; x < (ssize_t) number_pixels; x++)
1503
3.62M
      {
1504
3.62M
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1505
3.62M
        q=PopShortPixel(quantum_info->endian,pixel,q);
1506
3.62M
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1507
3.62M
        q=PopShortPixel(quantum_info->endian,pixel,q);
1508
3.62M
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1509
3.62M
        q=PopShortPixel(quantum_info->endian,pixel,q);
1510
3.62M
        pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1511
3.62M
        q=PopShortPixel(quantum_info->endian,pixel,q);
1512
3.62M
        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
1513
3.62M
        q=PopShortPixel(quantum_info->endian,pixel,q);
1514
3.62M
        p+=(ptrdiff_t) GetPixelChannels(image);
1515
3.62M
        q+=(ptrdiff_t) quantum_info->pad;
1516
3.62M
      }
1517
5.43k
      break;
1518
8.95k
    }
1519
16.9k
    case 32:
1520
16.9k
    {
1521
16.9k
      unsigned int
1522
16.9k
        pixel;
1523
1524
16.9k
      if (quantum_info->format == FloatingPointQuantumFormat)
1525
2.84k
        {
1526
10.3k
          for (x=0; x < (ssize_t) number_pixels; x++)
1527
7.54k
          {
1528
7.54k
            q=PopQuantumFloatPixel(quantum_info,(float)
1529
7.54k
              GetPixelRed(image,p),q);
1530
7.54k
            q=PopQuantumFloatPixel(quantum_info,(float)
1531
7.54k
              GetPixelGreen(image,p),q);
1532
7.54k
            q=PopQuantumFloatPixel(quantum_info,(float)
1533
7.54k
              GetPixelBlue(image,p),q);
1534
7.54k
            q=PopQuantumFloatPixel(quantum_info,(float)
1535
7.54k
              GetPixelBlack(image,p),q);
1536
7.54k
            q=PopQuantumFloatPixel(quantum_info,(float)
1537
7.54k
              GetPixelAlpha(image,p),q);
1538
7.54k
            p+=(ptrdiff_t) GetPixelChannels(image);
1539
7.54k
            q+=(ptrdiff_t) quantum_info->pad;
1540
7.54k
          }
1541
2.84k
          break;
1542
2.84k
        }
1543
19.2M
      for (x=0; x < (ssize_t) number_pixels; x++)
1544
19.2M
      {
1545
19.2M
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1546
19.2M
        q=PopLongPixel(quantum_info->endian,pixel,q);
1547
19.2M
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1548
19.2M
        q=PopLongPixel(quantum_info->endian,pixel,q);
1549
19.2M
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1550
19.2M
        q=PopLongPixel(quantum_info->endian,pixel,q);
1551
19.2M
        pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1552
19.2M
        q=PopLongPixel(quantum_info->endian,pixel,q);
1553
19.2M
        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
1554
19.2M
        q=PopLongPixel(quantum_info->endian,pixel,q);
1555
19.2M
        p+=(ptrdiff_t) GetPixelChannels(image);
1556
19.2M
        q+=(ptrdiff_t) quantum_info->pad;
1557
19.2M
      }
1558
14.0k
      break;
1559
16.9k
    }
1560
256
    case 64:
1561
256
    {
1562
256
      if (quantum_info->format == FloatingPointQuantumFormat)
1563
205
        {
1564
594
          for (x=0; x < (ssize_t) number_pixels; x++)
1565
389
          {
1566
389
            q=PopQuantumDoublePixel(quantum_info,(double)
1567
389
              GetPixelRed(image,p),q);
1568
389
            q=PopQuantumDoublePixel(quantum_info,(double)
1569
389
              GetPixelGreen(image,p),q);
1570
389
            q=PopQuantumDoublePixel(quantum_info,(double)
1571
389
              GetPixelBlue(image,p),q);
1572
389
            q=PopQuantumDoublePixel(quantum_info,(double)
1573
389
              GetPixelBlack(image,p),q);
1574
389
            q=PopQuantumDoublePixel(quantum_info,(double)
1575
389
              GetPixelAlpha(image,p),q);
1576
389
            p+=(ptrdiff_t) GetPixelChannels(image);
1577
389
            q+=(ptrdiff_t) quantum_info->pad;
1578
389
          }
1579
205
          break;
1580
205
        }
1581
51
      magick_fallthrough;
1582
51
    }
1583
1.83k
    default:
1584
1.83k
    {
1585
1.83k
      QuantumAny
1586
1.83k
        range;
1587
1588
1.83k
      range=GetQuantumRange(quantum_info->depth);
1589
229k
      for (x=0; x < (ssize_t) number_pixels; x++)
1590
227k
      {
1591
227k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1592
227k
          range),q);
1593
227k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1594
227k
          range),q);
1595
227k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1596
227k
          range),q);
1597
227k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1598
227k
          range),q);
1599
227k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
1600
227k
          range),q);
1601
227k
        p+=(ptrdiff_t) GetPixelChannels(image);
1602
227k
        q+=(ptrdiff_t) quantum_info->pad;
1603
227k
      }
1604
1.83k
      break;
1605
51
    }
1606
34.9k
  }
1607
34.9k
}
1608
1609
static void ExportCMYKOQuantum(const Image *image,QuantumInfo *quantum_info,
1610
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
1611
  unsigned char *magick_restrict q,ExceptionInfo *exception)
1612
0
{
1613
0
  ssize_t
1614
0
    x;
1615
1616
0
  if (image->colorspace != CMYKColorspace)
1617
0
    {
1618
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1619
0
        "ColorSeparatedImageRequired","`%s'",image->filename);
1620
0
      return;
1621
0
    }
1622
0
  switch (quantum_info->depth)
1623
0
  {
1624
0
    case 8:
1625
0
    {
1626
0
      unsigned char
1627
0
        pixel;
1628
1629
0
      for (x=0; x < (ssize_t) number_pixels; x++)
1630
0
      {
1631
0
        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
1632
0
        q=PopCharPixel(pixel,q);
1633
0
        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
1634
0
        q=PopCharPixel(pixel,q);
1635
0
        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
1636
0
        q=PopCharPixel(pixel,q);
1637
0
        pixel=ScaleQuantumToChar(GetPixelBlack(image,p));
1638
0
        q=PopCharPixel(pixel,q);
1639
0
        pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
1640
0
        q=PopCharPixel(pixel,q);
1641
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1642
0
        q+=(ptrdiff_t) quantum_info->pad;
1643
0
      }
1644
0
      break;
1645
0
    }
1646
0
    case 16:
1647
0
    {
1648
0
      unsigned short
1649
0
        pixel;
1650
1651
0
      if (quantum_info->format == FloatingPointQuantumFormat)
1652
0
        {
1653
0
          for (x=0; x < (ssize_t) number_pixels; x++)
1654
0
          {
1655
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1656
0
              GetPixelRed(image,p));
1657
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1658
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1659
0
              GetPixelGreen(image,p));
1660
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1661
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1662
0
              GetPixelBlue(image,p));
1663
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1664
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1665
0
              GetPixelBlack(image,p));
1666
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1667
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1668
0
              GetPixelOpacity(image,p));
1669
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
1670
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1671
0
            q+=(ptrdiff_t) quantum_info->pad;
1672
0
          }
1673
0
          break;
1674
0
        }
1675
0
      for (x=0; x < (ssize_t) number_pixels; x++)
1676
0
      {
1677
0
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
1678
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1679
0
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
1680
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1681
0
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
1682
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1683
0
        pixel=ScaleQuantumToShort(GetPixelBlack(image,p));
1684
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1685
0
        pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
1686
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
1687
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1688
0
        q+=(ptrdiff_t) quantum_info->pad;
1689
0
      }
1690
0
      break;
1691
0
    }
1692
0
    case 32:
1693
0
    {
1694
0
      unsigned int
1695
0
        pixel;
1696
1697
0
      if (quantum_info->format == FloatingPointQuantumFormat)
1698
0
        {
1699
0
          for (x=0; x < (ssize_t) number_pixels; x++)
1700
0
          {
1701
0
            float
1702
0
              float_pixel;
1703
1704
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
1705
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelGreen(image,p),
1706
0
              q);
1707
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlue(image,p),
1708
0
              q);
1709
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlack(image,p),
1710
0
              q);
1711
0
            float_pixel=(float) (GetPixelOpacity(image,p));
1712
0
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
1713
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1714
0
            q+=(ptrdiff_t) quantum_info->pad;
1715
0
          }
1716
0
          break;
1717
0
        }
1718
0
      for (x=0; x < (ssize_t) number_pixels; x++)
1719
0
      {
1720
0
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
1721
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1722
0
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
1723
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1724
0
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
1725
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1726
0
        pixel=ScaleQuantumToLong(GetPixelBlack(image,p));
1727
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1728
0
        pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
1729
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
1730
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1731
0
        q+=(ptrdiff_t) quantum_info->pad;
1732
0
      }
1733
0
      break;
1734
0
    }
1735
0
    case 64:
1736
0
    {
1737
0
      if (quantum_info->format == FloatingPointQuantumFormat)
1738
0
        {
1739
0
          double
1740
0
            pixel;
1741
1742
0
          for (x=0; x < (ssize_t) number_pixels; x++)
1743
0
          {
1744
0
            q=PopQuantumDoublePixel(quantum_info,(double)
1745
0
              GetPixelRed(image,p),q);
1746
0
            q=PopQuantumDoublePixel(quantum_info,(double)
1747
0
              GetPixelGreen(image,p),q);
1748
0
            q=PopQuantumDoublePixel(quantum_info,(double)
1749
0
              GetPixelBlue(image,p),q);
1750
0
            q=PopQuantumDoublePixel(quantum_info,(double)
1751
0
              GetPixelBlack(image,p),q);
1752
0
            pixel=(double) (GetPixelOpacity(image,p));
1753
0
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
1754
0
            p+=(ptrdiff_t) GetPixelChannels(image);
1755
0
            q+=(ptrdiff_t) quantum_info->pad;
1756
0
          }
1757
0
          break;
1758
0
        }
1759
0
      magick_fallthrough;
1760
0
    }
1761
0
    default:
1762
0
    {
1763
0
      QuantumAny
1764
0
        range;
1765
1766
0
      range=GetQuantumRange(quantum_info->depth);
1767
0
      for (x=0; x < (ssize_t) number_pixels; x++)
1768
0
      {
1769
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
1770
0
          range),q);
1771
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
1772
0
          range),q);
1773
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
1774
0
          range),q);
1775
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlack(image,p),
1776
0
          range),q);
1777
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
1778
0
          GetPixelOpacity(image,p),range),q);
1779
0
        p+=(ptrdiff_t) GetPixelChannels(image);
1780
0
        q+=(ptrdiff_t) quantum_info->pad;
1781
0
      }
1782
0
      break;
1783
0
    }
1784
0
  }
1785
0
}
1786
1787
static void ExportGrayQuantum(const Image *image,QuantumInfo *quantum_info,
1788
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
1789
  unsigned char *magick_restrict q)
1790
927k
{
1791
927k
  QuantumAny
1792
927k
    range;
1793
1794
927k
  ssize_t
1795
927k
    x;
1796
1797
927k
  switch (quantum_info->depth)
1798
927k
  {
1799
449k
    case 1:
1800
449k
    {
1801
449k
      double
1802
449k
        threshold;
1803
1804
449k
      unsigned char
1805
449k
        black,
1806
449k
        white;
1807
1808
449k
      ssize_t
1809
449k
        bit;
1810
1811
449k
      black=0x00;
1812
449k
      white=0x01;
1813
449k
      if (quantum_info->min_is_white != MagickFalse)
1814
15.0k
        {
1815
15.0k
          black=0x01;
1816
15.0k
          white=0x00;
1817
15.0k
        }
1818
449k
      threshold=(double) QuantumRange/2.0;
1819
26.1M
      for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
1820
25.7M
      {
1821
25.7M
        *q='\0';
1822
25.7M
        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 7;
1823
25.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
1824
25.7M
        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 6;
1825
25.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
1826
25.7M
        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 5;
1827
25.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
1828
25.7M
        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 4;
1829
25.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
1830
25.7M
        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 3;
1831
25.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
1832
25.7M
        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 2;
1833
25.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
1834
25.7M
        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 1;
1835
25.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
1836
25.7M
        *q|=(GetPixelLuma(image,p) < threshold ? black : white) << 0;
1837
25.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
1838
25.7M
        q++;
1839
25.7M
      }
1840
449k
      if ((number_pixels % 8) != 0)
1841
338k
        {
1842
338k
          *q='\0';
1843
1.75M
          for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
1844
1.41M
          {
1845
1.41M
            *q|=(GetPixelLuma(image,p) < threshold ? black : white) << bit;
1846
1.41M
            p+=(ptrdiff_t) GetPixelChannels(image);
1847
1.41M
          }
1848
338k
          q++;
1849
338k
        }
1850
449k
      break;
1851
0
    }
1852
9.04k
    case 4:
1853
9.04k
    {
1854
9.04k
      unsigned char
1855
9.04k
        pixel;
1856
1857
48.7k
      for (x=0; x < ((ssize_t) number_pixels-1) ; x+=2)
1858
39.7k
      {
1859
39.7k
        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1860
39.7k
        *q=(((pixel >> 4) & 0xf) << 4);
1861
39.7k
        p+=(ptrdiff_t) GetPixelChannels(image);
1862
39.7k
        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1863
39.7k
        *q|=pixel >> 4;
1864
39.7k
        p+=(ptrdiff_t) GetPixelChannels(image);
1865
39.7k
        q++;
1866
39.7k
      }
1867
9.04k
      if ((number_pixels % 2) != 0)
1868
6.07k
        {
1869
6.07k
          pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1870
6.07k
          *q=(((pixel >> 4) & 0xf) << 4);
1871
6.07k
          p+=(ptrdiff_t) GetPixelChannels(image);
1872
6.07k
          q++;
1873
6.07k
        }
1874
9.04k
      break;
1875
0
    }
1876
375k
    case 8:
1877
375k
    {
1878
375k
      unsigned char
1879
375k
        pixel;
1880
1881
180M
      for (x=0; x < (ssize_t) number_pixels; x++)
1882
180M
      {
1883
180M
        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
1884
180M
        q=PopCharPixel(pixel,q);
1885
180M
        p+=(ptrdiff_t) GetPixelChannels(image);
1886
180M
        q+=(ptrdiff_t) quantum_info->pad;
1887
180M
      }
1888
375k
      break;
1889
0
    }
1890
2.89k
    case 10:
1891
2.89k
    {
1892
2.89k
      range=GetQuantumRange(quantum_info->depth);
1893
2.89k
      if (quantum_info->pack == MagickFalse)
1894
1.50k
        {
1895
1.50k
          unsigned int
1896
1.50k
            pixel;
1897
1898
7.03k
          for (x=0; x < ((ssize_t) number_pixels-2); x+=3)
1899
5.52k
          {
1900
5.52k
            pixel=(unsigned int) (ScaleQuantumToAny(ClampToQuantum(
1901
5.52k
              GetPixelLuma(image,p+2*GetPixelChannels(image))),range) << 22 |
1902
5.52k
              ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
1903
5.52k
              GetPixelChannels(image))),range) << 12 | ScaleQuantumToAny(
1904
5.52k
              ClampToQuantum(GetPixelLuma(image,p)),range) << 2);
1905
5.52k
            q=PopLongPixel(quantum_info->endian,pixel,q);
1906
5.52k
            p+=(ptrdiff_t) 3*GetPixelChannels(image);
1907
5.52k
            q+=(ptrdiff_t) quantum_info->pad;
1908
5.52k
          }
1909
1.50k
          if (x < (ssize_t) number_pixels)
1910
1.22k
            {
1911
1.22k
              pixel=0U;
1912
1.22k
              if (x++ < ((ssize_t) number_pixels-1))
1913
712
                pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p+
1914
712
                  GetPixelChannels(image))),range) << 12;
1915
1.22k
              if (x++ < (ssize_t) number_pixels)
1916
712
                pixel|=ScaleQuantumToAny(ClampToQuantum(GetPixelLuma(image,p)),
1917
712
                  range) << 2;
1918
1.22k
              q=PopLongPixel(quantum_info->endian,pixel,q);
1919
1.22k
            }
1920
1.50k
          break;
1921
1.50k
        }
1922
14.4k
      for (x=0; x < (ssize_t) number_pixels; x++)
1923
13.0k
      {
1924
13.0k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1925
13.0k
          GetPixelLuma(image,p)),range),q);
1926
13.0k
        p+=(ptrdiff_t) GetPixelChannels(image);
1927
13.0k
        q+=(ptrdiff_t) quantum_info->pad;
1928
13.0k
      }
1929
1.38k
      break;
1930
2.89k
    }
1931
4.40k
    case 12:
1932
4.40k
    {
1933
4.40k
      unsigned short
1934
4.40k
        pixel;
1935
1936
4.40k
      range=GetQuantumRange(quantum_info->depth);
1937
4.40k
      if (quantum_info->pack == MagickFalse)
1938
2.98k
        {
1939
9.63k
          for (x=0; x < (ssize_t) number_pixels; x++)
1940
6.64k
          {
1941
6.64k
            pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1942
6.64k
            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel >> 4),
1943
6.64k
              q);
1944
6.64k
            p+=(ptrdiff_t) GetPixelChannels(image);
1945
6.64k
            q+=(ptrdiff_t) quantum_info->pad;
1946
6.64k
          }
1947
2.98k
          break;
1948
2.98k
        }
1949
79.2k
      for (x=0; x < (ssize_t) number_pixels; x++)
1950
77.8k
      {
1951
77.8k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
1952
77.8k
          GetPixelLuma(image,p)),range),q);
1953
77.8k
        p+=(ptrdiff_t) GetPixelChannels(image);
1954
77.8k
        q+=(ptrdiff_t) quantum_info->pad;
1955
77.8k
      }
1956
1.42k
      break;
1957
4.40k
    }
1958
51.5k
    case 16:
1959
51.5k
    {
1960
51.5k
      unsigned short
1961
51.5k
        pixel;
1962
1963
51.5k
      if (quantum_info->format == FloatingPointQuantumFormat)
1964
1.90k
        {
1965
8.44k
          for (x=0; x < (ssize_t) number_pixels; x++)
1966
6.54k
          {
1967
6.54k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
1968
6.54k
              GetPixelLuma(image,p));
1969
6.54k
            q=PopShortPixel(quantum_info->endian,pixel,q);
1970
6.54k
            p+=(ptrdiff_t) GetPixelChannels(image);
1971
6.54k
            q+=(ptrdiff_t) quantum_info->pad;
1972
6.54k
          }
1973
1.90k
          break;
1974
1.90k
        }
1975
37.6M
      for (x=0; x < (ssize_t) number_pixels; x++)
1976
37.6M
      {
1977
37.6M
        pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
1978
37.6M
        q=PopShortPixel(quantum_info->endian,pixel,q);
1979
37.6M
        p+=(ptrdiff_t) GetPixelChannels(image);
1980
37.6M
        q+=(ptrdiff_t) quantum_info->pad;
1981
37.6M
      }
1982
49.6k
      break;
1983
51.5k
    }
1984
22.3k
    case 32:
1985
22.3k
    {
1986
22.3k
      unsigned int
1987
22.3k
        pixel;
1988
1989
22.3k
      if (quantum_info->format == FloatingPointQuantumFormat)
1990
16.3k
        {
1991
61.9k
          for (x=0; x < (ssize_t) number_pixels; x++)
1992
45.5k
          {
1993
45.5k
            float
1994
45.5k
              float_pixel;
1995
1996
45.5k
            float_pixel=(float) GetPixelLuma(image,p);
1997
45.5k
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
1998
45.5k
            p+=(ptrdiff_t) GetPixelChannels(image);
1999
45.5k
            q+=(ptrdiff_t) quantum_info->pad;
2000
45.5k
          }
2001
16.3k
          break;
2002
16.3k
        }
2003
57.1k
      for (x=0; x < (ssize_t) number_pixels; x++)
2004
51.1k
      {
2005
51.1k
        pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2006
51.1k
        q=PopLongPixel(quantum_info->endian,pixel,q);
2007
51.1k
        p+=(ptrdiff_t) GetPixelChannels(image);
2008
51.1k
        q+=(ptrdiff_t) quantum_info->pad;
2009
51.1k
      }
2010
5.97k
      break;
2011
22.3k
    }
2012
2.46k
    case 64:
2013
2.46k
    {
2014
2.46k
      if (quantum_info->format == FloatingPointQuantumFormat)
2015
353
        {
2016
1.73k
          for (x=0; x < (ssize_t) number_pixels; x++)
2017
1.38k
          {
2018
1.38k
            double
2019
1.38k
              pixel;
2020
2021
1.38k
            pixel=GetPixelLuma(image,p);
2022
1.38k
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
2023
1.38k
            p+=(ptrdiff_t) GetPixelChannels(image);
2024
1.38k
            q+=(ptrdiff_t) quantum_info->pad;
2025
1.38k
          }
2026
353
          break;
2027
353
        }
2028
2.10k
      magick_fallthrough;
2029
2.10k
    }
2030
11.7k
    default:
2031
11.7k
    {
2032
11.7k
      range=GetQuantumRange(quantum_info->depth);
2033
186k
      for (x=0; x < (ssize_t) number_pixels; x++)
2034
175k
      {
2035
175k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2036
175k
          GetPixelLuma(image,p)),range),q);
2037
175k
        p+=(ptrdiff_t) GetPixelChannels(image);
2038
175k
        q+=(ptrdiff_t) quantum_info->pad;
2039
175k
      }
2040
11.7k
      break;
2041
2.10k
    }
2042
927k
  }
2043
927k
}
2044
2045
static void ExportGrayAlphaQuantum(const Image *image,QuantumInfo *quantum_info,
2046
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
2047
  unsigned char *magick_restrict q)
2048
26.8k
{
2049
26.8k
  QuantumAny
2050
26.8k
    range;
2051
2052
26.8k
  ssize_t
2053
26.8k
    x;
2054
2055
26.8k
  switch (quantum_info->depth)
2056
26.8k
  {
2057
2.15k
    case 1:
2058
2.15k
    {
2059
2.15k
      double
2060
2.15k
        threshold;
2061
2062
2.15k
      unsigned char
2063
2.15k
        black,
2064
2.15k
        pixel,
2065
2.15k
        white;
2066
2067
2.15k
      ssize_t
2068
2.15k
        bit;
2069
2070
2.15k
      black=0x00;
2071
2.15k
      white=0x01;
2072
2.15k
      if (quantum_info->min_is_white != MagickFalse)
2073
0
        {
2074
0
          black=0x01;
2075
0
          white=0x00;
2076
0
        }
2077
2.15k
      threshold=(double) QuantumRange/2.0;
2078
7.60k
      for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2079
5.44k
      {
2080
5.44k
        *q='\0';
2081
5.44k
        *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 7;
2082
5.44k
        pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2083
2.72k
          0x00 : 0x01);
2084
5.44k
        *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 6);
2085
5.44k
        p+=(ptrdiff_t) GetPixelChannels(image);
2086
5.44k
        *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 5;
2087
5.44k
        pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2088
2.72k
          0x00 : 0x01);
2089
5.44k
        *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 4);
2090
5.44k
        p+=(ptrdiff_t) GetPixelChannels(image);
2091
5.44k
        *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 3;
2092
5.44k
        pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2093
2.83k
          0x00 : 0x01);
2094
5.44k
        *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 2);
2095
5.44k
        p+=(ptrdiff_t) GetPixelChannels(image);
2096
5.44k
        *q|=(GetPixelLuma(image,p) > threshold ? black : white) << 1;
2097
5.44k
        pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2098
2.84k
          0x00 : 0x01);
2099
5.44k
        *q|=(((int) pixel != 0 ? 0x00 : 0x01) << 0);
2100
5.44k
        p+=(ptrdiff_t) GetPixelChannels(image);
2101
5.44k
        q++;
2102
5.44k
      }
2103
2.15k
      if ((number_pixels % 4) != 0)
2104
1.55k
        {
2105
1.55k
          *q='\0';
2106
3.94k
          for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
2107
2.38k
          {
2108
2.38k
            *q|=(GetPixelLuma(image,p) > threshold ? black : white) <<
2109
2.38k
              (7-bit);
2110
2.38k
            pixel=(unsigned char) (GetPixelAlpha(image,p) == OpaqueAlpha ?
2111
1.39k
              0x00 : 0x01);
2112
2.38k
            *q|=(((int) pixel != 0 ? 0x00 : 0x01) << (unsigned char)
2113
2.38k
              (7-bit-1));
2114
2.38k
            p+=(ptrdiff_t) GetPixelChannels(image);
2115
2.38k
          }
2116
1.55k
          q++;
2117
1.55k
        }
2118
2.15k
      break;
2119
0
    }
2120
2.24k
    case 4:
2121
2.24k
    {
2122
2.24k
      unsigned char
2123
2.24k
        pixel;
2124
2125
6.92k
      for (x=0; x < (ssize_t) number_pixels ; x++)
2126
4.67k
      {
2127
4.67k
        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2128
4.67k
        *q=(((pixel >> 4) & 0xf) << 4);
2129
4.67k
        pixel=(unsigned char) (16.0*QuantumScale*(double)
2130
4.67k
          GetPixelAlpha(image,p)+0.5);
2131
4.67k
        *q|=pixel & 0xf;
2132
4.67k
        p+=(ptrdiff_t) GetPixelChannels(image);
2133
4.67k
        q++;
2134
4.67k
      }
2135
2.24k
      break;
2136
0
    }
2137
2.56k
    case 8:
2138
2.56k
    {
2139
2.56k
      unsigned char
2140
2.56k
        pixel;
2141
2142
237k
      for (x=0; x < (ssize_t) number_pixels; x++)
2143
234k
      {
2144
234k
        pixel=ScaleQuantumToChar(ClampToQuantum(GetPixelLuma(image,p)));
2145
234k
        q=PopCharPixel(pixel,q);
2146
234k
        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2147
234k
        q=PopCharPixel(pixel,q);
2148
234k
        p+=(ptrdiff_t) GetPixelChannels(image);
2149
234k
        q+=(ptrdiff_t) quantum_info->pad;
2150
234k
      }
2151
2.56k
      break;
2152
0
    }
2153
11.5k
    case 16:
2154
11.5k
    {
2155
11.5k
      unsigned short
2156
11.5k
        pixel;
2157
2158
11.5k
      if (quantum_info->format == FloatingPointQuantumFormat)
2159
5.93k
        {
2160
342k
          for (x=0; x < (ssize_t) number_pixels; x++)
2161
336k
          {
2162
336k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
2163
336k
              GetPixelLuma(image,p));
2164
336k
            q=PopShortPixel(quantum_info->endian,pixel,q);
2165
336k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
2166
336k
              GetPixelAlpha(image,p));
2167
336k
            q=PopShortPixel(quantum_info->endian,pixel,q);
2168
336k
            p+=(ptrdiff_t) GetPixelChannels(image);
2169
336k
            q+=(ptrdiff_t) quantum_info->pad;
2170
336k
          }
2171
5.93k
          break;
2172
5.93k
        }
2173
36.2k
      for (x=0; x < (ssize_t) number_pixels; x++)
2174
30.6k
      {
2175
30.6k
        pixel=ScaleQuantumToShort(ClampToQuantum(GetPixelLuma(image,p)));
2176
30.6k
        q=PopShortPixel(quantum_info->endian,pixel,q);
2177
30.6k
        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2178
30.6k
        q=PopShortPixel(quantum_info->endian,pixel,q);
2179
30.6k
        p+=(ptrdiff_t) GetPixelChannels(image);
2180
30.6k
        q+=(ptrdiff_t) quantum_info->pad;
2181
30.6k
      }
2182
5.62k
      break;
2183
11.5k
    }
2184
6.66k
    case 32:
2185
6.66k
    {
2186
6.66k
      unsigned int
2187
6.66k
        pixel;
2188
2189
6.66k
      if (quantum_info->format == FloatingPointQuantumFormat)
2190
4.56k
        {
2191
26.0k
          for (x=0; x < (ssize_t) number_pixels; x++)
2192
21.5k
          {
2193
21.5k
            float
2194
21.5k
              float_pixel;
2195
2196
21.5k
            float_pixel=(float) GetPixelLuma(image,p);
2197
21.5k
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2198
21.5k
            float_pixel=(float) (GetPixelAlpha(image,p));
2199
21.5k
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2200
21.5k
            p+=(ptrdiff_t) GetPixelChannels(image);
2201
21.5k
            q+=(ptrdiff_t) quantum_info->pad;
2202
21.5k
          }
2203
4.56k
          break;
2204
4.56k
        }
2205
24.8k
      for (x=0; x < (ssize_t) number_pixels; x++)
2206
22.7k
      {
2207
22.7k
        pixel=ScaleQuantumToLong(ClampToQuantum(GetPixelLuma(image,p)));
2208
22.7k
        q=PopLongPixel(quantum_info->endian,pixel,q);
2209
22.7k
        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2210
22.7k
        q=PopLongPixel(quantum_info->endian,pixel,q);
2211
22.7k
        p+=(ptrdiff_t) GetPixelChannels(image);
2212
22.7k
        q+=(ptrdiff_t) quantum_info->pad;
2213
22.7k
      }
2214
2.09k
      break;
2215
6.66k
    }
2216
928
    case 64:
2217
928
    {
2218
928
      if (quantum_info->format == FloatingPointQuantumFormat)
2219
333
        {
2220
1.46k
          for (x=0; x < (ssize_t) number_pixels; x++)
2221
1.12k
          {
2222
1.12k
            double
2223
1.12k
              pixel;
2224
2225
1.12k
            pixel=GetPixelLuma(image,p);
2226
1.12k
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
2227
1.12k
            pixel=(double) (GetPixelAlpha(image,p));
2228
1.12k
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
2229
1.12k
            p+=(ptrdiff_t) GetPixelChannels(image);
2230
1.12k
            q+=(ptrdiff_t) quantum_info->pad;
2231
1.12k
          }
2232
333
          break;
2233
333
        }
2234
595
      magick_fallthrough;
2235
595
    }
2236
1.37k
    default:
2237
1.37k
    {
2238
1.37k
      range=GetQuantumRange(quantum_info->depth);
2239
9.35k
      for (x=0; x < (ssize_t) number_pixels; x++)
2240
7.98k
      {
2241
7.98k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(ClampToQuantum(
2242
7.98k
          GetPixelLuma(image,p)),range),q);
2243
7.98k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2244
7.98k
          range),q);
2245
7.98k
        p+=(ptrdiff_t) GetPixelChannels(image);
2246
7.98k
        q+=(ptrdiff_t) quantum_info->pad;
2247
7.98k
      }
2248
1.37k
      break;
2249
595
    }
2250
26.8k
  }
2251
26.8k
}
2252
2253
static void ExportIndexQuantum(const Image *image,QuantumInfo *quantum_info,
2254
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
2255
  unsigned char *magick_restrict q,ExceptionInfo *exception)
2256
84.7k
{
2257
84.7k
  ssize_t
2258
84.7k
    x;
2259
2260
84.7k
  ssize_t
2261
84.7k
    bit;
2262
2263
84.7k
  if (image->storage_class != PseudoClass)
2264
0
    {
2265
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2266
0
        "ColormappedImageRequired","`%s'",image->filename);
2267
0
      return;
2268
0
    }
2269
84.7k
  switch (quantum_info->depth)
2270
84.7k
  {
2271
658
    case 1:
2272
658
    {
2273
658
      unsigned char
2274
658
        pixel;
2275
2276
1.29k
      for (x=((ssize_t) number_pixels-7); x > 0; x-=8)
2277
632
      {
2278
632
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2279
632
        *q=((pixel & 0x01) << 7);
2280
632
        p+=(ptrdiff_t) GetPixelChannels(image);
2281
632
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2282
632
        *q|=((pixel & 0x01) << 6);
2283
632
        p+=(ptrdiff_t) GetPixelChannels(image);
2284
632
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2285
632
        *q|=((pixel & 0x01) << 5);
2286
632
        p+=(ptrdiff_t) GetPixelChannels(image);
2287
632
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2288
632
        *q|=((pixel & 0x01) << 4);
2289
632
        p+=(ptrdiff_t) GetPixelChannels(image);
2290
632
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2291
632
        *q|=((pixel & 0x01) << 3);
2292
632
        p+=(ptrdiff_t) GetPixelChannels(image);
2293
632
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2294
632
        *q|=((pixel & 0x01) << 2);
2295
632
        p+=(ptrdiff_t) GetPixelChannels(image);
2296
632
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2297
632
        *q|=((pixel & 0x01) << 1);
2298
632
        p+=(ptrdiff_t) GetPixelChannels(image);
2299
632
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2300
632
        *q|=((pixel & 0x01) << 0);
2301
632
        p+=(ptrdiff_t) GetPixelChannels(image);
2302
632
        q++;
2303
632
      }
2304
658
      if ((number_pixels % 8) != 0)
2305
320
        {
2306
320
          *q='\0';
2307
1.04k
          for (bit=7; bit >= (ssize_t) (8-(number_pixels % 8)); bit--)
2308
724
          {
2309
724
            pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2310
724
            *q|=((pixel & 0x01) << (unsigned char) bit);
2311
724
            p+=(ptrdiff_t) GetPixelChannels(image);
2312
724
          }
2313
320
          q++;
2314
320
        }
2315
658
      break;
2316
0
    }
2317
8.66k
    case 4:
2318
8.66k
    {
2319
8.66k
      unsigned char
2320
8.66k
        pixel;
2321
2322
523k
      for (x=0; x < ((ssize_t) number_pixels-1) ; x+=2)
2323
515k
      {
2324
515k
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2325
515k
        *q=((pixel & 0xf) << 4);
2326
515k
        p+=(ptrdiff_t) GetPixelChannels(image);
2327
515k
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2328
515k
        *q|=((pixel & 0xf) << 0);
2329
515k
        p+=(ptrdiff_t) GetPixelChannels(image);
2330
515k
        q++;
2331
515k
      }
2332
8.66k
      if ((number_pixels % 2) != 0)
2333
7.83k
        {
2334
7.83k
          pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2335
7.83k
          *q=((pixel & 0xf) << 4);
2336
7.83k
          p+=(ptrdiff_t) GetPixelChannels(image);
2337
7.83k
          q++;
2338
7.83k
        }
2339
8.66k
      break;
2340
0
    }
2341
70.8k
    case 8:
2342
70.8k
    {
2343
20.2M
      for (x=0; x < (ssize_t) number_pixels; x++)
2344
20.2M
      {
2345
20.2M
        q=PopCharPixel((unsigned char) ((ssize_t) GetPixelIndex(image,p)),q);
2346
20.2M
        p+=(ptrdiff_t) GetPixelChannels(image);
2347
20.2M
        q+=(ptrdiff_t) quantum_info->pad;
2348
20.2M
      }
2349
70.8k
      break;
2350
0
    }
2351
1.02k
    case 16:
2352
1.02k
    {
2353
1.02k
      if (quantum_info->format == FloatingPointQuantumFormat)
2354
0
        {
2355
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2356
0
          {
2357
0
            q=PopShortPixel(quantum_info->endian,SinglePrecisionToHalf(
2358
0
              QuantumScale*(double) GetPixelIndex(image,p)),q);
2359
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2360
0
            q+=(ptrdiff_t) quantum_info->pad;
2361
0
          }
2362
0
          break;
2363
0
        }
2364
8.02k
      for (x=0; x < (ssize_t) number_pixels; x++)
2365
6.99k
      {
2366
6.99k
        q=PopShortPixel(quantum_info->endian,(unsigned short)
2367
6.99k
          GetPixelIndex(image,p),q);
2368
6.99k
        p+=(ptrdiff_t) GetPixelChannels(image);
2369
6.99k
        q+=(ptrdiff_t) quantum_info->pad;
2370
6.99k
      }
2371
1.02k
      break;
2372
1.02k
    }
2373
3.09k
    case 32:
2374
3.09k
    {
2375
3.09k
      if (quantum_info->format == FloatingPointQuantumFormat)
2376
0
        {
2377
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2378
0
          {
2379
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2380
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2381
0
            q+=(ptrdiff_t) quantum_info->pad;
2382
0
          }
2383
0
          break;
2384
0
        }
2385
3.84M
      for (x=0; x < (ssize_t) number_pixels; x++)
2386
3.84M
      {
2387
3.84M
        q=PopLongPixel(quantum_info->endian,(unsigned int)
2388
3.84M
          GetPixelIndex(image,p),q);
2389
3.84M
        p+=(ptrdiff_t) GetPixelChannels(image);
2390
3.84M
        q+=(ptrdiff_t) quantum_info->pad;
2391
3.84M
      }
2392
3.09k
      break;
2393
3.09k
    }
2394
0
    case 64:
2395
0
    {
2396
0
      if (quantum_info->format == FloatingPointQuantumFormat)
2397
0
        {
2398
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2399
0
          {
2400
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2401
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2402
0
            q+=(ptrdiff_t) quantum_info->pad;
2403
0
          }
2404
0
          break;
2405
0
        }
2406
0
      magick_fallthrough;
2407
0
    }
2408
470
    default:
2409
470
    {
2410
4.75k
      for (x=0; x < (ssize_t) number_pixels; x++)
2411
4.28k
      {
2412
4.28k
        q=PopQuantumPixel(quantum_info,(QuantumAny) GetPixelIndex(image,p),q);
2413
4.28k
        p+=(ptrdiff_t) GetPixelChannels(image);
2414
4.28k
        q+=(ptrdiff_t) quantum_info->pad;
2415
4.28k
      }
2416
470
      break;
2417
0
    }
2418
84.7k
  }
2419
84.7k
}
2420
2421
static void ExportIndexAlphaQuantum(const Image *image,
2422
  QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2423
  const Quantum *magick_restrict p,unsigned char *magick_restrict q,
2424
  ExceptionInfo *exception)
2425
3.26k
{
2426
3.26k
  ssize_t
2427
3.26k
    x;
2428
2429
3.26k
  ssize_t
2430
3.26k
    bit;
2431
2432
3.26k
  if (image->storage_class != PseudoClass)
2433
0
    {
2434
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2435
0
        "ColormappedImageRequired","`%s'",image->filename);
2436
0
      return;
2437
0
    }
2438
3.26k
  switch (quantum_info->depth)
2439
3.26k
  {
2440
0
    case 1:
2441
0
    {
2442
0
      unsigned char
2443
0
        pixel;
2444
2445
0
      for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
2446
0
      {
2447
0
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2448
0
        *q=((pixel & 0x01) << 7);
2449
0
        pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2450
0
          TransparentAlpha ? 1 : 0);
2451
0
        *q|=((pixel & 0x01) << 6);
2452
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2453
0
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2454
0
        *q|=((pixel & 0x01) << 5);
2455
0
        pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2456
0
          TransparentAlpha ? 1 : 0);
2457
0
        *q|=((pixel & 0x01) << 4);
2458
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2459
0
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2460
0
        *q|=((pixel & 0x01) << 3);
2461
0
        pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2462
0
          TransparentAlpha ? 1 : 0);
2463
0
        *q|=((pixel & 0x01) << 2);
2464
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2465
0
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2466
0
        *q|=((pixel & 0x01) << 1);
2467
0
        pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2468
0
          TransparentAlpha ? 1 : 0);
2469
0
        *q|=((pixel & 0x01) << 0);
2470
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2471
0
        q++;
2472
0
      }
2473
0
      if ((number_pixels % 4) != 0)
2474
0
        {
2475
0
          *q='\0';
2476
0
          for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
2477
0
          {
2478
0
            pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2479
0
            *q|=((pixel & 0x01) << (unsigned char) (bit+4));
2480
0
            pixel=(unsigned char) (GetPixelAlpha(image,p) == (Quantum)
2481
0
              TransparentAlpha ? 1 : 0);
2482
0
            *q|=((pixel & 0x01) << (unsigned char) (bit+4-1));
2483
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2484
0
          }
2485
0
          q++;
2486
0
        }
2487
0
      break;
2488
0
    }
2489
0
    case 4:
2490
0
    {
2491
0
      unsigned char
2492
0
        pixel;
2493
2494
0
      for (x=0; x < (ssize_t) number_pixels ; x++)
2495
0
      {
2496
0
        pixel=(unsigned char) ((ssize_t) GetPixelIndex(image,p));
2497
0
        *q=((pixel & 0xf) << 4);
2498
0
        pixel=(unsigned char) (16.0*QuantumScale*(double)
2499
0
          GetPixelAlpha(image,p)+0.5);
2500
0
        *q|=((pixel & 0xf) << 0);
2501
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2502
0
        q++;
2503
0
      }
2504
0
      break;
2505
0
    }
2506
651
    case 8:
2507
651
    {
2508
651
      unsigned char
2509
651
        pixel;
2510
2511
2.41k
      for (x=0; x < (ssize_t) number_pixels; x++)
2512
1.76k
      {
2513
1.76k
        q=PopCharPixel((unsigned char) ((ssize_t) GetPixelIndex(image,p)),q);
2514
1.76k
        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
2515
1.76k
        q=PopCharPixel(pixel,q);
2516
1.76k
        p+=(ptrdiff_t) GetPixelChannels(image);
2517
1.76k
        q+=(ptrdiff_t) quantum_info->pad;
2518
1.76k
      }
2519
651
      break;
2520
0
    }
2521
825
    case 16:
2522
825
    {
2523
825
      unsigned short
2524
825
        pixel;
2525
2526
825
      if (quantum_info->format == FloatingPointQuantumFormat)
2527
0
        {
2528
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2529
0
          {
2530
0
            q=PopShortPixel(quantum_info->endian,(unsigned short)
2531
0
              ((ssize_t) GetPixelIndex(image,p)),q);
2532
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
2533
0
              GetPixelAlpha(image,p));
2534
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
2535
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2536
0
            q+=(ptrdiff_t) quantum_info->pad;
2537
0
          }
2538
0
          break;
2539
0
        }
2540
4.88k
      for (x=0; x < (ssize_t) number_pixels; x++)
2541
4.06k
      {
2542
4.06k
        q=PopShortPixel(quantum_info->endian,(unsigned short)
2543
4.06k
          ((ssize_t) GetPixelIndex(image,p)),q);
2544
4.06k
        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
2545
4.06k
        q=PopShortPixel(quantum_info->endian,pixel,q);
2546
4.06k
        p+=(ptrdiff_t) GetPixelChannels(image);
2547
4.06k
        q+=(ptrdiff_t) quantum_info->pad;
2548
4.06k
      }
2549
825
      break;
2550
825
    }
2551
1.78k
    case 32:
2552
1.78k
    {
2553
1.78k
      unsigned int
2554
1.78k
        pixel;
2555
2556
1.78k
      if (quantum_info->format == FloatingPointQuantumFormat)
2557
0
        {
2558
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2559
0
          {
2560
0
            float
2561
0
              float_pixel;
2562
2563
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelIndex(image,p),q);
2564
0
            float_pixel=(float) GetPixelAlpha(image,p);
2565
0
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
2566
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2567
0
            q+=(ptrdiff_t) quantum_info->pad;
2568
0
          }
2569
0
          break;
2570
0
        }
2571
9.79k
      for (x=0; x < (ssize_t) number_pixels; x++)
2572
8.01k
      {
2573
8.01k
        q=PopLongPixel(quantum_info->endian,(unsigned int)
2574
8.01k
          GetPixelIndex(image,p),q);
2575
8.01k
        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
2576
8.01k
        q=PopLongPixel(quantum_info->endian,pixel,q);
2577
8.01k
        p+=(ptrdiff_t) GetPixelChannels(image);
2578
8.01k
        q+=(ptrdiff_t) quantum_info->pad;
2579
8.01k
      }
2580
1.78k
      break;
2581
1.78k
    }
2582
0
    case 64:
2583
0
    {
2584
0
      if (quantum_info->format == FloatingPointQuantumFormat)
2585
0
        {
2586
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2587
0
          {
2588
0
            double
2589
0
              pixel;
2590
2591
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelIndex(image,p),q);
2592
0
            pixel=(double) GetPixelAlpha(image,p);
2593
0
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
2594
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2595
0
            q+=(ptrdiff_t) quantum_info->pad;
2596
0
          }
2597
0
          break;
2598
0
        }
2599
0
      magick_fallthrough;
2600
0
    }
2601
0
    default:
2602
0
    {
2603
0
      QuantumAny
2604
0
        range;
2605
2606
0
      range=GetQuantumRange(quantum_info->depth);
2607
0
      for (x=0; x < (ssize_t) number_pixels; x++)
2608
0
      {
2609
0
        q=PopQuantumPixel(quantum_info,(QuantumAny) GetPixelIndex(image,p),q);
2610
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
2611
0
          range),q);
2612
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2613
0
        q+=(ptrdiff_t) quantum_info->pad;
2614
0
      }
2615
0
      break;
2616
0
    }
2617
3.26k
  }
2618
3.26k
}
2619
2620
static void ExportMultispectralQuantum(const Image *image,
2621
  QuantumInfo *quantum_info,const MagickSizeType number_pixels,
2622
  const Quantum *magick_restrict p,unsigned char *magick_restrict q,
2623
  ExceptionInfo *exception)
2624
578k
{
2625
578k
  ssize_t
2626
578k
    i,
2627
578k
    x;
2628
2629
578k
  if (image->number_meta_channels == 0)
2630
0
    {
2631
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2632
0
        "MultispectralImageRequired","`%s'",image->filename);
2633
0
      return;
2634
0
    }
2635
578k
  if (quantum_info->meta_channel != 0)
2636
554k
    {
2637
554k
      ExportPixelChannel(image,quantum_info,number_pixels,p,q,
2638
554k
        (PixelChannel) (MetaPixelChannels+quantum_info->meta_channel-1));
2639
554k
      return;
2640
554k
    }
2641
23.4k
  switch (quantum_info->depth)
2642
23.4k
  {
2643
7.53k
    case 8:
2644
7.53k
    {
2645
7.53k
      unsigned char
2646
7.53k
        pixel;
2647
2648
4.31M
      for (x=0; x < (ssize_t) number_pixels; x++)
2649
4.30M
      {
2650
30.0M
        for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2651
25.7M
        {
2652
25.7M
          pixel=ScaleQuantumToChar(p[i]);
2653
25.7M
          q=PopCharPixel(pixel,q);
2654
25.7M
        }
2655
4.30M
        p+=(ptrdiff_t) GetPixelChannels(image);
2656
4.30M
        q+=(ptrdiff_t) quantum_info->pad;
2657
4.30M
      }
2658
7.53k
      break;
2659
0
    }
2660
4.19k
    case 16:
2661
4.19k
    {
2662
4.19k
      unsigned short
2663
4.19k
        pixel;
2664
2665
4.19k
      if (quantum_info->format == FloatingPointQuantumFormat)
2666
1.39k
        {
2667
5.13k
          for (x=0; x < (ssize_t) number_pixels; x++)
2668
3.74k
          {
2669
23.7k
            for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2670
20.0k
            {
2671
20.0k
              pixel=SinglePrecisionToHalf(QuantumScale*(double) p[i]);
2672
20.0k
              q=PopShortPixel(quantum_info->endian,pixel,q);
2673
20.0k
            }
2674
3.74k
            p+=(ptrdiff_t) GetPixelChannels(image);
2675
3.74k
            q+=(ptrdiff_t) quantum_info->pad;
2676
3.74k
          }
2677
1.39k
          break;
2678
1.39k
        }
2679
130k
      for (x=0; x < (ssize_t) number_pixels; x++)
2680
128k
      {
2681
920k
        for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2682
792k
        {
2683
792k
          pixel=ScaleQuantumToShort(p[i]);
2684
792k
          q=PopShortPixel(quantum_info->endian,pixel,q);
2685
792k
        }
2686
128k
        p+=(ptrdiff_t) GetPixelChannels(image);
2687
128k
        q+=(ptrdiff_t) quantum_info->pad;
2688
128k
      }
2689
2.80k
      break;
2690
4.19k
    }
2691
9.76k
    case 32:
2692
9.76k
    {
2693
9.76k
      unsigned int
2694
9.76k
        pixel;
2695
2696
9.76k
      if (quantum_info->format == FloatingPointQuantumFormat)
2697
4.79k
        {
2698
29.6k
          for (x=0; x < (ssize_t) number_pixels; x++)
2699
24.8k
          {
2700
237k
            for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2701
212k
              q=PopQuantumFloatPixel(quantum_info,(float) p[i],q);
2702
24.8k
            p+=(ptrdiff_t) GetPixelChannels(image);
2703
24.8k
            q+=(ptrdiff_t) quantum_info->pad;
2704
24.8k
          }
2705
4.79k
          break;
2706
4.79k
        }
2707
1.20M
      for (x=0; x < (ssize_t) number_pixels; x++)
2708
1.20M
      {
2709
21.8M
        for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2710
20.6M
        {
2711
20.6M
          pixel=ScaleQuantumToLong(p[i]);
2712
20.6M
          q=PopLongPixel(quantum_info->endian,pixel,q);
2713
20.6M
        }
2714
1.20M
        p+=(ptrdiff_t) GetPixelChannels(image);
2715
1.20M
        q+=(ptrdiff_t) quantum_info->pad;
2716
1.20M
      }
2717
4.97k
      break;
2718
9.76k
    }
2719
240
    case 64:
2720
240
    {
2721
240
      if (quantum_info->format == FloatingPointQuantumFormat)
2722
164
        {
2723
868
          for (x=0; x < (ssize_t) number_pixels; x++)
2724
704
          {
2725
3.03k
            for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2726
2.32k
              q=PopQuantumDoublePixel(quantum_info,(double) p[i],q);
2727
704
            p+=(ptrdiff_t) GetPixelChannels(image);
2728
704
            q+=(ptrdiff_t) quantum_info->pad;
2729
704
          }
2730
164
          break;
2731
164
        }
2732
76
      magick_fallthrough;
2733
76
    }
2734
1.78k
    default:
2735
1.78k
    {
2736
1.78k
      QuantumAny
2737
1.78k
        range;
2738
2739
1.78k
      range=GetQuantumRange(quantum_info->depth);
2740
81.2k
      for (x=0; x < (ssize_t) number_pixels; x++)
2741
79.4k
      {
2742
392k
        for (i=0; i < (ssize_t) GetImageChannels(image); i++)
2743
313k
          q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(p[i],range),q);
2744
79.4k
        p+=(ptrdiff_t) GetPixelChannels(image);
2745
79.4k
        q+=(ptrdiff_t) quantum_info->pad;
2746
79.4k
      }
2747
1.78k
      break;
2748
76
    }
2749
23.4k
  }
2750
23.4k
}
2751
2752
static void ExportOpacityQuantum(const Image *image,QuantumInfo *quantum_info,
2753
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
2754
  unsigned char *magick_restrict q,ExceptionInfo *exception)
2755
0
{
2756
0
  QuantumAny
2757
0
    range;
2758
2759
0
  ssize_t
2760
0
    x;
2761
2762
0
  if (image->alpha_trait == UndefinedPixelTrait)
2763
0
    {
2764
0
      (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
2765
0
        "ImageDoesNotHaveAnAlphaChannel","`%s'",image->filename);
2766
0
      return;
2767
0
    }
2768
0
  switch (quantum_info->depth)
2769
0
  {
2770
0
    case 8:
2771
0
    {
2772
0
      unsigned char
2773
0
        pixel;
2774
2775
0
      for (x=0; x < (ssize_t) number_pixels; x++)
2776
0
      {
2777
0
        pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
2778
0
        q=PopCharPixel(pixel,q);
2779
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2780
0
        q+=(ptrdiff_t) quantum_info->pad;
2781
0
      }
2782
0
      break;
2783
0
    }
2784
0
    case 16:
2785
0
    {
2786
0
      unsigned short
2787
0
        pixel;
2788
2789
0
      if (quantum_info->format == FloatingPointQuantumFormat)
2790
0
        {
2791
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2792
0
          {
2793
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
2794
0
              GetPixelOpacity(image,p));
2795
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
2796
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2797
0
            q+=(ptrdiff_t) quantum_info->pad;
2798
0
          }
2799
0
          break;
2800
0
        }
2801
0
      for (x=0; x < (ssize_t) number_pixels; x++)
2802
0
      {
2803
0
        pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
2804
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
2805
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2806
0
        q+=(ptrdiff_t) quantum_info->pad;
2807
0
      }
2808
0
      break;
2809
0
    }
2810
0
    case 32:
2811
0
    {
2812
0
      unsigned int
2813
0
        pixel;
2814
2815
0
      if (quantum_info->format == FloatingPointQuantumFormat)
2816
0
        {
2817
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2818
0
          {
2819
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelOpacity(image,p),q);
2820
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2821
0
            q+=(ptrdiff_t) quantum_info->pad;
2822
0
          }
2823
0
          break;
2824
0
        }
2825
0
      for (x=0; x < (ssize_t) number_pixels; x++)
2826
0
      {
2827
0
        pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
2828
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
2829
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2830
0
        q+=(ptrdiff_t) quantum_info->pad;
2831
0
      }
2832
0
      break;
2833
0
    }
2834
0
    case 64:
2835
0
    {
2836
0
      if (quantum_info->format == FloatingPointQuantumFormat)
2837
0
        {
2838
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2839
0
          {
2840
0
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelOpacity(image,p),q);
2841
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2842
0
            q+=(ptrdiff_t) quantum_info->pad;
2843
0
          }
2844
0
          break;
2845
0
        }
2846
0
      magick_fallthrough;
2847
0
    }
2848
0
    default:
2849
0
    {
2850
0
      range=GetQuantumRange(quantum_info->depth);
2851
0
      for (x=0; x < (ssize_t) number_pixels; x++)
2852
0
      {
2853
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(
2854
0
          GetPixelOpacity(image,p),range),q);
2855
0
        p+=(ptrdiff_t) GetPixelChannels(image);
2856
0
        q+=(ptrdiff_t) quantum_info->pad;
2857
0
      }
2858
0
      break;
2859
0
    }
2860
0
  }
2861
0
}
2862
2863
static void ExportRGBQuantum(const Image *image,QuantumInfo *quantum_info,
2864
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
2865
  unsigned char *magick_restrict q)
2866
217k
{
2867
217k
  QuantumAny
2868
217k
    range;
2869
2870
217k
  ssize_t
2871
217k
    x;
2872
2873
217k
  ssize_t
2874
217k
    bit;
2875
2876
217k
  switch (quantum_info->depth)
2877
217k
  {
2878
70.1k
    case 8:
2879
70.1k
    {
2880
29.6M
      for (x=0; x < (ssize_t) number_pixels; x++)
2881
29.5M
      {
2882
29.5M
        q=PopCharPixel(ScaleQuantumToChar(GetPixelRed(image,p)),q);
2883
29.5M
        q=PopCharPixel(ScaleQuantumToChar(GetPixelGreen(image,p)),q);
2884
29.5M
        q=PopCharPixel(ScaleQuantumToChar(GetPixelBlue(image,p)),q);
2885
29.5M
        p+=(ptrdiff_t) GetPixelChannels(image);
2886
29.5M
        q+=(ptrdiff_t) quantum_info->pad;
2887
29.5M
      }
2888
70.1k
      break;
2889
0
    }
2890
1.95k
    case 10:
2891
1.95k
    {
2892
1.95k
      unsigned int
2893
1.95k
        pixel;
2894
2895
1.95k
      range=GetQuantumRange(quantum_info->depth);
2896
1.95k
      if (quantum_info->pack == MagickFalse)
2897
1.42k
        {
2898
22.3k
          for (x=0; x < (ssize_t) number_pixels; x++)
2899
20.9k
          {
2900
20.9k
            pixel=(unsigned int) (
2901
20.9k
              ScaleQuantumToAny(GetPixelRed(image,p),range) << 22 |
2902
20.9k
              ScaleQuantumToAny(GetPixelGreen(image,p),range) << 12 |
2903
20.9k
              ScaleQuantumToAny(GetPixelBlue(image,p),range) << 2);
2904
20.9k
            q=PopLongPixel(quantum_info->endian,pixel,q);
2905
20.9k
            p+=(ptrdiff_t) GetPixelChannels(image);
2906
20.9k
            q+=(ptrdiff_t) quantum_info->pad;
2907
20.9k
          }
2908
1.42k
          break;
2909
1.42k
        }
2910
531
      if (quantum_info->quantum == 32UL)
2911
0
        {
2912
0
          for (x=0; x < (ssize_t) number_pixels; x++)
2913
0
          {
2914
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2915
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
2916
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2917
0
              range);
2918
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
2919
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2920
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
2921
0
            p+=(ptrdiff_t) GetPixelChannels(image);
2922
0
            q+=(ptrdiff_t) quantum_info->pad;
2923
0
          }
2924
0
          break;
2925
0
        }
2926
2.52k
      for (x=0; x < (ssize_t) number_pixels; x++)
2927
1.99k
      {
2928
1.99k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
2929
1.99k
        q=PopQuantumPixel(quantum_info,pixel,q);
2930
1.99k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
2931
1.99k
        q=PopQuantumPixel(quantum_info,pixel,q);
2932
1.99k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
2933
1.99k
        q=PopQuantumPixel(quantum_info,pixel,q);
2934
1.99k
        p+=(ptrdiff_t) GetPixelChannels(image);
2935
1.99k
        q+=(ptrdiff_t) quantum_info->pad;
2936
1.99k
      }
2937
531
      break;
2938
531
    }
2939
8.75k
    case 12:
2940
8.75k
    {
2941
8.75k
      unsigned int
2942
8.75k
        pixel;
2943
2944
8.75k
      range=GetQuantumRange(quantum_info->depth);
2945
8.75k
      if (quantum_info->pack == MagickFalse)
2946
8.38k
        {
2947
39.6k
          for (x=0; x < (3*(ssize_t) number_pixels-1); x+=2)
2948
31.2k
          {
2949
31.2k
            switch (x % 3)
2950
31.2k
            {
2951
0
              default:
2952
15.3k
              case 0:
2953
15.3k
              {
2954
15.3k
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2955
15.3k
                  range);
2956
15.3k
                break;
2957
0
              }
2958
7.93k
              case 1:
2959
7.93k
              {
2960
7.93k
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2961
7.93k
                  range);
2962
7.93k
                break;
2963
0
              }
2964
7.93k
              case 2:
2965
7.93k
              {
2966
7.93k
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2967
7.93k
                  range);
2968
7.93k
                p+=(ptrdiff_t) GetPixelChannels(image);
2969
7.93k
                break;
2970
0
              }
2971
31.2k
            }
2972
31.2k
            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2973
31.2k
              q);
2974
31.2k
            switch ((x+1) % 3)
2975
31.2k
            {
2976
0
              default:
2977
7.93k
              case 0:
2978
7.93k
              {
2979
7.93k
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
2980
7.93k
                  range);
2981
7.93k
                break;
2982
0
              }
2983
15.3k
              case 1:
2984
15.3k
              {
2985
15.3k
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
2986
15.3k
                  range);
2987
15.3k
                break;
2988
0
              }
2989
7.93k
              case 2:
2990
7.93k
              {
2991
7.93k
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
2992
7.93k
                  range);
2993
7.93k
                p+=(ptrdiff_t) GetPixelChannels(image);
2994
7.93k
                break;
2995
0
              }
2996
31.2k
            }
2997
31.2k
            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
2998
31.2k
              q);
2999
31.2k
            q+=(ptrdiff_t) quantum_info->pad;
3000
31.2k
          }
3001
15.8k
          for (bit=0; bit < (ssize_t) (3*number_pixels % 2); bit++)
3002
7.46k
          {
3003
7.46k
            switch ((x+bit) % 3)
3004
7.46k
            {
3005
0
              default:
3006
0
              case 0:
3007
0
              {
3008
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),
3009
0
                  range);
3010
0
                break;
3011
0
              }
3012
0
              case 1:
3013
0
              {
3014
0
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3015
0
                  range);
3016
0
                break;
3017
0
              }
3018
7.46k
              case 2:
3019
7.46k
              {
3020
7.46k
                pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),
3021
7.46k
                  range);
3022
7.46k
                p+=(ptrdiff_t) GetPixelChannels(image);
3023
7.46k
                break;
3024
0
              }
3025
7.46k
            }
3026
7.46k
            q=PopShortPixel(quantum_info->endian,(unsigned short) (pixel << 4),
3027
7.46k
              q);
3028
7.46k
            q+=(ptrdiff_t) quantum_info->pad;
3029
7.46k
          }
3030
8.38k
          if (bit != 0)
3031
7.46k
            p+=(ptrdiff_t) GetPixelChannels(image);
3032
8.38k
          break;
3033
8.38k
        }
3034
374
      if (quantum_info->quantum == 32UL)
3035
0
        {
3036
0
          for (x=0; x < (ssize_t) number_pixels; x++)
3037
0
          {
3038
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3039
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3040
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3041
0
              range);
3042
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3043
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3044
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3045
0
            p+=(ptrdiff_t) GetPixelChannels(image);
3046
0
            q+=(ptrdiff_t) quantum_info->pad;
3047
0
          }
3048
0
          break;
3049
0
        }
3050
2.38k
      for (x=0; x < (ssize_t) number_pixels; x++)
3051
2.00k
      {
3052
2.00k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3053
2.00k
        q=PopQuantumPixel(quantum_info,pixel,q);
3054
2.00k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3055
2.00k
        q=PopQuantumPixel(quantum_info,pixel,q);
3056
2.00k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3057
2.00k
        q=PopQuantumPixel(quantum_info,pixel,q);
3058
2.00k
        p+=(ptrdiff_t) GetPixelChannels(image);
3059
2.00k
        q+=(ptrdiff_t) quantum_info->pad;
3060
2.00k
      }
3061
374
      break;
3062
374
    }
3063
105k
    case 16:
3064
105k
    {
3065
105k
      unsigned short
3066
105k
        pixel;
3067
3068
105k
      if (quantum_info->format == FloatingPointQuantumFormat)
3069
2.81k
        {
3070
17.0k
          for (x=0; x < (ssize_t) number_pixels; x++)
3071
14.2k
          {
3072
14.2k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3073
14.2k
              GetPixelRed(image,p));
3074
14.2k
            q=PopShortPixel(quantum_info->endian,pixel,q);
3075
14.2k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3076
14.2k
              GetPixelGreen(image,p));
3077
14.2k
            q=PopShortPixel(quantum_info->endian,pixel,q);
3078
14.2k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3079
14.2k
              GetPixelBlue(image,p));
3080
14.2k
            q=PopShortPixel(quantum_info->endian,pixel,q);
3081
14.2k
            p+=(ptrdiff_t) GetPixelChannels(image);
3082
14.2k
            q+=(ptrdiff_t) quantum_info->pad;
3083
14.2k
          }
3084
2.81k
          break;
3085
2.81k
        }
3086
127M
      for (x=0; x < (ssize_t) number_pixels; x++)
3087
127M
      {
3088
127M
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3089
127M
        q=PopShortPixel(quantum_info->endian,pixel,q);
3090
127M
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3091
127M
        q=PopShortPixel(quantum_info->endian,pixel,q);
3092
127M
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3093
127M
        q=PopShortPixel(quantum_info->endian,pixel,q);
3094
127M
        p+=(ptrdiff_t) GetPixelChannels(image);
3095
127M
        q+=(ptrdiff_t) quantum_info->pad;
3096
127M
      }
3097
102k
      break;
3098
105k
    }
3099
24.5k
    case 32:
3100
24.5k
    {
3101
24.5k
      unsigned int
3102
24.5k
        pixel;
3103
3104
24.5k
      if (quantum_info->format == FloatingPointQuantumFormat)
3105
3.23k
        {
3106
20.1k
          for (x=0; x < (ssize_t) number_pixels; x++)
3107
16.9k
          {
3108
16.9k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelRed(image,p),
3109
16.9k
              q);
3110
16.9k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelGreen(image,p),
3111
16.9k
              q);
3112
16.9k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlue(image,p),
3113
16.9k
              q);
3114
16.9k
            p+=(ptrdiff_t) GetPixelChannels(image);
3115
16.9k
            q+=(ptrdiff_t) quantum_info->pad;
3116
16.9k
          }
3117
3.23k
          break;
3118
3.23k
        }
3119
19.8M
      for (x=0; x < (ssize_t) number_pixels; x++)
3120
19.7M
      {
3121
19.7M
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3122
19.7M
        q=PopLongPixel(quantum_info->endian,pixel,q);
3123
19.7M
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3124
19.7M
        q=PopLongPixel(quantum_info->endian,pixel,q);
3125
19.7M
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3126
19.7M
        q=PopLongPixel(quantum_info->endian,pixel,q);
3127
19.7M
        p+=(ptrdiff_t) GetPixelChannels(image);
3128
19.7M
        q+=(ptrdiff_t) quantum_info->pad;
3129
19.7M
      }
3130
21.2k
      break;
3131
24.5k
    }
3132
1.30k
    case 64:
3133
1.30k
    {
3134
1.30k
      if (quantum_info->format == FloatingPointQuantumFormat)
3135
64
        {
3136
232
          for (x=0; x < (ssize_t) number_pixels; x++)
3137
168
          {
3138
168
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3139
168
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
3140
168
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
3141
168
            p+=(ptrdiff_t) GetPixelChannels(image);
3142
168
            q+=(ptrdiff_t) quantum_info->pad;
3143
168
          }
3144
64
          break;
3145
64
        }
3146
1.24k
      magick_fallthrough;
3147
1.24k
    }
3148
6.77k
    default:
3149
6.77k
    {
3150
6.77k
      range=GetQuantumRange(quantum_info->depth);
3151
263k
      for (x=0; x < (ssize_t) number_pixels; x++)
3152
256k
      {
3153
256k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3154
256k
          range),q);
3155
256k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3156
256k
          range),q);
3157
256k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3158
256k
          range),q);
3159
256k
        p+=(ptrdiff_t) GetPixelChannels(image);
3160
256k
        q+=(ptrdiff_t) quantum_info->pad;
3161
256k
      }
3162
6.77k
      break;
3163
1.24k
    }
3164
217k
  }
3165
217k
}
3166
3167
static void ExportRGBAQuantum(const Image *image,QuantumInfo *quantum_info,
3168
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
3169
  unsigned char *magick_restrict q)
3170
65.6k
{
3171
65.6k
  QuantumAny
3172
65.6k
    range;
3173
3174
65.6k
  ssize_t
3175
65.6k
    x;
3176
3177
65.6k
  switch (quantum_info->depth)
3178
65.6k
  {
3179
24.0k
    case 8:
3180
24.0k
    {
3181
24.0k
      unsigned char
3182
24.0k
        pixel;
3183
3184
14.5M
      for (x=0; x < (ssize_t) number_pixels; x++)
3185
14.4M
      {
3186
14.4M
        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
3187
14.4M
        q=PopCharPixel(pixel,q);
3188
14.4M
        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
3189
14.4M
        q=PopCharPixel(pixel,q);
3190
14.4M
        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
3191
14.4M
        q=PopCharPixel(pixel,q);
3192
14.4M
        pixel=ScaleQuantumToChar(GetPixelAlpha(image,p));
3193
14.4M
        q=PopCharPixel(pixel,q);
3194
14.4M
        p+=(ptrdiff_t) GetPixelChannels(image);
3195
14.4M
        q+=(ptrdiff_t) quantum_info->pad;
3196
14.4M
      }
3197
24.0k
      break;
3198
0
    }
3199
1.07k
    case 10:
3200
1.07k
    {
3201
1.07k
      unsigned int
3202
1.07k
        pixel;
3203
3204
1.07k
      range=GetQuantumRange(quantum_info->depth);
3205
1.07k
      if (quantum_info->pack == MagickFalse)
3206
422
        {
3207
422
          ssize_t
3208
422
            i;
3209
3210
422
          size_t
3211
422
            quantum;
3212
3213
422
          ssize_t
3214
422
            n;
3215
3216
422
          n=0;
3217
422
          quantum=0;
3218
422
          pixel=0;
3219
11.8k
          for (x=0; x < (ssize_t) number_pixels; x++)
3220
11.4k
          {
3221
57.1k
            for (i=0; i < 4; i++)
3222
45.6k
            {
3223
45.6k
              switch (i)
3224
45.6k
              {
3225
11.4k
                case 0: quantum=(size_t) GetPixelRed(image,p); break;
3226
11.4k
                case 1: quantum=(size_t) GetPixelGreen(image,p); break;
3227
11.4k
                case 2: quantum=(size_t) GetPixelBlue(image,p); break;
3228
11.4k
                case 3: quantum=(size_t) GetPixelAlpha(image,p); break;
3229
45.6k
              }
3230
45.6k
              switch (n % 3)
3231
45.6k
              {
3232
15.4k
                case 0:
3233
15.4k
                {
3234
15.4k
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3235
15.4k
                    range) << 22);
3236
15.4k
                  break;
3237
0
                }
3238
15.1k
                case 1:
3239
15.1k
                {
3240
15.1k
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3241
15.1k
                    range) << 12);
3242
15.1k
                  break;
3243
0
                }
3244
15.0k
                case 2:
3245
15.0k
                {
3246
15.0k
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3247
15.0k
                    range) << 2);
3248
15.0k
                  q=PopLongPixel(quantum_info->endian,pixel,q);
3249
15.0k
                  pixel=0;
3250
15.0k
                  break;
3251
0
                }
3252
45.6k
              }
3253
45.6k
              n++;
3254
45.6k
            }
3255
11.4k
            p+=(ptrdiff_t) GetPixelChannels(image);
3256
11.4k
            q+=(ptrdiff_t) quantum_info->pad;
3257
11.4k
          }
3258
422
          break;
3259
422
        }
3260
652
      if (quantum_info->quantum == 32UL)
3261
0
        {
3262
0
          for (x=0; x < (ssize_t) number_pixels; x++)
3263
0
          {
3264
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3265
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3266
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3267
0
              range);
3268
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3269
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3270
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3271
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),
3272
0
              range);
3273
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3274
0
            p+=(ptrdiff_t) GetPixelChannels(image);
3275
0
            q+=(ptrdiff_t) quantum_info->pad;
3276
0
          }
3277
0
          break;
3278
0
        }
3279
7.28k
      for (x=0; x < (ssize_t) number_pixels; x++)
3280
6.63k
      {
3281
6.63k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3282
6.63k
        q=PopQuantumPixel(quantum_info,pixel,q);
3283
6.63k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3284
6.63k
        q=PopQuantumPixel(quantum_info,pixel,q);
3285
6.63k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3286
6.63k
        q=PopQuantumPixel(quantum_info,pixel,q);
3287
6.63k
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelAlpha(image,p),range);
3288
6.63k
        q=PopQuantumPixel(quantum_info,pixel,q);
3289
6.63k
        p+=(ptrdiff_t) GetPixelChannels(image);
3290
6.63k
        q+=(ptrdiff_t) quantum_info->pad;
3291
6.63k
      }
3292
652
      break;
3293
652
    }
3294
29.6k
    case 16:
3295
29.6k
    {
3296
29.6k
      unsigned short
3297
29.6k
        pixel;
3298
3299
29.6k
      if (quantum_info->format == FloatingPointQuantumFormat)
3300
5.86k
        {
3301
23.2k
          for (x=0; x < (ssize_t) number_pixels; x++)
3302
17.4k
          {
3303
17.4k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3304
17.4k
              GetPixelRed(image,p));
3305
17.4k
            q=PopShortPixel(quantum_info->endian,pixel,q);
3306
17.4k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3307
17.4k
              GetPixelGreen(image,p));
3308
17.4k
            q=PopShortPixel(quantum_info->endian,pixel,q);
3309
17.4k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3310
17.4k
              GetPixelBlue(image,p));
3311
17.4k
            q=PopShortPixel(quantum_info->endian,pixel,q);
3312
17.4k
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3313
17.4k
              GetPixelAlpha(image,p));
3314
17.4k
            q=PopShortPixel(quantum_info->endian,pixel,q);
3315
17.4k
            p+=(ptrdiff_t) GetPixelChannels(image);
3316
17.4k
            q+=(ptrdiff_t) quantum_info->pad;
3317
17.4k
          }
3318
5.86k
          break;
3319
5.86k
        }
3320
6.41M
      for (x=0; x < (ssize_t) number_pixels; x++)
3321
6.38M
      {
3322
6.38M
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3323
6.38M
        q=PopShortPixel(quantum_info->endian,pixel,q);
3324
6.38M
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3325
6.38M
        q=PopShortPixel(quantum_info->endian,pixel,q);
3326
6.38M
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3327
6.38M
        q=PopShortPixel(quantum_info->endian,pixel,q);
3328
6.38M
        pixel=ScaleQuantumToShort(GetPixelAlpha(image,p));
3329
6.38M
        q=PopShortPixel(quantum_info->endian,pixel,q);
3330
6.38M
        p+=(ptrdiff_t) GetPixelChannels(image);
3331
6.38M
        q+=(ptrdiff_t) quantum_info->pad;
3332
6.38M
      }
3333
23.8k
      break;
3334
29.6k
    }
3335
8.96k
    case 32:
3336
8.96k
    {
3337
8.96k
      unsigned int
3338
8.96k
        pixel;
3339
3340
8.96k
      if (quantum_info->format == FloatingPointQuantumFormat)
3341
2.63k
        {
3342
14.2k
          for (x=0; x < (ssize_t) number_pixels; x++)
3343
11.5k
          {
3344
11.5k
            float
3345
11.5k
              float_pixel;
3346
3347
11.5k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelRed(image,p),q);
3348
11.5k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelGreen(image,p),q);
3349
11.5k
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlue(image,p),q);
3350
11.5k
            float_pixel=(float) GetPixelAlpha(image,p);
3351
11.5k
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
3352
11.5k
            p+=(ptrdiff_t) GetPixelChannels(image);
3353
11.5k
            q+=(ptrdiff_t) quantum_info->pad;
3354
11.5k
          }
3355
2.63k
          break;
3356
2.63k
        }
3357
34.8k
      for (x=0; x < (ssize_t) number_pixels; x++)
3358
28.5k
      {
3359
28.5k
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3360
28.5k
        q=PopLongPixel(quantum_info->endian,pixel,q);
3361
28.5k
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3362
28.5k
        q=PopLongPixel(quantum_info->endian,pixel,q);
3363
28.5k
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3364
28.5k
        q=PopLongPixel(quantum_info->endian,pixel,q);
3365
28.5k
        pixel=ScaleQuantumToLong(GetPixelAlpha(image,p));
3366
28.5k
        q=PopLongPixel(quantum_info->endian,pixel,q);
3367
28.5k
        p+=(ptrdiff_t) GetPixelChannels(image);
3368
28.5k
        q+=(ptrdiff_t) quantum_info->pad;
3369
28.5k
      }
3370
6.33k
      break;
3371
8.96k
    }
3372
92
    case 64:
3373
92
    {
3374
92
      if (quantum_info->format == FloatingPointQuantumFormat)
3375
92
        {
3376
92
          double
3377
92
            pixel;
3378
3379
370
          for (x=0; x < (ssize_t) number_pixels; x++)
3380
278
          {
3381
278
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelRed(image,p),q);
3382
278
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelGreen(image,p),q);
3383
278
            q=PopQuantumDoublePixel(quantum_info,(double) GetPixelBlue(image,p),q);
3384
278
            pixel=(double) GetPixelAlpha(image,p);
3385
278
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
3386
278
            p+=(ptrdiff_t) GetPixelChannels(image);
3387
278
            q+=(ptrdiff_t) quantum_info->pad;
3388
278
          }
3389
92
          break;
3390
92
        }
3391
0
      magick_fallthrough;
3392
0
    }
3393
1.76k
    default:
3394
1.76k
    {
3395
1.76k
      range=GetQuantumRange(quantum_info->depth);
3396
24.9k
      for (x=0; x < (ssize_t) number_pixels; x++)
3397
23.1k
      {
3398
23.1k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3399
23.1k
          range),q);
3400
23.1k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3401
23.1k
          range),q);
3402
23.1k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3403
23.1k
          range),q);
3404
23.1k
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelAlpha(image,p),
3405
23.1k
          range),q);
3406
23.1k
        p+=(ptrdiff_t) GetPixelChannels(image);
3407
23.1k
        q+=(ptrdiff_t) quantum_info->pad;
3408
23.1k
      }
3409
1.76k
      break;
3410
0
    }
3411
65.6k
  }
3412
65.6k
}
3413
3414
static void ExportRGBOQuantum(const Image *image,QuantumInfo *quantum_info,
3415
  const MagickSizeType number_pixels,const Quantum *magick_restrict p,
3416
  unsigned char *magick_restrict q)
3417
0
{
3418
0
  QuantumAny
3419
0
    range;
3420
3421
0
  ssize_t
3422
0
    x;
3423
3424
0
  switch (quantum_info->depth)
3425
0
  {
3426
0
    case 8:
3427
0
    {
3428
0
      unsigned char
3429
0
        pixel;
3430
3431
0
      for (x=0; x < (ssize_t) number_pixels; x++)
3432
0
      {
3433
0
        pixel=ScaleQuantumToChar(GetPixelRed(image,p));
3434
0
        q=PopCharPixel(pixel,q);
3435
0
        pixel=ScaleQuantumToChar(GetPixelGreen(image,p));
3436
0
        q=PopCharPixel(pixel,q);
3437
0
        pixel=ScaleQuantumToChar(GetPixelBlue(image,p));
3438
0
        q=PopCharPixel(pixel,q);
3439
0
        pixel=ScaleQuantumToChar(GetPixelOpacity(image,p));
3440
0
        q=PopCharPixel(pixel,q);
3441
0
        p+=(ptrdiff_t) GetPixelChannels(image);
3442
0
        q+=(ptrdiff_t) quantum_info->pad;
3443
0
      }
3444
0
      break;
3445
0
    }
3446
0
    case 10:
3447
0
    {
3448
0
      unsigned int
3449
0
        pixel;
3450
3451
0
      range=GetQuantumRange(quantum_info->depth);
3452
0
      if (quantum_info->pack == MagickFalse)
3453
0
        {
3454
0
          ssize_t
3455
0
            i;
3456
3457
0
          size_t
3458
0
            quantum;
3459
3460
0
          ssize_t
3461
0
            n;
3462
3463
0
          n=0;
3464
0
          quantum=0;
3465
0
          pixel=0;
3466
0
          for (x=0; x < (ssize_t) number_pixels; x++)
3467
0
          {
3468
0
            for (i=0; i < 4; i++)
3469
0
            {
3470
0
              switch (i)
3471
0
              {
3472
0
                case 0: quantum=(size_t) GetPixelRed(image,p); break;
3473
0
                case 1: quantum=(size_t) GetPixelGreen(image,p); break;
3474
0
                case 2: quantum=(size_t) GetPixelBlue(image,p); break;
3475
0
                case 3: quantum=(size_t) GetPixelOpacity(image,p); break;
3476
0
              }
3477
0
              switch (n % 3)
3478
0
              {
3479
0
                case 0:
3480
0
                {
3481
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3482
0
                    range) << 22);
3483
0
                  break;
3484
0
                }
3485
0
                case 1:
3486
0
                {
3487
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3488
0
                    range) << 12);
3489
0
                  break;
3490
0
                }
3491
0
                case 2:
3492
0
                {
3493
0
                  pixel|=(size_t) (ScaleQuantumToAny((Quantum) quantum,
3494
0
                    range) << 2);
3495
0
                  q=PopLongPixel(quantum_info->endian,pixel,q);
3496
0
                  pixel=0;
3497
0
                  break;
3498
0
                }
3499
0
              }
3500
0
              n++;
3501
0
            }
3502
0
            p+=(ptrdiff_t) GetPixelChannels(image);
3503
0
            q+=(ptrdiff_t) quantum_info->pad;
3504
0
          }
3505
0
          break;
3506
0
        }
3507
0
      if (quantum_info->quantum == 32UL)
3508
0
        {
3509
0
          for (x=0; x < (ssize_t) number_pixels; x++)
3510
0
          {
3511
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3512
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3513
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),
3514
0
              range);
3515
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3516
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3517
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3518
0
            pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),
3519
0
              range);
3520
0
            q=PopQuantumLongPixel(quantum_info,pixel,q);
3521
0
            p+=(ptrdiff_t) GetPixelChannels(image);
3522
0
            q+=(ptrdiff_t) quantum_info->pad;
3523
0
          }
3524
0
          break;
3525
0
        }
3526
0
      for (x=0; x < (ssize_t) number_pixels; x++)
3527
0
      {
3528
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelRed(image,p),range);
3529
0
        q=PopQuantumPixel(quantum_info,pixel,q);
3530
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelGreen(image,p),range);
3531
0
        q=PopQuantumPixel(quantum_info,pixel,q);
3532
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelBlue(image,p),range);
3533
0
        q=PopQuantumPixel(quantum_info,pixel,q);
3534
0
        pixel=(unsigned int) ScaleQuantumToAny(GetPixelOpacity(image,p),range);
3535
0
        q=PopQuantumPixel(quantum_info,pixel,q);
3536
0
        p+=(ptrdiff_t) GetPixelChannels(image);
3537
0
        q+=(ptrdiff_t) quantum_info->pad;
3538
0
      }
3539
0
      break;
3540
0
    }
3541
0
    case 16:
3542
0
    {
3543
0
      unsigned short
3544
0
        pixel;
3545
3546
0
      if (quantum_info->format == FloatingPointQuantumFormat)
3547
0
        {
3548
0
          for (x=0; x < (ssize_t) number_pixels; x++)
3549
0
          {
3550
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3551
0
              GetPixelRed(image,p));
3552
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
3553
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3554
0
              GetPixelGreen(image,p));
3555
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
3556
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3557
0
              GetPixelBlue(image,p));
3558
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
3559
0
            pixel=SinglePrecisionToHalf(QuantumScale*(double)
3560
0
              GetPixelOpacity(image,p));
3561
0
            q=PopShortPixel(quantum_info->endian,pixel,q);
3562
0
            p+=(ptrdiff_t) GetPixelChannels(image);
3563
0
            q+=(ptrdiff_t) quantum_info->pad;
3564
0
          }
3565
0
          break;
3566
0
        }
3567
0
      for (x=0; x < (ssize_t) number_pixels; x++)
3568
0
      {
3569
0
        pixel=ScaleQuantumToShort(GetPixelRed(image,p));
3570
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
3571
0
        pixel=ScaleQuantumToShort(GetPixelGreen(image,p));
3572
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
3573
0
        pixel=ScaleQuantumToShort(GetPixelBlue(image,p));
3574
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
3575
0
        pixel=ScaleQuantumToShort(GetPixelOpacity(image,p));
3576
0
        q=PopShortPixel(quantum_info->endian,pixel,q);
3577
0
        p+=(ptrdiff_t) GetPixelChannels(image);
3578
0
        q+=(ptrdiff_t) quantum_info->pad;
3579
0
      }
3580
0
      break;
3581
0
    }
3582
0
    case 32:
3583
0
    {
3584
0
      unsigned int
3585
0
        pixel;
3586
3587
0
      if (quantum_info->format == FloatingPointQuantumFormat)
3588
0
        {
3589
0
          for (x=0; x < (ssize_t) number_pixels; x++)
3590
0
          {
3591
0
            float
3592
0
              float_pixel;
3593
3594
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelRed(image,p),
3595
0
              q);
3596
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelGreen(image,p),
3597
0
              q);
3598
0
            q=PopQuantumFloatPixel(quantum_info,(float) GetPixelBlue(image,p),
3599
0
              q);
3600
0
            float_pixel=(float) GetPixelOpacity(image,p);
3601
0
            q=PopQuantumFloatPixel(quantum_info,float_pixel,q);
3602
0
            p+=(ptrdiff_t) GetPixelChannels(image);
3603
0
            q+=(ptrdiff_t) quantum_info->pad;
3604
0
          }
3605
0
          break;
3606
0
        }
3607
0
      for (x=0; x < (ssize_t) number_pixels; x++)
3608
0
      {
3609
0
        pixel=ScaleQuantumToLong(GetPixelRed(image,p));
3610
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
3611
0
        pixel=ScaleQuantumToLong(GetPixelGreen(image,p));
3612
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
3613
0
        pixel=ScaleQuantumToLong(GetPixelBlue(image,p));
3614
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
3615
0
        pixel=ScaleQuantumToLong(GetPixelOpacity(image,p));
3616
0
        q=PopLongPixel(quantum_info->endian,pixel,q);
3617
0
        p+=(ptrdiff_t) GetPixelChannels(image);
3618
0
        q+=(ptrdiff_t) quantum_info->pad;
3619
0
      }
3620
0
      break;
3621
0
    }
3622
0
    case 64:
3623
0
    {
3624
0
      if (quantum_info->format == FloatingPointQuantumFormat)
3625
0
        {
3626
0
          double
3627
0
            pixel;
3628
3629
0
          for (x=0; x < (ssize_t) number_pixels; x++)
3630
0
          {
3631
0
            q=PopQuantumDoublePixel(quantum_info,(double)
3632
0
              GetPixelRed(image,p),q);
3633
0
            q=PopQuantumDoublePixel(quantum_info,(double)
3634
0
              GetPixelGreen(image,p),q);
3635
0
            q=PopQuantumDoublePixel(quantum_info,(double)
3636
0
              GetPixelBlue(image,p),q);
3637
0
            pixel=(double) GetPixelOpacity(image,p);
3638
0
            q=PopQuantumDoublePixel(quantum_info,pixel,q);
3639
0
            p+=(ptrdiff_t) GetPixelChannels(image);
3640
0
            q+=(ptrdiff_t) quantum_info->pad;
3641
0
          }
3642
0
          break;
3643
0
        }
3644
0
      magick_fallthrough;
3645
0
    }
3646
0
    default:
3647
0
    {
3648
0
      range=GetQuantumRange(quantum_info->depth);
3649
0
      for (x=0; x < (ssize_t) number_pixels; x++)
3650
0
      {
3651
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelRed(image,p),
3652
0
          range),q);
3653
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelGreen(image,p),
3654
0
          range),q);
3655
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelBlue(image,p),
3656
0
          range),q);
3657
0
        q=PopQuantumPixel(quantum_info,ScaleQuantumToAny(GetPixelOpacity(image,p),
3658
0
          range),q);
3659
0
        p+=(ptrdiff_t) GetPixelChannels(image);
3660
0
        q+=(ptrdiff_t) quantum_info->pad;
3661
0
      }
3662
0
      break;
3663
0
    }
3664
0
  }
3665
0
}
3666
3667
MagickExport size_t ExportQuantumPixels(const Image *image,
3668
  CacheView *image_view,QuantumInfo *quantum_info,
3669
  const QuantumType quantum_type,unsigned char *magick_restrict pixels,
3670
  ExceptionInfo *exception)
3671
2.52M
{
3672
2.52M
  const Quantum
3673
2.52M
    *magick_restrict p;
3674
3675
2.52M
  MagickSizeType
3676
2.52M
    number_pixels;
3677
3678
2.52M
  size_t
3679
2.52M
    extent;
3680
3681
2.52M
  ssize_t
3682
2.52M
    x;
3683
3684
2.52M
  unsigned char
3685
2.52M
    *magick_restrict q;
3686
3687
2.52M
  assert(image != (Image *) NULL);
3688
2.52M
  assert(image->signature == MagickCoreSignature);
3689
2.52M
  assert(quantum_info != (QuantumInfo *) NULL);
3690
2.52M
  assert(quantum_info->signature == MagickCoreSignature);
3691
2.52M
  assert(exception != (ExceptionInfo *) NULL);
3692
2.52M
  assert(exception->signature == MagickCoreSignature);
3693
2.52M
  if (IsEventLogging() != MagickFalse)
3694
0
    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
3695
2.52M
  if (pixels == (unsigned char *) NULL)
3696
0
    pixels=(unsigned char *) GetQuantumPixels(quantum_info);
3697
2.52M
  if (image_view == (CacheView *) NULL)
3698
2.52M
    {
3699
2.52M
      number_pixels=GetImageExtent(image);
3700
2.52M
      p=GetVirtualPixelQueue(image);
3701
2.52M
    }
3702
0
  else
3703
0
    {
3704
0
      number_pixels=GetCacheViewExtent(image_view);
3705
0
      p=GetCacheViewVirtualPixelQueue(image_view);
3706
0
    }
3707
2.52M
  if (p == (Quantum *) NULL)
3708
0
    return(0);
3709
2.52M
  if (quantum_info->alpha_type == AssociatedQuantumAlpha)
3710
0
    {
3711
0
      double
3712
0
        Sa;
3713
3714
0
      Quantum
3715
0
        *magick_restrict r;
3716
3717
      /*
3718
        Associate alpha.
3719
      */
3720
0
      if (image_view == (CacheView *) NULL)
3721
0
        r=GetAuthenticPixelQueue(image);
3722
0
      else
3723
0
        r=GetCacheViewAuthenticPixelQueue(image_view);
3724
0
      for (x=0; x < (ssize_t) image->columns; x++)
3725
0
      {
3726
0
        ssize_t
3727
0
          i;
3728
3729
0
        Sa=QuantumScale*(double) GetPixelAlpha(image,r);
3730
0
        for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
3731
0
        {
3732
0
          PixelChannel channel = GetPixelChannelChannel(image,i);
3733
0
          PixelTrait traits = GetPixelChannelTraits(image,channel);
3734
0
          if ((traits & UpdatePixelTrait) == 0)
3735
0
            continue;
3736
0
          r[i]=ClampToQuantum(Sa*(double) r[i]);
3737
0
        }
3738
0
        r+=(ptrdiff_t) GetPixelChannels(image);
3739
0
      }
3740
0
    }
3741
2.52M
  if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3742
2.24k
    {
3743
2.24k
      Quantum
3744
2.24k
        quantum;
3745
3746
2.24k
      Quantum
3747
2.24k
        *magick_restrict r;
3748
3749
2.24k
      if (image_view == (CacheView *) NULL)
3750
2.24k
        r=GetAuthenticPixelQueue(image);
3751
0
      else
3752
0
        r=GetCacheViewAuthenticPixelQueue(image_view);
3753
30.1k
      for (x=0; x < (ssize_t) number_pixels; x++)
3754
27.9k
      {
3755
27.9k
        quantum=GetPixelRed(image,r);
3756
27.9k
        SetPixelRed(image,GetPixelGreen(image,r),r);
3757
27.9k
        SetPixelGreen(image,quantum,r);
3758
27.9k
        r+=(ptrdiff_t) GetPixelChannels(image);
3759
27.9k
      }
3760
2.24k
    }
3761
2.52M
  q=pixels;
3762
2.52M
  ResetQuantumState(quantum_info);
3763
2.52M
  extent=GetQuantumExtent(image,quantum_info,quantum_type);
3764
2.52M
  switch (quantum_type)
3765
2.52M
  {
3766
377k
    case AlphaQuantum:
3767
377k
    {
3768
377k
      ExportAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3769
377k
      break;
3770
0
    }
3771
0
    case BGRQuantum:
3772
0
    {
3773
0
      ExportBGRQuantum(image,quantum_info,number_pixels,p,q);
3774
0
      break;
3775
0
    }
3776
0
    case BGRAQuantum:
3777
0
    {
3778
0
      ExportBGRAQuantum(image,quantum_info,number_pixels,p,q);
3779
0
      break;
3780
0
    }
3781
0
    case BGROQuantum:
3782
0
    {
3783
0
      ExportBGROQuantum(image,quantum_info,number_pixels,p,q);
3784
0
      break;
3785
0
    }
3786
1.28k
    case BlackQuantum:
3787
1.28k
    {
3788
1.28k
      ExportBlackQuantum(image,quantum_info,number_pixels,p,q,exception);
3789
1.28k
      break;
3790
0
    }
3791
62.0k
    case BlueQuantum:
3792
62.0k
    case YellowQuantum:
3793
62.0k
    {
3794
62.0k
      ExportPixelChannel(image,quantum_info,number_pixels,p,q,BluePixelChannel);
3795
62.0k
      break;
3796
62.0k
    }
3797
24.1k
    case CMYKQuantum:
3798
24.1k
    {
3799
24.1k
      ExportCMYKQuantum(image,quantum_info,number_pixels,p,q,exception);
3800
24.1k
      break;
3801
62.0k
    }
3802
34.9k
    case CMYKAQuantum:
3803
34.9k
    {
3804
34.9k
      ExportCMYKAQuantum(image,quantum_info,number_pixels,p,q,exception);
3805
34.9k
      break;
3806
62.0k
    }
3807
578k
    case MultispectralQuantum:
3808
578k
    {
3809
578k
      ExportMultispectralQuantum(image,quantum_info,number_pixels,p,q,exception);
3810
578k
      break;
3811
62.0k
    }
3812
0
    case CMYKOQuantum:
3813
0
    {
3814
0
      ExportCMYKOQuantum(image,quantum_info,number_pixels,p,q,exception);
3815
0
      break;
3816
62.0k
    }
3817
0
    case CbYCrYQuantum:
3818
0
    {
3819
0
      ExportCbYCrYQuantum(image,quantum_info,number_pixels,p,q);
3820
0
      break;
3821
62.0k
    }
3822
927k
    case GrayQuantum:
3823
927k
    {
3824
927k
      ExportGrayQuantum(image,quantum_info,number_pixels,p,q);
3825
927k
      break;
3826
62.0k
    }
3827
26.8k
    case GrayAlphaQuantum:
3828
26.8k
    {
3829
26.8k
      ExportGrayAlphaQuantum(image,quantum_info,number_pixels,p,q);
3830
26.8k
      break;
3831
62.0k
    }
3832
62.0k
    case GreenQuantum:
3833
62.0k
    case MagentaQuantum:
3834
62.0k
    {
3835
62.0k
      ExportPixelChannel(image,quantum_info,number_pixels,p,q,
3836
62.0k
        GreenPixelChannel);
3837
62.0k
      break;
3838
62.0k
    }
3839
84.7k
    case IndexQuantum:
3840
84.7k
    {
3841
84.7k
      ExportIndexQuantum(image,quantum_info,number_pixels,p,q,exception);
3842
84.7k
      break;
3843
62.0k
    }
3844
3.26k
    case IndexAlphaQuantum:
3845
3.26k
    {
3846
3.26k
      ExportIndexAlphaQuantum(image,quantum_info,number_pixels,p,q,exception);
3847
3.26k
      break;
3848
62.0k
    }
3849
62.4k
    case RedQuantum:
3850
62.4k
    case CyanQuantum:
3851
62.4k
    {
3852
62.4k
      ExportPixelChannel(image,quantum_info,number_pixels,p,q,RedPixelChannel);
3853
62.4k
      break;
3854
62.4k
    }
3855
0
    case OpacityQuantum:
3856
0
    {
3857
0
      ExportOpacityQuantum(image,quantum_info,number_pixels,p,q,exception);
3858
0
      break;
3859
62.4k
    }
3860
216k
    case RGBQuantum:
3861
217k
    case CbYCrQuantum:
3862
217k
    {
3863
217k
      ExportRGBQuantum(image,quantum_info,number_pixels,p,q);
3864
217k
      break;
3865
216k
    }
3866
64.9k
    case RGBAQuantum:
3867
65.6k
    case CbYCrAQuantum:
3868
65.6k
    {
3869
65.6k
      ExportRGBAQuantum(image,quantum_info,number_pixels,p,q);
3870
65.6k
      break;
3871
64.9k
    }
3872
0
    case RGBOQuantum:
3873
0
    {
3874
0
      ExportRGBOQuantum(image,quantum_info,number_pixels,p,q);
3875
0
      break;
3876
64.9k
    }
3877
0
    default:
3878
0
      break;
3879
2.52M
  }
3880
2.52M
  if ((quantum_type == CbYCrQuantum) || (quantum_type == CbYCrAQuantum))
3881
2.24k
    {
3882
2.24k
      Quantum
3883
2.24k
        quantum;
3884
3885
2.24k
      Quantum
3886
2.24k
        *magick_restrict r;
3887
3888
2.24k
      if (image_view == (CacheView *) NULL)
3889
2.24k
        r=GetAuthenticPixelQueue(image);
3890
0
      else
3891
0
        r=GetCacheViewAuthenticPixelQueue(image_view);
3892
30.1k
      for (x=0; x < (ssize_t) number_pixels; x++)
3893
27.9k
      {
3894
27.9k
        quantum=GetPixelRed(image,r);
3895
27.9k
        SetPixelRed(image,GetPixelGreen(image,r),r);
3896
27.9k
        SetPixelGreen(image,quantum,r);
3897
27.9k
        r+=(ptrdiff_t) GetPixelChannels(image);
3898
27.9k
      }
3899
2.24k
    }
3900
2.52M
  return(extent);
3901
2.52M
}