43#include "MagickCore/studio.h"
44#include "MagickCore/blob.h"
45#include "MagickCore/blob-private.h"
46#include "MagickCore/cache.h"
47#include "MagickCore/cache-private.h"
48#include "MagickCore/color-private.h"
49#include "MagickCore/composite-private.h"
50#include "MagickCore/constitute.h"
51#include "MagickCore/exception.h"
52#include "MagickCore/exception-private.h"
53#include "MagickCore/geometry.h"
54#include "MagickCore/memory_.h"
55#include "MagickCore/memory-private.h"
56#include "MagickCore/pixel.h"
57#include "MagickCore/pixel-accessor.h"
58#include "MagickCore/pixel-private.h"
59#include "MagickCore/policy.h"
60#include "MagickCore/quantum.h"
61#include "MagickCore/quantum-private.h"
62#include "MagickCore/semaphore.h"
63#include "MagickCore/stream.h"
64#include "MagickCore/stream-private.h"
65#include "MagickCore/string_.h"
112#if defined(__cplusplus) || defined(c_plusplus)
117 *GetVirtualPixelStream(
const Image *,
const VirtualPixelMethod,
const ssize_t,
118 const ssize_t,
const size_t,
const size_t,ExceptionInfo *);
120static MagickBooleanType
121 StreamImagePixels(
const StreamInfo *,
const Image *,ExceptionInfo *),
122 SyncAuthenticPixelsStream(Image *,ExceptionInfo *);
125 *QueueAuthenticPixelsStream(Image *,
const ssize_t,
const ssize_t,
const size_t,
126 const size_t,ExceptionInfo *);
128#if defined(__cplusplus) || defined(c_plusplus)
157MagickExport StreamInfo *AcquireStreamInfo(
const ImageInfo *image_info,
158 ExceptionInfo *exception)
163 stream_info=(StreamInfo *) AcquireCriticalMemory(
sizeof(*stream_info));
164 (void) memset(stream_info,0,
sizeof(*stream_info));
165 stream_info->pixels=(
unsigned char *) MagickAssumeAligned(
166 AcquireAlignedMemory(1,
sizeof(*stream_info->pixels)));
167 if (stream_info->pixels == (
unsigned char *) NULL)
168 ThrowFatalException(ResourceLimitFatalError,
"MemoryAllocationFailed");
169 stream_info->map=ConstantString(
"RGB");
170 stream_info->storage_type=CharPixel;
171 stream_info->stream=AcquireImage(image_info,exception);
172 stream_info->signature=MagickCoreSignature;
199static inline void RelinquishStreamPixels(CacheInfo *cache_info)
201 assert(cache_info != (CacheInfo *) NULL);
202 if (cache_info->pixels != (Quantum *) NULL)
204 if (cache_info->mapped == MagickFalse)
205 cache_info->pixels=(Quantum *) RelinquishAlignedMemory(
209 (void) UnmapBlob(cache_info->pixels,(
size_t) cache_info->length);
210 cache_info->pixels=(Quantum *) NULL;
213 cache_info->mapped=MagickFalse;
214 cache_info->metacontent=(
void *) NULL;
215 cache_info->length=0;
218static void DestroyPixelStream(Image *image)
226 assert(image != (Image *) NULL);
227 assert(image->signature == MagickCoreSignature);
228 if (IsEventLogging() != MagickFalse)
229 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
230 cache_info=(CacheInfo *) image->cache;
231 assert(cache_info->signature == MagickCoreSignature);
233 LockSemaphoreInfo(cache_info->semaphore);
234 cache_info->reference_count--;
235 if (cache_info->reference_count == 0)
237 UnlockSemaphoreInfo(cache_info->semaphore);
238 if (destroy == MagickFalse)
240 RelinquishStreamPixels(cache_info);
241 if (cache_info->nexus_info != (NexusInfo **) NULL)
242 cache_info->nexus_info=DestroyPixelCacheNexus(cache_info->nexus_info,
243 cache_info->number_threads);
245 RelinquishSemaphoreInfo(&cache_info->file_semaphore);
247 RelinquishSemaphoreInfo(&cache_info->semaphore);
248 cache_info=(CacheInfo *) RelinquishAlignedMemory(cache_info);
274MagickExport StreamInfo *DestroyStreamInfo(StreamInfo *stream_info)
276 assert(stream_info != (StreamInfo *) NULL);
277 assert(stream_info->signature == MagickCoreSignature);
278 if (IsEventLogging() != MagickFalse)
279 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"...");
280 if (stream_info->map != (
char *) NULL)
281 stream_info->map=DestroyString(stream_info->map);
282 if (stream_info->pixels != (
unsigned char *) NULL)
283 stream_info->pixels=(
unsigned char *) RelinquishAlignedMemory(
284 stream_info->pixels);
285 if (stream_info->stream != (Image *) NULL)
287 (void) CloseBlob(stream_info->stream);
288 stream_info->stream=DestroyImage(stream_info->stream);
290 if (stream_info->quantum_info != (QuantumInfo *) NULL)
291 stream_info->quantum_info=DestroyQuantumInfo(stream_info->quantum_info);
292 stream_info->signature=(~MagickCoreSignature);
293 stream_info=(StreamInfo *) RelinquishMagickMemory(stream_info);
321static void *GetAuthenticMetacontentFromStream(
const Image *image)
326 assert(image != (Image *) NULL);
327 assert(image->signature == MagickCoreSignature);
328 if (IsEventLogging() != MagickFalse)
329 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
330 cache_info=(CacheInfo *) image->cache;
331 assert(cache_info->signature == MagickCoreSignature);
332 return(cache_info->metacontent);
367static Quantum *GetAuthenticPixelsStream(Image *image,
const ssize_t x,
368 const ssize_t y,
const size_t columns,
const size_t rows,
369 ExceptionInfo *exception)
374 assert(image != (Image *) NULL);
375 assert(image->signature == MagickCoreSignature);
376 if (IsEventLogging() != MagickFalse)
377 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
378 pixels=QueueAuthenticPixelsStream(image,x,y,columns,rows,exception);
405static Quantum *GetAuthenticPixelsFromStream(
const Image *image)
410 assert(image != (Image *) NULL);
411 assert(image->signature == MagickCoreSignature);
412 if (IsEventLogging() != MagickFalse)
413 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
414 cache_info=(CacheInfo *) image->cache;
415 assert(cache_info->signature == MagickCoreSignature);
416 return(cache_info->pixels);
450static MagickBooleanType GetOneAuthenticPixelFromStream(Image *image,
451 const ssize_t x,
const ssize_t y,Quantum *pixel,ExceptionInfo *exception)
459 assert(image != (Image *) NULL);
460 assert(image->signature == MagickCoreSignature);
461 (void) memset(pixel,0,MaxPixelChannels*
sizeof(*pixel));
462 p=GetAuthenticPixelsStream(image,x,y,1,1,exception);
463 if (p == (Quantum *) NULL)
465 pixel[RedPixelChannel]=ClampToQuantum(image->background_color.red);
466 pixel[GreenPixelChannel]=ClampToQuantum(image->background_color.green);
467 pixel[BluePixelChannel]=ClampToQuantum(image->background_color.blue);
468 pixel[BlackPixelChannel]=ClampToQuantum(image->background_color.black);
469 pixel[AlphaPixelChannel]=ClampToQuantum(image->background_color.alpha);
472 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
474 PixelChannel channel = GetPixelChannelChannel(image,i);
513static MagickBooleanType GetOneVirtualPixelFromStream(
const Image *image,
514 const VirtualPixelMethod virtual_pixel_method,
const ssize_t x,
const ssize_t y,
515 Quantum *pixel,ExceptionInfo *exception)
523 assert(image != (Image *) NULL);
524 assert(image->signature == MagickCoreSignature);
525 (void) memset(pixel,0,MaxPixelChannels*
sizeof(*pixel));
526 p=GetVirtualPixelStream(image,virtual_pixel_method,x,y,1,1,exception);
527 if (p == (
const Quantum *) NULL)
529 pixel[RedPixelChannel]=ClampToQuantum(image->background_color.red);
530 pixel[GreenPixelChannel]=ClampToQuantum(image->background_color.green);
531 pixel[BluePixelChannel]=ClampToQuantum(image->background_color.blue);
532 pixel[BlackPixelChannel]=ClampToQuantum(image->background_color.black);
533 pixel[AlphaPixelChannel]=ClampToQuantum(image->background_color.alpha);
536 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
538 PixelChannel channel = GetPixelChannelChannel(image,i);
566MagickPrivate
const void *GetStreamInfoClientData(StreamInfo *stream_info)
568 assert(stream_info != (StreamInfo *) NULL);
569 assert(stream_info->signature == MagickCoreSignature);
570 return(stream_info->client_data);
599static const Quantum *GetVirtualPixelsStream(
const Image *image)
604 assert(image != (Image *) NULL);
605 assert(image->signature == MagickCoreSignature);
606 if (IsEventLogging() != MagickFalse)
607 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
608 cache_info=(CacheInfo *) image->cache;
609 assert(cache_info->signature == MagickCoreSignature);
610 return(cache_info->pixels);
637static const void *GetVirtualMetacontentFromStream(
const Image *image)
642 assert(image != (Image *) NULL);
643 assert(image->signature == MagickCoreSignature);
644 if (IsEventLogging() != MagickFalse)
645 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
646 cache_info=(CacheInfo *) image->cache;
647 assert(cache_info->signature == MagickCoreSignature);
648 return(cache_info->metacontent);
687static inline MagickBooleanType AcquireStreamPixels(CacheInfo *cache_info,
688 ExceptionInfo *exception)
690 if (cache_info->length != (MagickSizeType) ((
size_t) cache_info->length))
692 cache_info->pixels=(Quantum *) MagickAssumeAligned(AcquireAlignedMemory(1,
693 (
size_t) cache_info->length));
694 if (cache_info->pixels != (Quantum *) NULL)
695 (void) memset(cache_info->pixels,0,(
size_t) cache_info->length);
698 (void) ThrowMagickException(exception,GetMagickModule(),
699 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",
700 cache_info->filename);
706static const Quantum *GetVirtualPixelStream(
const Image *image,
707 const VirtualPixelMethod magick_unused(virtual_pixel_method),
const ssize_t x,
708 const ssize_t y,
const size_t columns,
const size_t rows,
709 ExceptionInfo *exception)
723 magick_unreferenced(virtual_pixel_method);
728 assert(image != (
const Image *) NULL);
729 assert(image->signature == MagickCoreSignature);
730 if (IsEventLogging() != MagickFalse)
731 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
732 if ((x < 0) || (y < 0) ||
733 ((x+(ssize_t) columns) > (ssize_t) image->columns) ||
734 ((y+(ssize_t) rows) > (ssize_t) image->rows) ||
735 (columns == 0) || (rows == 0))
737 (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
738 "ImageDoesNotContainTheStreamGeometry",
"`%s'",image->filename);
739 return((Quantum *) NULL);
741 cache_info=(CacheInfo *) image->cache;
742 assert(cache_info->signature == MagickCoreSignature);
746 number_pixels=(MagickSizeType) columns*rows;
747 length=(size_t) number_pixels*cache_info->number_channels*
sizeof(Quantum);
748 if (cache_info->number_channels == 0)
749 length=(size_t) number_pixels*
sizeof(Quantum);
750 if (cache_info->metacontent_extent != 0)
751 length+=(size_t) number_pixels*cache_info->metacontent_extent;
752 if (cache_info->pixels == (Quantum *) NULL)
754 cache_info->length=length;
755 status=AcquireStreamPixels(cache_info,exception);
756 if (status == MagickFalse)
758 cache_info->length=0;
759 return((Quantum *) NULL);
763 if (cache_info->length < length)
765 RelinquishStreamPixels(cache_info);
766 cache_info->length=length;
767 status=AcquireStreamPixels(cache_info,exception);
768 if (status == MagickFalse)
770 cache_info->length=0;
771 return((Quantum *) NULL);
774 cache_info->metacontent=(
void *) NULL;
775 if (cache_info->metacontent_extent != 0)
776 cache_info->metacontent=(
void *) (cache_info->pixels+number_pixels*
777 cache_info->number_channels);
778 return(cache_info->pixels);
810MagickExport MagickBooleanType OpenStream(
const ImageInfo *image_info,
811 StreamInfo *stream_info,
const char *filename,ExceptionInfo *exception)
816 (void) CopyMagickString(stream_info->stream->filename,filename,
818 status=OpenBlob(image_info,stream_info->stream,WriteBinaryBlobMode,exception);
854static inline MagickBooleanType ValidatePixelCacheMorphology(
855 const Image *magick_restrict image)
858 *magick_restrict cache_info;
860 const PixelChannelMap
867 cache_info=(CacheInfo *) image->cache;
868 p=image->channel_map;
869 q=cache_info->channel_map;
870 if ((image->storage_class != cache_info->storage_class) ||
871 (image->colorspace != cache_info->colorspace) ||
872 (image->alpha_trait != cache_info->alpha_trait) ||
873 (image->channels != cache_info->channels) ||
874 (image->columns != cache_info->columns) ||
875 (image->rows != cache_info->rows) ||
876 (image->number_channels != cache_info->number_channels) ||
877 (memcmp(p,q,image->number_channels*
sizeof(*p)) != 0) ||
878 (image->metacontent_extent != cache_info->metacontent_extent) ||
879 (cache_info->nexus_info == (NexusInfo **) NULL))
884static Quantum *QueueAuthenticPixelsStream(Image *image,
const ssize_t x,
885 const ssize_t y,
const size_t columns,
const size_t rows,
886 ExceptionInfo *exception)
906 assert(image != (Image *) NULL);
907 if ((image->columns == 0) || (image->rows == 0) || (x < 0) ||
908 (y < 0) || (x >= (ssize_t) image->columns) ||
909 (y >= (ssize_t) image->rows))
911 (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
912 "ImageDoesNotContainTheStreamGeometry",
"`%s'",image->filename);
913 return((Quantum *) NULL);
915 stream_handler=GetBlobStreamHandler(image);
916 if (stream_handler == (StreamHandler) NULL)
918 (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
919 "NoStreamHandlerIsDefined",
"`%s'",image->filename);
920 return((Quantum *) NULL);
922 cache_info=(CacheInfo *) image->cache;
923 assert(cache_info->signature == MagickCoreSignature);
924 if (ValidatePixelCacheMorphology(image) == MagickFalse)
926 if (cache_info->storage_class == UndefinedClass)
927 (void) stream_handler(image,(
const void *) NULL,(
size_t)
928 cache_info->columns);
929 cache_info->storage_class=image->storage_class;
930 cache_info->colorspace=image->colorspace;
931 cache_info->alpha_trait=image->alpha_trait;
932 cache_info->channels=image->channels;
933 cache_info->columns=image->columns;
934 cache_info->rows=image->rows;
935 cache_info->number_channels=image->number_channels;
936 status=ResetPixelChannelMap(image,exception);
937 if (status == MagickFalse)
938 return((Quantum *) NULL);
939 ResetPixelCacheChannels(image);
940 image->cache=cache_info;
945 cache_info->columns=columns;
946 cache_info->rows=rows;
947 number_pixels=(MagickSizeType) columns*rows;
948 length=(size_t) number_pixels*cache_info->number_channels*
sizeof(Quantum);
949 if (cache_info->number_channels == 0)
950 length=(size_t) number_pixels*
sizeof(Quantum);
951 if (cache_info->metacontent_extent != 0)
952 length+=(size_t) number_pixels*cache_info->metacontent_extent;
953 if (cache_info->pixels == (Quantum *) NULL)
955 cache_info->length=length;
956 status=AcquireStreamPixels(cache_info,exception);
957 if (status == MagickFalse)
959 cache_info->length=0;
960 return((Quantum *) NULL);
964 if (cache_info->length < length)
966 RelinquishStreamPixels(cache_info);
967 cache_info->length=length;
968 status=AcquireStreamPixels(cache_info,exception);
969 if (status == MagickFalse)
971 cache_info->length=0;
972 return((Quantum *) NULL);
975 cache_info->metacontent=(
void *) NULL;
976 if (cache_info->metacontent_extent != 0)
977 cache_info->metacontent=(
void *) (cache_info->pixels+number_pixels*
978 cache_info->number_channels);
979 return(cache_info->pixels);
1010MagickExport Image *ReadStream(
const ImageInfo *image_info,StreamHandler stream,
1011 ExceptionInfo *exception)
1025 assert(image_info != (ImageInfo *) NULL);
1026 assert(image_info->signature == MagickCoreSignature);
1027 assert(exception != (ExceptionInfo *) NULL);
1028 assert(exception->signature == MagickCoreSignature);
1029 if (IsEventLogging() != MagickFalse)
1030 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",
1031 image_info->filename);
1032 read_info=CloneImageInfo(image_info);
1033 read_info->cache=AcquirePixelCache(0);
1034 GetPixelCacheMethods(&cache_methods);
1035 cache_methods.get_virtual_pixel_handler=GetVirtualPixelStream;
1036 cache_methods.get_virtual_pixels_handler=GetVirtualPixelsStream;
1037 cache_methods.get_virtual_metacontent_from_handler=
1038 GetVirtualMetacontentFromStream;
1039 cache_methods.get_authentic_pixels_handler=GetAuthenticPixelsStream;
1040 cache_methods.queue_authentic_pixels_handler=QueueAuthenticPixelsStream;
1041 cache_methods.sync_authentic_pixels_handler=SyncAuthenticPixelsStream;
1042 cache_methods.get_authentic_pixels_from_handler=GetAuthenticPixelsFromStream;
1043 cache_methods.get_authentic_metacontent_from_handler=
1044 GetAuthenticMetacontentFromStream;
1045 cache_methods.get_one_virtual_pixel_from_handler=GetOneVirtualPixelFromStream;
1046 cache_methods.get_one_authentic_pixel_from_handler=
1047 GetOneAuthenticPixelFromStream;
1048 cache_methods.destroy_pixel_handler=DestroyPixelStream;
1049 SetPixelCacheMethods(read_info->cache,&cache_methods);
1050 read_info->stream=stream;
1051 image=ReadImage(read_info,exception);
1052 read_info=DestroyImageInfo(read_info);
1053 if (image != (Image *) NULL)
1055 MagickBooleanType status = ResetPixelChannelMap(image,exception);
1056 if (status == MagickFalse)
1057 return(DestroyImage(image));
1058 ResetPixelCacheChannels(image);
1081MagickPrivate
void ResetStreamAnonymousMemory(
void)
1110MagickPrivate
void SetStreamInfoClientData(StreamInfo *stream_info,
1111 const void *client_data)
1113 assert(stream_info != (StreamInfo *) NULL);
1114 assert(stream_info->signature == MagickCoreSignature);
1115 stream_info->client_data=client_data;
1142MagickExport
void SetStreamInfoMap(StreamInfo *stream_info,
const char *map)
1144 assert(stream_info != (StreamInfo *) NULL);
1145 assert(stream_info->signature == MagickCoreSignature);
1146 (void) CloneString(&stream_info->map,map);
1174MagickExport
void SetStreamInfoStorageType(StreamInfo *stream_info,
1175 const StorageType storage_type)
1177 assert(stream_info != (StreamInfo *) NULL);
1178 assert(stream_info->signature == MagickCoreSignature);
1179 stream_info->storage_type=storage_type;
1211#if defined(__cplusplus) || defined(c_plusplus)
1215static size_t WriteStreamImage(
const Image *image,
const void *pixels,
1216 const size_t columns)
1235 stream_info=(StreamInfo *) image->client_data;
1236 switch (stream_info->storage_type)
1238 default: packet_size=
sizeof(
unsigned char);
break;
1239 case CharPixel: packet_size=
sizeof(
unsigned char);
break;
1240 case DoublePixel: packet_size=
sizeof(double);
break;
1241 case FloatPixel: packet_size=
sizeof(float);
break;
1242 case LongPixel: packet_size=
sizeof(
unsigned int);
break;
1243 case LongLongPixel: packet_size=
sizeof(MagickSizeType);
break;
1244 case QuantumPixel: packet_size=
sizeof(Quantum);
break;
1245 case ShortPixel: packet_size=
sizeof(
unsigned short);
break;
1247 cache_info=(CacheInfo *) image->cache;
1248 assert(cache_info->signature == MagickCoreSignature);
1249 packet_size*=strlen(stream_info->map);
1250 length=packet_size*cache_info->columns*cache_info->rows;
1251 if (image != stream_info->image)
1259 (void) RelinquishAlignedMemory(stream_info->pixels);
1260 stream_info->pixels=(
unsigned char *) AcquireAlignedMemory(1,length);
1261 if (stream_info->pixels == (
unsigned char *) NULL)
1263 (void) memset(stream_info->pixels,0,length);
1264 stream_info->image=image;
1265 write_info=CloneImageInfo(stream_info->image_info);
1266 (void) SetImageInfo(write_info,1,stream_info->exception);
1267 if (write_info->extract != (
char *) NULL)
1268 (void) ParseAbsoluteGeometry(write_info->extract,
1269 &stream_info->extract_info);
1271 write_info=DestroyImageInfo(write_info);
1273 extract_info=stream_info->extract_info;
1274 if ((extract_info.width == 0) || (extract_info.height == 0))
1279 (void) StreamImagePixels(stream_info,image,stream_info->exception);
1280 count=WriteBlob(stream_info->stream,length,stream_info->pixels);
1282 return(count == 0 ? 0 : columns);
1284 if ((stream_info->y < extract_info.y) ||
1285 (stream_info->y >= (extract_info.y+(ssize_t) extract_info.height)))
1293 (void) StreamImagePixels(stream_info,image,stream_info->exception);
1294 length=packet_size*extract_info.width;
1295 count=WriteBlob(stream_info->stream,length,stream_info->pixels+(ssize_t)
1296 packet_size*extract_info.x);
1298 return(count == 0 ? 0 : columns);
1301#if defined(__cplusplus) || defined(c_plusplus)
1305MagickExport Image *StreamImage(
const ImageInfo *image_info,
1306 StreamInfo *stream_info,ExceptionInfo *exception)
1314 assert(image_info != (
const ImageInfo *) NULL);
1315 assert(image_info->signature == MagickCoreSignature);
1316 assert(stream_info != (StreamInfo *) NULL);
1317 assert(stream_info->signature == MagickCoreSignature);
1318 assert(exception != (ExceptionInfo *) NULL);
1319 if (IsEventLogging() != MagickFalse)
1320 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",
1321 image_info->filename);
1322 read_info=CloneImageInfo(image_info);
1323 stream_info->image_info=image_info;
1324 if (stream_info->quantum_info == (QuantumInfo *) NULL)
1325 stream_info->quantum_info=AcquireQuantumInfo(image_info,(Image *) NULL);
1326 if (stream_info->quantum_info == (QuantumInfo *) NULL)
1328 read_info=DestroyImageInfo(read_info);
1329 return((Image *) NULL);
1331 stream_info->exception=exception;
1332 read_info->client_data=(
void *) stream_info;
1333 image=ReadStream(read_info,&WriteStreamImage,exception);
1334 read_info=DestroyImageInfo(read_info);
1335 stream_info->quantum_info=DestroyQuantumInfo(stream_info->quantum_info);
1336 stream_info->quantum_info=AcquireQuantumInfo(image_info,image);
1337 if (stream_info->quantum_info == (QuantumInfo *) NULL)
1338 image=DestroyImage(image);
1371static MagickBooleanType StreamImagePixels(
const StreamInfo *stream_info,
1372 const Image *image,ExceptionInfo *exception)
1390 assert(stream_info != (StreamInfo *) NULL);
1391 assert(stream_info->signature == MagickCoreSignature);
1392 assert(image != (Image *) NULL);
1393 assert(image->signature == MagickCoreSignature);
1394 if (IsEventLogging() != MagickFalse)
1395 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
1396 length=strlen(stream_info->map);
1397 quantum_map=(QuantumType *) AcquireQuantumMemory(length,
sizeof(*quantum_map));
1398 if (quantum_map == (QuantumType *) NULL)
1400 (void) ThrowMagickException(exception,GetMagickModule(),
1401 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",image->filename);
1402 return(MagickFalse);
1404 (void) memset(quantum_map,0,length*
sizeof(*quantum_map));
1405 for (i=0; i < (ssize_t) length; i++)
1407 switch (stream_info->map[i])
1412 quantum_map[i]=AlphaQuantum;
1418 quantum_map[i]=BlueQuantum;
1424 quantum_map[i]=CyanQuantum;
1425 if (image->colorspace == CMYKColorspace)
1427 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1428 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1429 "ColorSeparatedImageRequired",
"`%s'",stream_info->map);
1430 return(MagickFalse);
1435 quantum_map[i]=GreenQuantum;
1441 quantum_map[i]=IndexQuantum;
1447 quantum_map[i]=BlackQuantum;
1448 if (image->colorspace == CMYKColorspace)
1450 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1451 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1452 "ColorSeparatedImageRequired",
"`%s'",stream_info->map);
1453 return(MagickFalse);
1458 quantum_map[i]=MagentaQuantum;
1459 if (image->colorspace == CMYKColorspace)
1461 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1462 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1463 "ColorSeparatedImageRequired",
"`%s'",stream_info->map);
1464 return(MagickFalse);
1469 quantum_map[i]=OpacityQuantum;
1475 quantum_map[i]=UndefinedQuantum;
1481 quantum_map[i]=RedQuantum;
1487 quantum_map[i]=YellowQuantum;
1488 if (image->colorspace == CMYKColorspace)
1490 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1491 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1492 "ColorSeparatedImageRequired",
"`%s'",stream_info->map);
1493 return(MagickFalse);
1497 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1498 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
1499 "UnrecognizedPixelMap",
"`%s'",stream_info->map);
1500 return(MagickFalse);
1504 quantum_info=stream_info->quantum_info;
1505 switch (stream_info->storage_type)
1512 q=(
unsigned char *) stream_info->pixels;
1513 if (LocaleCompare(stream_info->map,
"BGR") == 0)
1515 p=GetAuthenticPixelQueue(image);
1516 if (p == (
const Quantum *) NULL)
1518 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1520 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1521 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1522 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1523 p+=(ptrdiff_t) GetPixelChannels(image);
1527 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
1529 p=GetAuthenticPixelQueue(image);
1530 if (p == (
const Quantum *) NULL)
1532 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1534 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1535 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1536 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1537 *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
1538 p+=(ptrdiff_t) GetPixelChannels(image);
1542 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
1544 p=GetAuthenticPixelQueue(image);
1545 if (p == (
const Quantum *) NULL)
1547 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1549 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1550 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1551 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1552 *q++=ScaleQuantumToChar((Quantum) 0);
1553 p+=(ptrdiff_t) GetPixelChannels(image);
1557 if (LocaleCompare(stream_info->map,
"I") == 0)
1559 p=GetAuthenticPixelQueue(image);
1560 if (p == (
const Quantum *) NULL)
1562 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1564 *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1565 p+=(ptrdiff_t) GetPixelChannels(image);
1569 if (LocaleCompare(stream_info->map,
"RGB") == 0)
1571 p=GetAuthenticPixelQueue(image);
1572 if (p == (
const Quantum *) NULL)
1574 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1576 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1577 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1578 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1579 p+=(ptrdiff_t) GetPixelChannels(image);
1583 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
1585 p=GetAuthenticPixelQueue(image);
1586 if (p == (
const Quantum *) NULL)
1588 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1590 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1591 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1592 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1593 *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
1594 p+=(ptrdiff_t) GetPixelChannels(image);
1598 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
1600 p=GetAuthenticPixelQueue(image);
1601 if (p == (
const Quantum *) NULL)
1603 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1605 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1606 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1607 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1608 *q++=ScaleQuantumToChar((Quantum) 0);
1609 p+=(ptrdiff_t) GetPixelChannels(image);
1613 p=GetAuthenticPixelQueue(image);
1614 if (p == (
const Quantum *) NULL)
1616 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1618 for (i=0; i < (ssize_t) length; i++)
1621 switch (quantum_map[i])
1626 *q=ScaleQuantumToChar(GetPixelRed(image,p));
1630 case MagentaQuantum:
1632 *q=ScaleQuantumToChar(GetPixelGreen(image,p));
1638 *q=ScaleQuantumToChar(GetPixelBlue(image,p));
1643 *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
1646 case OpacityQuantum:
1648 *q=ScaleQuantumToChar(GetPixelOpacity(image,p));
1653 if (image->colorspace == CMYKColorspace)
1654 *q=ScaleQuantumToChar(GetPixelBlack(image,p));
1659 *q=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1667 p+=(ptrdiff_t) GetPixelChannels(image);
1676 q=(
double *) stream_info->pixels;
1677 if (LocaleCompare(stream_info->map,
"BGR") == 0)
1679 p=GetAuthenticPixelQueue(image);
1680 if (p == (
const Quantum *) NULL)
1682 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1684 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1685 quantum_info->scale+quantum_info->minimum);
1686 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1687 quantum_info->scale+quantum_info->minimum);
1688 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1689 quantum_info->scale+quantum_info->minimum);
1690 p+=(ptrdiff_t) GetPixelChannels(image);
1694 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
1696 p=GetAuthenticPixelQueue(image);
1697 if (p == (
const Quantum *) NULL)
1699 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1701 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1702 quantum_info->scale+quantum_info->minimum);
1703 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1704 quantum_info->scale+quantum_info->minimum);
1705 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1706 quantum_info->scale+quantum_info->minimum);
1707 *q++=(double) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1708 quantum_info->scale+quantum_info->minimum);
1709 p+=(ptrdiff_t) GetPixelChannels(image);
1713 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
1715 p=GetAuthenticPixelQueue(image);
1716 if (p == (
const Quantum *) NULL)
1718 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1720 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1721 quantum_info->scale+quantum_info->minimum);
1722 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1723 quantum_info->scale+quantum_info->minimum);
1724 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1725 quantum_info->scale+quantum_info->minimum);
1727 p+=(ptrdiff_t) GetPixelChannels(image);
1731 if (LocaleCompare(stream_info->map,
"I") == 0)
1733 p=GetAuthenticPixelQueue(image);
1734 if (p == (
const Quantum *) NULL)
1736 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1738 *q++=(double) ((QuantumScale*(
double) GetPixelIntensity(image,p))*
1739 quantum_info->scale+quantum_info->minimum);
1740 p+=(ptrdiff_t) GetPixelChannels(image);
1744 if (LocaleCompare(stream_info->map,
"RGB") == 0)
1746 p=GetAuthenticPixelQueue(image);
1747 if (p == (
const Quantum *) NULL)
1749 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1751 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1752 quantum_info->scale+quantum_info->minimum);
1753 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1754 quantum_info->scale+quantum_info->minimum);
1755 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1756 quantum_info->scale+quantum_info->minimum);
1757 p+=(ptrdiff_t) GetPixelChannels(image);
1761 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
1763 p=GetAuthenticPixelQueue(image);
1764 if (p == (
const Quantum *) NULL)
1766 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1768 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1769 quantum_info->scale+quantum_info->minimum);
1770 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1771 quantum_info->scale+quantum_info->minimum);
1772 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1773 quantum_info->scale+quantum_info->minimum);
1774 *q++=(double) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1775 quantum_info->scale+quantum_info->minimum);
1776 p+=(ptrdiff_t) GetPixelChannels(image);
1780 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
1782 p=GetAuthenticPixelQueue(image);
1783 if (p == (
const Quantum *) NULL)
1785 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1787 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1788 quantum_info->scale+quantum_info->minimum);
1789 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1790 quantum_info->scale+quantum_info->minimum);
1791 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1792 quantum_info->scale+quantum_info->minimum);
1794 p+=(ptrdiff_t) GetPixelChannels(image);
1798 p=GetAuthenticPixelQueue(image);
1799 if (p == (
const Quantum *) NULL)
1801 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1803 for (i=0; i < (ssize_t) length; i++)
1806 switch (quantum_map[i])
1811 *q=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1812 quantum_info->scale+quantum_info->minimum);
1816 case MagentaQuantum:
1818 *q=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1819 quantum_info->scale+quantum_info->minimum);
1825 *q=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1826 quantum_info->scale+quantum_info->minimum);
1831 *q=(double) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1832 quantum_info->scale+quantum_info->minimum);
1835 case OpacityQuantum:
1837 *q=(double) ((QuantumScale*(
double) GetPixelOpacity(image,p))*
1838 quantum_info->scale+quantum_info->minimum);
1843 if (image->colorspace == CMYKColorspace)
1844 *q=(double) ((QuantumScale*(
double) GetPixelBlack(image,p))*
1845 quantum_info->scale+quantum_info->minimum);
1850 *q=(double) ((QuantumScale*(
double) GetPixelIntensity(image,p))*
1851 quantum_info->scale+quantum_info->minimum);
1859 p+=(ptrdiff_t) GetPixelChannels(image);
1868 q=(
float *) stream_info->pixels;
1869 if (LocaleCompare(stream_info->map,
"BGR") == 0)
1871 p=GetAuthenticPixelQueue(image);
1872 if (p == (
const Quantum *) NULL)
1874 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1876 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1877 quantum_info->scale+quantum_info->minimum);
1878 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1879 quantum_info->scale+quantum_info->minimum);
1880 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1881 quantum_info->scale+quantum_info->minimum);
1882 p+=(ptrdiff_t) GetPixelChannels(image);
1886 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
1888 p=GetAuthenticPixelQueue(image);
1889 if (p == (
const Quantum *) NULL)
1891 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1893 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1894 quantum_info->scale+quantum_info->minimum);
1895 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1896 quantum_info->scale+quantum_info->minimum);
1897 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1898 quantum_info->scale+quantum_info->minimum);
1899 *q++=(float) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1900 quantum_info->scale+quantum_info->minimum);
1901 p+=(ptrdiff_t) GetPixelChannels(image);
1905 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
1907 p=GetAuthenticPixelQueue(image);
1908 if (p == (
const Quantum *) NULL)
1910 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1912 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1913 quantum_info->scale+quantum_info->minimum);
1914 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1915 quantum_info->scale+quantum_info->minimum);
1916 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1917 quantum_info->scale+quantum_info->minimum);
1919 p+=(ptrdiff_t) GetPixelChannels(image);
1923 if (LocaleCompare(stream_info->map,
"I") == 0)
1925 p=GetAuthenticPixelQueue(image);
1926 if (p == (
const Quantum *) NULL)
1928 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1930 *q++=(float) ((QuantumScale*(
double) GetPixelIntensity(image,p))*
1931 quantum_info->scale+quantum_info->minimum);
1932 p+=(ptrdiff_t) GetPixelChannels(image);
1936 if (LocaleCompare(stream_info->map,
"RGB") == 0)
1938 p=GetAuthenticPixelQueue(image);
1939 if (p == (
const Quantum *) NULL)
1941 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1943 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1944 quantum_info->scale+quantum_info->minimum);
1945 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1946 quantum_info->scale+quantum_info->minimum);
1947 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1948 quantum_info->scale+quantum_info->minimum);
1949 p+=(ptrdiff_t) GetPixelChannels(image);
1953 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
1955 p=GetAuthenticPixelQueue(image);
1956 if (p == (
const Quantum *) NULL)
1958 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1960 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1961 quantum_info->scale+quantum_info->minimum);
1962 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1963 quantum_info->scale+quantum_info->minimum);
1964 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1965 quantum_info->scale+quantum_info->minimum);
1966 *q++=(float) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1967 quantum_info->scale+quantum_info->minimum);
1968 p+=(ptrdiff_t) GetPixelChannels(image);
1972 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
1974 p=GetAuthenticPixelQueue(image);
1975 if (p == (
const Quantum *) NULL)
1977 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1979 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1980 quantum_info->scale+quantum_info->minimum);
1981 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1982 quantum_info->scale+quantum_info->minimum);
1983 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1984 quantum_info->scale+quantum_info->minimum);
1986 p+=(ptrdiff_t) GetPixelChannels(image);
1990 p=GetAuthenticPixelQueue(image);
1991 if (p == (
const Quantum *) NULL)
1993 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1995 for (i=0; i < (ssize_t) length; i++)
1998 switch (quantum_map[i])
2003 *q=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
2004 quantum_info->scale+quantum_info->minimum);
2008 case MagentaQuantum:
2010 *q=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
2011 quantum_info->scale+quantum_info->minimum);
2017 *q=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
2018 quantum_info->scale+quantum_info->minimum);
2023 *q=(float) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
2024 quantum_info->scale+quantum_info->minimum);
2027 case OpacityQuantum:
2029 *q=(float) ((QuantumScale*(
double) GetPixelOpacity(image,p))*
2030 quantum_info->scale+quantum_info->minimum);
2035 if (image->colorspace == CMYKColorspace)
2036 *q=(float) ((QuantumScale*(
double) GetPixelBlack(image,p))*
2037 quantum_info->scale+quantum_info->minimum);
2042 *q=(float) ((QuantumScale*(
double) GetPixelIntensity(image,p))*
2043 quantum_info->scale+quantum_info->minimum);
2051 p+=(ptrdiff_t) GetPixelChannels(image);
2060 q=(
unsigned int *) stream_info->pixels;
2061 if (LocaleCompare(stream_info->map,
"BGR") == 0)
2063 p=GetAuthenticPixelQueue(image);
2064 if (p == (
const Quantum *) NULL)
2066 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2068 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2069 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2070 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2071 p+=(ptrdiff_t) GetPixelChannels(image);
2075 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
2077 p=GetAuthenticPixelQueue(image);
2078 if (p == (
const Quantum *) NULL)
2080 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2082 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2083 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2084 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2085 *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
2086 p+=(ptrdiff_t) GetPixelChannels(image);
2090 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
2092 p=GetAuthenticPixelQueue(image);
2093 if (p == (
const Quantum *) NULL)
2095 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2097 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2098 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2099 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2101 p+=(ptrdiff_t) GetPixelChannels(image);
2105 if (LocaleCompare(stream_info->map,
"I") == 0)
2107 p=GetAuthenticPixelQueue(image);
2108 if (p == (
const Quantum *) NULL)
2110 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2112 *q++=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
2113 p+=(ptrdiff_t) GetPixelChannels(image);
2117 if (LocaleCompare(stream_info->map,
"RGB") == 0)
2119 p=GetAuthenticPixelQueue(image);
2120 if (p == (
const Quantum *) NULL)
2122 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2124 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2125 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2126 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2127 p+=(ptrdiff_t) GetPixelChannels(image);
2131 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
2133 p=GetAuthenticPixelQueue(image);
2134 if (p == (
const Quantum *) NULL)
2136 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2138 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2139 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2140 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2141 *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
2142 p+=(ptrdiff_t) GetPixelChannels(image);
2146 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
2148 p=GetAuthenticPixelQueue(image);
2149 if (p == (
const Quantum *) NULL)
2151 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2153 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2154 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2155 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2157 p+=(ptrdiff_t) GetPixelChannels(image);
2161 p=GetAuthenticPixelQueue(image);
2162 if (p == (
const Quantum *) NULL)
2164 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2166 for (i=0; i < (ssize_t) length; i++)
2169 switch (quantum_map[i])
2174 *q=ScaleQuantumToLong(GetPixelRed(image,p));
2178 case MagentaQuantum:
2180 *q=ScaleQuantumToLong(GetPixelGreen(image,p));
2186 *q=ScaleQuantumToLong(GetPixelBlue(image,p));
2191 *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
2194 case OpacityQuantum:
2196 *q=ScaleQuantumToLong(GetPixelOpacity(image,p));
2201 if (image->colorspace == CMYKColorspace)
2202 *q=ScaleQuantumToLong(GetPixelBlack(image,p));
2207 *q=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
2215 p+=(ptrdiff_t) GetPixelChannels(image);
2224 q=(MagickSizeType *) stream_info->pixels;
2225 if (LocaleCompare(stream_info->map,
"BGR") == 0)
2227 p=GetAuthenticPixelQueue(image);
2228 if (p == (
const Quantum *) NULL)
2230 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2232 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2233 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2234 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2235 p+=(ptrdiff_t) GetPixelChannels(image);
2239 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
2241 p=GetAuthenticPixelQueue(image);
2242 if (p == (
const Quantum *) NULL)
2244 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2246 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2247 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2248 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2249 *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
2250 p+=(ptrdiff_t) GetPixelChannels(image);
2254 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
2256 p=GetAuthenticPixelQueue(image);
2257 if (p == (
const Quantum *) NULL)
2259 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2261 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2262 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2263 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2265 p+=(ptrdiff_t) GetPixelChannels(image);
2269 if (LocaleCompare(stream_info->map,
"I") == 0)
2271 p=GetAuthenticPixelQueue(image);
2272 if (p == (
const Quantum *) NULL)
2274 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2276 *q++=ScaleQuantumToLongLong(ClampToQuantum(
2277 GetPixelIntensity(image,p)));
2278 p+=(ptrdiff_t) GetPixelChannels(image);
2282 if (LocaleCompare(stream_info->map,
"RGB") == 0)
2284 p=GetAuthenticPixelQueue(image);
2285 if (p == (
const Quantum *) NULL)
2287 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2289 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2290 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2291 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2292 p+=(ptrdiff_t) GetPixelChannels(image);
2296 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
2298 p=GetAuthenticPixelQueue(image);
2299 if (p == (
const Quantum *) NULL)
2301 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2303 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2304 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2305 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2306 *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
2307 p+=(ptrdiff_t) GetPixelChannels(image);
2311 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
2313 p=GetAuthenticPixelQueue(image);
2314 if (p == (
const Quantum *) NULL)
2316 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2318 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2319 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2320 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2322 p+=(ptrdiff_t) GetPixelChannels(image);
2326 p=GetAuthenticPixelQueue(image);
2327 if (p == (
const Quantum *) NULL)
2329 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2331 for (i=0; i < (ssize_t) length; i++)
2334 switch (quantum_map[i])
2339 *q=ScaleQuantumToLongLong(GetPixelRed(image,p));
2343 case MagentaQuantum:
2345 *q=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2351 *q=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2356 *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
2359 case OpacityQuantum:
2361 *q=ScaleQuantumToLongLong(GetPixelOpacity(image,p));
2366 if (image->colorspace == CMYKColorspace)
2367 *q=ScaleQuantumToLongLong(GetPixelBlack(image,p));
2372 *q=ScaleQuantumToLongLong(ClampToQuantum(
2373 GetPixelIntensity(image,p)));
2381 p+=(ptrdiff_t) GetPixelChannels(image);
2390 q=(Quantum *) stream_info->pixels;
2391 if (LocaleCompare(stream_info->map,
"BGR") == 0)
2393 p=GetAuthenticPixelQueue(image);
2394 if (p == (
const Quantum *) NULL)
2396 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2398 *q++=GetPixelBlue(image,p);
2399 *q++=GetPixelGreen(image,p);
2400 *q++=GetPixelRed(image,p);
2401 p+=(ptrdiff_t) GetPixelChannels(image);
2405 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
2407 p=GetAuthenticPixelQueue(image);
2408 if (p == (
const Quantum *) NULL)
2410 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2412 *q++=GetPixelBlue(image,p);
2413 *q++=GetPixelGreen(image,p);
2414 *q++=GetPixelRed(image,p);
2415 *q++=GetPixelAlpha(image,p);
2416 p+=(ptrdiff_t) GetPixelChannels(image);
2420 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
2422 p=GetAuthenticPixelQueue(image);
2423 if (p == (
const Quantum *) NULL)
2425 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2427 *q++=GetPixelBlue(image,p);
2428 *q++=GetPixelGreen(image,p);
2429 *q++=GetPixelRed(image,p);
2431 p+=(ptrdiff_t) GetPixelChannels(image);
2435 if (LocaleCompare(stream_info->map,
"I") == 0)
2437 p=GetAuthenticPixelQueue(image);
2438 if (p == (
const Quantum *) NULL)
2440 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2442 *q++=ClampToQuantum(GetPixelIntensity(image,p));
2443 p+=(ptrdiff_t) GetPixelChannels(image);
2447 if (LocaleCompare(stream_info->map,
"RGB") == 0)
2449 p=GetAuthenticPixelQueue(image);
2450 if (p == (
const Quantum *) NULL)
2452 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2454 *q++=GetPixelRed(image,p);
2455 *q++=GetPixelGreen(image,p);
2456 *q++=GetPixelBlue(image,p);
2457 p+=(ptrdiff_t) GetPixelChannels(image);
2461 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
2463 p=GetAuthenticPixelQueue(image);
2464 if (p == (
const Quantum *) NULL)
2466 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2468 *q++=GetPixelRed(image,p);
2469 *q++=GetPixelGreen(image,p);
2470 *q++=GetPixelBlue(image,p);
2471 *q++=GetPixelAlpha(image,p);
2472 p+=(ptrdiff_t) GetPixelChannels(image);
2476 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
2478 p=GetAuthenticPixelQueue(image);
2479 if (p == (
const Quantum *) NULL)
2481 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2483 *q++=GetPixelRed(image,p);
2484 *q++=GetPixelGreen(image,p);
2485 *q++=GetPixelBlue(image,p);
2487 p+=(ptrdiff_t) GetPixelChannels(image);
2491 p=GetAuthenticPixelQueue(image);
2492 if (p == (
const Quantum *) NULL)
2494 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2496 for (i=0; i < (ssize_t) length; i++)
2499 switch (quantum_map[i])
2504 *q=GetPixelRed(image,p);
2508 case MagentaQuantum:
2510 *q=GetPixelGreen(image,p);
2516 *q=GetPixelBlue(image,p);
2521 *q=GetPixelAlpha(image,p);
2524 case OpacityQuantum:
2526 *q=GetPixelOpacity(image,p);
2531 if (image->colorspace == CMYKColorspace)
2532 *q=GetPixelBlack(image,p);
2537 *q=ClampToQuantum(GetPixelIntensity(image,p));
2545 p+=(ptrdiff_t) GetPixelChannels(image);
2554 q=(
unsigned short *) stream_info->pixels;
2555 if (LocaleCompare(stream_info->map,
"BGR") == 0)
2557 p=GetAuthenticPixelQueue(image);
2558 if (p == (
const Quantum *) NULL)
2560 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2562 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2563 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2564 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2565 p+=(ptrdiff_t) GetPixelChannels(image);
2569 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
2571 p=GetAuthenticPixelQueue(image);
2572 if (p == (
const Quantum *) NULL)
2574 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2576 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2577 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2578 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2579 *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
2580 p+=(ptrdiff_t) GetPixelChannels(image);
2584 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
2586 p=GetAuthenticPixelQueue(image);
2587 if (p == (
const Quantum *) NULL)
2589 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2591 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2592 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2593 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2595 p+=(ptrdiff_t) GetPixelChannels(image);
2599 if (LocaleCompare(stream_info->map,
"I") == 0)
2601 p=GetAuthenticPixelQueue(image);
2602 if (p == (
const Quantum *) NULL)
2604 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2606 *q++=ScaleQuantumToShort(ClampToQuantum(
2607 GetPixelIntensity(image,p)));
2608 p+=(ptrdiff_t) GetPixelChannels(image);
2612 if (LocaleCompare(stream_info->map,
"RGB") == 0)
2614 p=GetAuthenticPixelQueue(image);
2615 if (p == (
const Quantum *) NULL)
2617 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2619 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2620 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2621 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2622 p+=(ptrdiff_t) GetPixelChannels(image);
2626 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
2628 p=GetAuthenticPixelQueue(image);
2629 if (p == (
const Quantum *) NULL)
2631 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2633 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2634 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2635 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2636 *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
2637 p+=(ptrdiff_t) GetPixelChannels(image);
2641 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
2643 p=GetAuthenticPixelQueue(image);
2644 if (p == (
const Quantum *) NULL)
2646 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2648 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2649 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2650 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2652 p+=(ptrdiff_t) GetPixelChannels(image);
2656 p=GetAuthenticPixelQueue(image);
2657 if (p == (
const Quantum *) NULL)
2659 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2661 for (i=0; i < (ssize_t) length; i++)
2664 switch (quantum_map[i])
2669 *q=ScaleQuantumToShort(GetPixelRed(image,p));
2673 case MagentaQuantum:
2675 *q=ScaleQuantumToShort(GetPixelGreen(image,p));
2681 *q=ScaleQuantumToShort(GetPixelBlue(image,p));
2686 *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
2689 case OpacityQuantum:
2691 *q=ScaleQuantumToShort(GetPixelOpacity(image,p));
2696 if (image->colorspace == CMYKColorspace)
2697 *q=ScaleQuantumToShort(GetPixelBlack(image,p));
2702 *q=ScaleQuantumToShort(ClampToQuantum(
2703 GetPixelIntensity(image,p)));
2711 p+=(ptrdiff_t) GetPixelChannels(image);
2717 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
2718 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
2719 "UnrecognizedPixelMap",
"`%s'",stream_info->map);
2723 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
2753static MagickBooleanType SyncAuthenticPixelsStream(Image *image,
2754 ExceptionInfo *exception)
2765 assert(image != (Image *) NULL);
2766 assert(image->signature == MagickCoreSignature);
2767 if (IsEventLogging() != MagickFalse)
2768 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
2769 cache_info=(CacheInfo *) image->cache;
2770 assert(cache_info->signature == MagickCoreSignature);
2771 stream_handler=GetBlobStreamHandler(image);
2772 if (stream_handler == (StreamHandler) NULL)
2774 (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
2775 "NoStreamHandlerIsDefined",
"`%s'",image->filename);
2776 return(MagickFalse);
2778 length=stream_handler(image,cache_info->pixels,(
size_t) cache_info->columns);
2779 return(length == cache_info->columns ? MagickTrue : MagickFalse);
2810MagickExport MagickBooleanType WriteStream(
const ImageInfo *image_info,
2811 Image *image,StreamHandler stream,ExceptionInfo *exception)
2819 assert(image_info != (ImageInfo *) NULL);
2820 assert(image_info->signature == MagickCoreSignature);
2821 if (IsEventLogging() != MagickFalse)
2822 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",
2823 image_info->filename);
2824 assert(image != (Image *) NULL);
2825 assert(image->signature == MagickCoreSignature);
2826 write_info=CloneImageInfo(image_info);
2827 *write_info->magick=
'\0';
2828 write_info->stream=stream;
2829 status=WriteImage(write_info,image,exception);
2830 write_info=DestroyImageInfo(write_info);