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"
115#if defined(__cplusplus) || defined(c_plusplus)
120 *GetVirtualPixelStream(
const Image *,
const VirtualPixelMethod,
const ssize_t,
123static MagickBooleanType
128 *QueueAuthenticPixelsStream(
Image *,
const ssize_t,
const ssize_t,
const size_t,
131#if defined(__cplusplus) || defined(c_plusplus)
166 stream_info=(
StreamInfo *) AcquireCriticalMemory(
sizeof(*stream_info));
167 (void) memset(stream_info,0,
sizeof(*stream_info));
168 stream_info->pixels=(
unsigned char *) MagickAssumeAligned(
169 AcquireAlignedMemory(1,
sizeof(*stream_info->pixels)));
170 if (stream_info->pixels == (
unsigned char *) NULL)
171 ThrowFatalException(ResourceLimitFatalError,
"MemoryAllocationFailed");
172 stream_info->map=ConstantString(
"RGB");
173 stream_info->storage_type=CharPixel;
174 stream_info->stream=AcquireImage(image_info,exception);
175 stream_info->signature=MagickCoreSignature;
202static inline void RelinquishStreamPixels(
CacheInfo *cache_info)
204 assert(cache_info != (
CacheInfo *) NULL);
205 if (cache_info->pixels != (Quantum *) NULL)
207 if (cache_info->mapped == MagickFalse)
208 cache_info->pixels=(Quantum *) RelinquishAlignedMemory(
212 (void) UnmapBlob(cache_info->pixels,(
size_t) cache_info->length);
213 cache_info->pixels=(Quantum *) NULL;
216 cache_info->mapped=MagickFalse;
217 cache_info->metacontent=(
void *) NULL;
218 cache_info->length=0;
221static void DestroyPixelStream(
Image *image)
229 assert(image != (
Image *) NULL);
230 assert(image->signature == MagickCoreSignature);
231 if (IsEventLogging() != MagickFalse)
232 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
234 assert(cache_info->signature == MagickCoreSignature);
236 LockSemaphoreInfo(cache_info->semaphore);
237 cache_info->reference_count--;
238 if (cache_info->reference_count == 0)
240 UnlockSemaphoreInfo(cache_info->semaphore);
241 if (destroy == MagickFalse)
243 RelinquishStreamPixels(cache_info);
244 if (cache_info->nexus_info != (
NexusInfo **) NULL)
245 cache_info->nexus_info=DestroyPixelCacheNexus(cache_info->nexus_info,
246 cache_info->number_threads);
248 RelinquishSemaphoreInfo(&cache_info->file_semaphore);
250 RelinquishSemaphoreInfo(&cache_info->semaphore);
251 cache_info=(
CacheInfo *) RelinquishAlignedMemory(cache_info);
280 assert(stream_info->signature == MagickCoreSignature);
281 if (IsEventLogging() != MagickFalse)
282 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"...");
283 if (stream_info->map != (
char *) NULL)
284 stream_info->map=DestroyString(stream_info->map);
285 if (stream_info->pixels != (
unsigned char *) NULL)
286 stream_info->pixels=(
unsigned char *) RelinquishAlignedMemory(
287 stream_info->pixels);
288 if (stream_info->stream != (
Image *) NULL)
290 (void) CloseBlob(stream_info->stream);
291 stream_info->stream=DestroyImage(stream_info->stream);
293 if (stream_info->quantum_info != (
QuantumInfo *) NULL)
294 stream_info->quantum_info=DestroyQuantumInfo(stream_info->quantum_info);
295 stream_info->signature=(~MagickCoreSignature);
296 stream_info=(
StreamInfo *) RelinquishMagickMemory(stream_info);
324static void *GetAuthenticMetacontentFromStream(
const Image *image)
329 assert(image != (
Image *) NULL);
330 assert(image->signature == MagickCoreSignature);
331 if (IsEventLogging() != MagickFalse)
332 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
334 assert(cache_info->signature == MagickCoreSignature);
335 return(cache_info->metacontent);
370static Quantum *GetAuthenticPixelsStream(
Image *image,
const ssize_t x,
371 const ssize_t y,
const size_t columns,
const size_t rows,
377 assert(image != (
Image *) NULL);
378 assert(image->signature == MagickCoreSignature);
379 if (IsEventLogging() != MagickFalse)
380 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
381 pixels=QueueAuthenticPixelsStream(image,x,y,columns,rows,exception);
408static Quantum *GetAuthenticPixelsFromStream(
const Image *image)
413 assert(image != (
Image *) NULL);
414 assert(image->signature == MagickCoreSignature);
415 if (IsEventLogging() != MagickFalse)
416 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
418 assert(cache_info->signature == MagickCoreSignature);
419 return(cache_info->pixels);
453static MagickBooleanType GetOneAuthenticPixelFromStream(
Image *image,
454 const ssize_t x,
const ssize_t y,Quantum *pixel,
ExceptionInfo *exception)
462 assert(image != (
Image *) NULL);
463 assert(image->signature == MagickCoreSignature);
464 (void) memset(pixel,0,MaxPixelChannels*
sizeof(*pixel));
465 p=GetAuthenticPixelsStream(image,x,y,1,1,exception);
466 if (p == (Quantum *) NULL)
468 pixel[RedPixelChannel]=ClampToQuantum(image->background_color.red);
469 pixel[GreenPixelChannel]=ClampToQuantum(image->background_color.green);
470 pixel[BluePixelChannel]=ClampToQuantum(image->background_color.blue);
471 pixel[BlackPixelChannel]=ClampToQuantum(image->background_color.black);
472 pixel[AlphaPixelChannel]=ClampToQuantum(image->background_color.alpha);
475 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
477 PixelChannel channel = GetPixelChannelChannel(image,i);
516static MagickBooleanType GetOneVirtualPixelFromStream(
const Image *image,
517 const VirtualPixelMethod virtual_pixel_method,
const ssize_t x,
const ssize_t y,
526 assert(image != (
Image *) NULL);
527 assert(image->signature == MagickCoreSignature);
528 (void) memset(pixel,0,MaxPixelChannels*
sizeof(*pixel));
529 p=GetVirtualPixelStream(image,virtual_pixel_method,x,y,1,1,exception);
530 if (p == (
const Quantum *) NULL)
532 pixel[RedPixelChannel]=ClampToQuantum(image->background_color.red);
533 pixel[GreenPixelChannel]=ClampToQuantum(image->background_color.green);
534 pixel[BluePixelChannel]=ClampToQuantum(image->background_color.blue);
535 pixel[BlackPixelChannel]=ClampToQuantum(image->background_color.black);
536 pixel[AlphaPixelChannel]=ClampToQuantum(image->background_color.alpha);
539 for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
541 PixelChannel channel = GetPixelChannelChannel(image,i);
569MagickPrivate
const void *GetStreamInfoClientData(
StreamInfo *stream_info)
572 assert(stream_info->signature == MagickCoreSignature);
573 return(stream_info->client_data);
602static const Quantum *GetVirtualPixelsStream(
const Image *image)
607 assert(image != (
Image *) NULL);
608 assert(image->signature == MagickCoreSignature);
609 if (IsEventLogging() != MagickFalse)
610 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
612 assert(cache_info->signature == MagickCoreSignature);
613 return(cache_info->pixels);
640static const void *GetVirtualMetacontentFromStream(
const Image *image)
645 assert(image != (
Image *) NULL);
646 assert(image->signature == MagickCoreSignature);
647 if (IsEventLogging() != MagickFalse)
648 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
650 assert(cache_info->signature == MagickCoreSignature);
651 return(cache_info->metacontent);
690static inline MagickBooleanType AcquireStreamPixels(
CacheInfo *cache_info,
693 if (cache_info->length != (MagickSizeType) ((
size_t) cache_info->length))
695 cache_info->pixels=(Quantum *) MagickAssumeAligned(AcquireAlignedMemory(1,
696 (
size_t) cache_info->length));
697 if (cache_info->pixels != (Quantum *) NULL)
698 (void) memset(cache_info->pixels,0,(
size_t) cache_info->length);
701 (void) ThrowMagickException(exception,GetMagickModule(),
702 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",
703 cache_info->filename);
709static const Quantum *GetVirtualPixelStream(
const Image *image,
710 const VirtualPixelMethod magick_unused(virtual_pixel_method),
const ssize_t x,
711 const ssize_t y,
const size_t columns,
const size_t rows,
726 magick_unreferenced(virtual_pixel_method);
731 assert(image != (
const Image *) NULL);
732 assert(image->signature == MagickCoreSignature);
733 if (IsEventLogging() != MagickFalse)
734 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
735 if ((x < 0) || (y < 0) ||
736 ((x+(ssize_t) columns) > (ssize_t) image->columns) ||
737 ((y+(ssize_t) rows) > (ssize_t) image->rows) ||
738 (columns == 0) || (rows == 0))
740 (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
741 "ImageDoesNotContainTheStreamGeometry",
"`%s'",image->filename);
742 return((Quantum *) NULL);
745 assert(cache_info->signature == MagickCoreSignature);
749 number_pixels=(MagickSizeType) columns*rows;
750 length=(size_t) number_pixels*cache_info->number_channels*
sizeof(Quantum);
751 if (cache_info->number_channels == 0)
752 length=(size_t) number_pixels*
sizeof(Quantum);
753 if (cache_info->metacontent_extent != 0)
754 length+=(size_t) number_pixels*cache_info->metacontent_extent;
755 if (cache_info->pixels == (Quantum *) NULL)
757 cache_info->length=length;
758 status=AcquireStreamPixels(cache_info,exception);
759 if (status == MagickFalse)
761 cache_info->length=0;
762 return((Quantum *) NULL);
766 if (cache_info->length < length)
768 RelinquishStreamPixels(cache_info);
769 cache_info->length=length;
770 status=AcquireStreamPixels(cache_info,exception);
771 if (status == MagickFalse)
773 cache_info->length=0;
774 return((Quantum *) NULL);
777 cache_info->metacontent=(
void *) NULL;
778 if (cache_info->metacontent_extent != 0)
779 cache_info->metacontent=(
void *) (cache_info->pixels+number_pixels*
780 cache_info->number_channels);
781 return(cache_info->pixels);
813MagickExport MagickBooleanType OpenStream(
const ImageInfo *image_info,
819 (void) CopyMagickString(stream_info->stream->filename,filename,
821 status=OpenBlob(image_info,stream_info->stream,WriteBinaryBlobMode,exception);
857static inline MagickBooleanType ValidatePixelCacheMorphology(
858 const Image *magick_restrict image)
861 *magick_restrict cache_info;
871 p=image->channel_map;
872 q=cache_info->channel_map;
873 if ((image->storage_class != cache_info->storage_class) ||
874 (image->colorspace != cache_info->colorspace) ||
875 (image->alpha_trait != cache_info->alpha_trait) ||
876 (image->channels != cache_info->channels) ||
877 (image->columns != cache_info->columns) ||
878 (image->rows != cache_info->rows) ||
879 (image->number_channels != cache_info->number_channels) ||
880 (memcmp(p,q,image->number_channels*
sizeof(*p)) != 0) ||
881 (image->metacontent_extent != cache_info->metacontent_extent) ||
882 (cache_info->nexus_info == (
NexusInfo **) NULL))
887static Quantum *QueueAuthenticPixelsStream(
Image *image,
const ssize_t x,
888 const ssize_t y,
const size_t columns,
const size_t rows,
909 assert(image != (
Image *) NULL);
910 if ((image->columns == 0) || (image->rows == 0) || (x < 0) ||
911 (y < 0) || (x >= (ssize_t) image->columns) ||
912 (y >= (ssize_t) image->rows))
914 (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
915 "ImageDoesNotContainTheStreamGeometry",
"`%s'",image->filename);
916 return((Quantum *) NULL);
918 stream_handler=GetBlobStreamHandler(image);
919 if (stream_handler == (StreamHandler) NULL)
921 (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
922 "NoStreamHandlerIsDefined",
"`%s'",image->filename);
923 return((Quantum *) NULL);
926 assert(cache_info->signature == MagickCoreSignature);
927 if (ValidatePixelCacheMorphology(image) == MagickFalse)
929 if (cache_info->storage_class == UndefinedClass)
930 (void) stream_handler(image,(
const void *) NULL,(
size_t)
931 cache_info->columns);
932 cache_info->storage_class=image->storage_class;
933 cache_info->colorspace=image->colorspace;
934 cache_info->alpha_trait=image->alpha_trait;
935 cache_info->channels=image->channels;
936 cache_info->columns=image->columns;
937 cache_info->rows=image->rows;
938 cache_info->number_channels=image->number_channels;
939 status=ResetPixelChannelMap(image,exception);
940 if (status == MagickFalse)
941 return((Quantum *) NULL);
942 ResetPixelCacheChannels(image);
943 image->cache=cache_info;
948 cache_info->columns=columns;
949 cache_info->rows=rows;
950 number_pixels=(MagickSizeType) columns*rows;
951 length=(size_t) number_pixels*cache_info->number_channels*
sizeof(Quantum);
952 if (cache_info->number_channels == 0)
953 length=(size_t) number_pixels*
sizeof(Quantum);
954 if (cache_info->metacontent_extent != 0)
955 length+=(size_t) number_pixels*cache_info->metacontent_extent;
956 if (cache_info->pixels == (Quantum *) NULL)
958 cache_info->length=length;
959 status=AcquireStreamPixels(cache_info,exception);
960 if (status == MagickFalse)
962 cache_info->length=0;
963 return((Quantum *) NULL);
967 if (cache_info->length < length)
969 RelinquishStreamPixels(cache_info);
970 cache_info->length=length;
971 status=AcquireStreamPixels(cache_info,exception);
972 if (status == MagickFalse)
974 cache_info->length=0;
975 return((Quantum *) NULL);
978 cache_info->metacontent=(
void *) NULL;
979 if (cache_info->metacontent_extent != 0)
980 cache_info->metacontent=(
void *) (cache_info->pixels+number_pixels*
981 cache_info->number_channels);
982 return(cache_info->pixels);
1013MagickExport
Image *ReadStream(
const ImageInfo *image_info,StreamHandler stream,
1028 assert(image_info != (
ImageInfo *) NULL);
1029 assert(image_info->signature == MagickCoreSignature);
1031 assert(exception->signature == MagickCoreSignature);
1032 if (IsEventLogging() != MagickFalse)
1033 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",
1034 image_info->filename);
1035 read_info=CloneImageInfo(image_info);
1036 read_info->cache=AcquirePixelCache(0);
1037 GetPixelCacheMethods(&cache_methods);
1038 cache_methods.get_virtual_pixel_handler=GetVirtualPixelStream;
1039 cache_methods.get_virtual_pixels_handler=GetVirtualPixelsStream;
1040 cache_methods.get_virtual_metacontent_from_handler=
1041 GetVirtualMetacontentFromStream;
1042 cache_methods.get_authentic_pixels_handler=GetAuthenticPixelsStream;
1043 cache_methods.queue_authentic_pixels_handler=QueueAuthenticPixelsStream;
1044 cache_methods.sync_authentic_pixels_handler=SyncAuthenticPixelsStream;
1045 cache_methods.get_authentic_pixels_from_handler=GetAuthenticPixelsFromStream;
1046 cache_methods.get_authentic_metacontent_from_handler=
1047 GetAuthenticMetacontentFromStream;
1048 cache_methods.get_one_virtual_pixel_from_handler=GetOneVirtualPixelFromStream;
1049 cache_methods.get_one_authentic_pixel_from_handler=
1050 GetOneAuthenticPixelFromStream;
1051 cache_methods.destroy_pixel_handler=DestroyPixelStream;
1052 SetPixelCacheMethods(read_info->cache,&cache_methods);
1053 read_info->stream=stream;
1054 image=ReadImage(read_info,exception);
1055 read_info=DestroyImageInfo(read_info);
1056 if (image != (
Image *) NULL)
1058 MagickBooleanType status = ResetPixelChannelMap(image,exception);
1059 if (status == MagickFalse)
1060 return(DestroyImage(image));
1061 ResetPixelCacheChannels(image);
1084MagickPrivate
void ResetStreamAnonymousMemory(
void)
1113MagickPrivate
void SetStreamInfoClientData(
StreamInfo *stream_info,
1114 const void *client_data)
1117 assert(stream_info->signature == MagickCoreSignature);
1118 stream_info->client_data=client_data;
1145MagickExport
void SetStreamInfoMap(
StreamInfo *stream_info,
const char *map)
1148 assert(stream_info->signature == MagickCoreSignature);
1149 (void) CloneString(&stream_info->map,map);
1177MagickExport
void SetStreamInfoStorageType(
StreamInfo *stream_info,
1178 const StorageType storage_type)
1181 assert(stream_info->signature == MagickCoreSignature);
1182 stream_info->storage_type=storage_type;
1214#if defined(__cplusplus) || defined(c_plusplus)
1218static size_t WriteStreamImage(
const Image *image,
const void *pixels,
1219 const size_t columns)
1238 stream_info=(
StreamInfo *) image->client_data;
1239 switch (stream_info->storage_type)
1241 default: packet_size=
sizeof(
unsigned char);
break;
1242 case CharPixel: packet_size=
sizeof(
unsigned char);
break;
1243 case DoublePixel: packet_size=
sizeof(double);
break;
1244 case FloatPixel: packet_size=
sizeof(float);
break;
1245 case LongPixel: packet_size=
sizeof(
unsigned int);
break;
1246 case LongLongPixel: packet_size=
sizeof(MagickSizeType);
break;
1247 case QuantumPixel: packet_size=
sizeof(Quantum);
break;
1248 case ShortPixel: packet_size=
sizeof(
unsigned short);
break;
1251 assert(cache_info->signature == MagickCoreSignature);
1252 packet_size*=strlen(stream_info->map);
1253 length=packet_size*cache_info->columns*cache_info->rows;
1254 if ((image != stream_info->image) || (length > stream_info->length))
1262 (void) RelinquishAlignedMemory(stream_info->pixels);
1263 stream_info->pixels=(
unsigned char *) AcquireAlignedMemory(1,length);
1264 if (stream_info->pixels == (
unsigned char *) NULL)
1266 (void) memset(stream_info->pixels,0,length);
1267 stream_info->length=length;
1268 stream_info->image=image;
1269 write_info=CloneImageInfo(stream_info->image_info);
1270 (void) SetImageInfo(write_info,1,stream_info->exception);
1271 if (write_info->extract != (
char *) NULL)
1272 (void) ParseAbsoluteGeometry(write_info->extract,
1273 &stream_info->extract_info);
1275 write_info=DestroyImageInfo(write_info);
1277 extract_info=stream_info->extract_info;
1278 if ((extract_info.width == 0) || (extract_info.height == 0))
1283 (void) StreamImagePixels(stream_info,image,stream_info->exception);
1284 count=WriteBlob(stream_info->stream,length,stream_info->pixels);
1286 return(count == 0 ? 0 : columns);
1288 if ((stream_info->y < extract_info.y) ||
1289 (stream_info->y >= (extract_info.y+(ssize_t) extract_info.height)))
1297 (void) StreamImagePixels(stream_info,image,stream_info->exception);
1299 if ((extract_info.x < (ssize_t) image->columns) &&
1300 ((extract_info.x + (ssize_t) extract_info.width) > 0))
1302 ssize_t x = extract_info.x;
1303 size_t width = extract_info.width;
1309 if ((x+(ssize_t) width) > (ssize_t) image->columns)
1310 width=(size_t) ((ssize_t) image->columns-x);
1311 length=packet_size*width;
1312 count=WriteBlob(stream_info->stream,length,stream_info->pixels+
1316 return(count == 0 ? 0 : columns);
1319#if defined(__cplusplus) || defined(c_plusplus)
1332 assert(image_info != (
const ImageInfo *) NULL);
1333 assert(image_info->signature == MagickCoreSignature);
1335 assert(stream_info->signature == MagickCoreSignature);
1337 if (IsEventLogging() != MagickFalse)
1338 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",
1339 image_info->filename);
1340 read_info=CloneImageInfo(image_info);
1341 stream_info->image_info=image_info;
1342 if (stream_info->quantum_info == (
QuantumInfo *) NULL)
1343 stream_info->quantum_info=AcquireQuantumInfo(image_info,(
Image *) NULL);
1344 if (stream_info->quantum_info == (
QuantumInfo *) NULL)
1346 read_info=DestroyImageInfo(read_info);
1347 return((
Image *) NULL);
1349 stream_info->exception=exception;
1350 read_info->client_data=(
void *) stream_info;
1351 image=ReadStream(read_info,&WriteStreamImage,exception);
1352 read_info=DestroyImageInfo(read_info);
1353 stream_info->quantum_info=DestroyQuantumInfo(stream_info->quantum_info);
1354 stream_info->quantum_info=AcquireQuantumInfo(image_info,image);
1355 if (stream_info->quantum_info == (
QuantumInfo *) NULL)
1356 image=DestroyImage(image);
1389static MagickBooleanType StreamImagePixels(
const StreamInfo *stream_info,
1409 assert(stream_info->signature == MagickCoreSignature);
1410 assert(image != (
Image *) NULL);
1411 assert(image->signature == MagickCoreSignature);
1412 if (IsEventLogging() != MagickFalse)
1413 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
1414 length=strlen(stream_info->map);
1415 quantum_map=(QuantumType *) AcquireQuantumMemory(length,
sizeof(*quantum_map));
1416 if (quantum_map == (QuantumType *) NULL)
1418 (void) ThrowMagickException(exception,GetMagickModule(),
1419 ResourceLimitError,
"MemoryAllocationFailed",
"`%s'",image->filename);
1420 return(MagickFalse);
1422 (void) memset(quantum_map,0,length*
sizeof(*quantum_map));
1423 for (i=0; i < (ssize_t) length; i++)
1425 switch (stream_info->map[i])
1430 quantum_map[i]=AlphaQuantum;
1436 quantum_map[i]=BlueQuantum;
1442 quantum_map[i]=CyanQuantum;
1443 if (image->colorspace == CMYKColorspace)
1445 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1446 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1447 "ColorSeparatedImageRequired",
"`%s'",stream_info->map);
1448 return(MagickFalse);
1453 quantum_map[i]=GreenQuantum;
1459 quantum_map[i]=IndexQuantum;
1465 quantum_map[i]=BlackQuantum;
1466 if (image->colorspace == CMYKColorspace)
1468 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1469 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1470 "ColorSeparatedImageRequired",
"`%s'",stream_info->map);
1471 return(MagickFalse);
1476 quantum_map[i]=MagentaQuantum;
1477 if (image->colorspace == CMYKColorspace)
1479 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1480 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1481 "ColorSeparatedImageRequired",
"`%s'",stream_info->map);
1482 return(MagickFalse);
1487 quantum_map[i]=OpacityQuantum;
1493 quantum_map[i]=UndefinedQuantum;
1499 quantum_map[i]=RedQuantum;
1505 quantum_map[i]=YellowQuantum;
1506 if (image->colorspace == CMYKColorspace)
1508 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1509 (void) ThrowMagickException(exception,GetMagickModule(),ImageError,
1510 "ColorSeparatedImageRequired",
"`%s'",stream_info->map);
1511 return(MagickFalse);
1515 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
1516 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
1517 "UnrecognizedPixelMap",
"`%s'",stream_info->map);
1518 return(MagickFalse);
1522 quantum_info=stream_info->quantum_info;
1523 switch (stream_info->storage_type)
1530 q=(
unsigned char *) stream_info->pixels;
1531 if (LocaleCompare(stream_info->map,
"BGR") == 0)
1533 p=GetAuthenticPixelQueue(image);
1534 if (p == (
const Quantum *) NULL)
1536 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1538 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1539 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1540 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1541 p+=(ptrdiff_t) GetPixelChannels(image);
1545 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
1547 p=GetAuthenticPixelQueue(image);
1548 if (p == (
const Quantum *) NULL)
1550 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1552 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1553 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1554 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1555 *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
1556 p+=(ptrdiff_t) GetPixelChannels(image);
1560 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
1562 p=GetAuthenticPixelQueue(image);
1563 if (p == (
const Quantum *) NULL)
1565 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1567 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1568 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1569 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1570 *q++=ScaleQuantumToChar((Quantum) 0);
1571 p+=(ptrdiff_t) GetPixelChannels(image);
1575 if (LocaleCompare(stream_info->map,
"I") == 0)
1577 p=GetAuthenticPixelQueue(image);
1578 if (p == (
const Quantum *) NULL)
1580 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1582 *q++=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1583 p+=(ptrdiff_t) GetPixelChannels(image);
1587 if (LocaleCompare(stream_info->map,
"RGB") == 0)
1589 p=GetAuthenticPixelQueue(image);
1590 if (p == (
const Quantum *) NULL)
1592 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1594 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1595 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1596 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1597 p+=(ptrdiff_t) GetPixelChannels(image);
1601 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
1603 p=GetAuthenticPixelQueue(image);
1604 if (p == (
const Quantum *) NULL)
1606 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1608 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1609 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1610 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1611 *q++=ScaleQuantumToChar(GetPixelAlpha(image,p));
1612 p+=(ptrdiff_t) GetPixelChannels(image);
1616 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
1618 p=GetAuthenticPixelQueue(image);
1619 if (p == (
const Quantum *) NULL)
1621 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1623 *q++=ScaleQuantumToChar(GetPixelRed(image,p));
1624 *q++=ScaleQuantumToChar(GetPixelGreen(image,p));
1625 *q++=ScaleQuantumToChar(GetPixelBlue(image,p));
1626 *q++=ScaleQuantumToChar((Quantum) 0);
1627 p+=(ptrdiff_t) GetPixelChannels(image);
1631 p=GetAuthenticPixelQueue(image);
1632 if (p == (
const Quantum *) NULL)
1634 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1636 for (i=0; i < (ssize_t) length; i++)
1639 switch (quantum_map[i])
1644 *q=ScaleQuantumToChar(GetPixelRed(image,p));
1648 case MagentaQuantum:
1650 *q=ScaleQuantumToChar(GetPixelGreen(image,p));
1656 *q=ScaleQuantumToChar(GetPixelBlue(image,p));
1661 *q=ScaleQuantumToChar(GetPixelAlpha(image,p));
1664 case OpacityQuantum:
1666 *q=ScaleQuantumToChar(GetPixelOpacity(image,p));
1671 if (image->colorspace == CMYKColorspace)
1672 *q=ScaleQuantumToChar(GetPixelBlack(image,p));
1677 *q=ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,p)));
1685 p+=(ptrdiff_t) GetPixelChannels(image);
1694 q=(
double *) stream_info->pixels;
1695 if (LocaleCompare(stream_info->map,
"BGR") == 0)
1697 p=GetAuthenticPixelQueue(image);
1698 if (p == (
const Quantum *) NULL)
1700 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1702 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1703 quantum_info->scale+quantum_info->minimum);
1704 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1705 quantum_info->scale+quantum_info->minimum);
1706 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1707 quantum_info->scale+quantum_info->minimum);
1708 p+=(ptrdiff_t) GetPixelChannels(image);
1712 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
1714 p=GetAuthenticPixelQueue(image);
1715 if (p == (
const Quantum *) NULL)
1717 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1719 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1720 quantum_info->scale+quantum_info->minimum);
1721 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1722 quantum_info->scale+quantum_info->minimum);
1723 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1724 quantum_info->scale+quantum_info->minimum);
1725 *q++=(double) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1726 quantum_info->scale+quantum_info->minimum);
1727 p+=(ptrdiff_t) GetPixelChannels(image);
1731 if (LocaleCompare(stream_info->map,
"BGRP") == 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) GetPixelBlue(image,p))*
1739 quantum_info->scale+quantum_info->minimum);
1740 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1741 quantum_info->scale+quantum_info->minimum);
1742 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1743 quantum_info->scale+quantum_info->minimum);
1745 p+=(ptrdiff_t) GetPixelChannels(image);
1749 if (LocaleCompare(stream_info->map,
"I") == 0)
1751 p=GetAuthenticPixelQueue(image);
1752 if (p == (
const Quantum *) NULL)
1754 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1756 *q++=(double) ((QuantumScale*(
double) GetPixelIntensity(image,p))*
1757 quantum_info->scale+quantum_info->minimum);
1758 p+=(ptrdiff_t) GetPixelChannels(image);
1762 if (LocaleCompare(stream_info->map,
"RGB") == 0)
1764 p=GetAuthenticPixelQueue(image);
1765 if (p == (
const Quantum *) NULL)
1767 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1769 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1770 quantum_info->scale+quantum_info->minimum);
1771 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1772 quantum_info->scale+quantum_info->minimum);
1773 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1774 quantum_info->scale+quantum_info->minimum);
1775 p+=(ptrdiff_t) GetPixelChannels(image);
1779 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
1781 p=GetAuthenticPixelQueue(image);
1782 if (p == (
const Quantum *) NULL)
1784 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1786 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1787 quantum_info->scale+quantum_info->minimum);
1788 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1789 quantum_info->scale+quantum_info->minimum);
1790 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1791 quantum_info->scale+quantum_info->minimum);
1792 *q++=(double) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1793 quantum_info->scale+quantum_info->minimum);
1794 p+=(ptrdiff_t) GetPixelChannels(image);
1798 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
1800 p=GetAuthenticPixelQueue(image);
1801 if (p == (
const Quantum *) NULL)
1803 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1805 *q++=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1806 quantum_info->scale+quantum_info->minimum);
1807 *q++=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1808 quantum_info->scale+quantum_info->minimum);
1809 *q++=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1810 quantum_info->scale+quantum_info->minimum);
1812 p+=(ptrdiff_t) GetPixelChannels(image);
1816 p=GetAuthenticPixelQueue(image);
1817 if (p == (
const Quantum *) NULL)
1819 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1821 for (i=0; i < (ssize_t) length; i++)
1824 switch (quantum_map[i])
1829 *q=(double) ((QuantumScale*(
double) GetPixelRed(image,p))*
1830 quantum_info->scale+quantum_info->minimum);
1834 case MagentaQuantum:
1836 *q=(double) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1837 quantum_info->scale+quantum_info->minimum);
1843 *q=(double) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1844 quantum_info->scale+quantum_info->minimum);
1849 *q=(double) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1850 quantum_info->scale+quantum_info->minimum);
1853 case OpacityQuantum:
1855 *q=(double) ((QuantumScale*(
double) GetPixelOpacity(image,p))*
1856 quantum_info->scale+quantum_info->minimum);
1861 if (image->colorspace == CMYKColorspace)
1862 *q=(double) ((QuantumScale*(
double) GetPixelBlack(image,p))*
1863 quantum_info->scale+quantum_info->minimum);
1868 *q=(double) ((QuantumScale*(
double) GetPixelIntensity(image,p))*
1869 quantum_info->scale+quantum_info->minimum);
1877 p+=(ptrdiff_t) GetPixelChannels(image);
1886 q=(
float *) stream_info->pixels;
1887 if (LocaleCompare(stream_info->map,
"BGR") == 0)
1889 p=GetAuthenticPixelQueue(image);
1890 if (p == (
const Quantum *) NULL)
1892 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1894 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1895 quantum_info->scale+quantum_info->minimum);
1896 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1897 quantum_info->scale+quantum_info->minimum);
1898 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1899 quantum_info->scale+quantum_info->minimum);
1900 p+=(ptrdiff_t) GetPixelChannels(image);
1904 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
1906 p=GetAuthenticPixelQueue(image);
1907 if (p == (
const Quantum *) NULL)
1909 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1911 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1912 quantum_info->scale+quantum_info->minimum);
1913 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1914 quantum_info->scale+quantum_info->minimum);
1915 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1916 quantum_info->scale+quantum_info->minimum);
1917 *q++=(float) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1918 quantum_info->scale+quantum_info->minimum);
1919 p+=(ptrdiff_t) GetPixelChannels(image);
1923 if (LocaleCompare(stream_info->map,
"BGRP") == 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) GetPixelBlue(image,p))*
1931 quantum_info->scale+quantum_info->minimum);
1932 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1933 quantum_info->scale+quantum_info->minimum);
1934 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1935 quantum_info->scale+quantum_info->minimum);
1937 p+=(ptrdiff_t) GetPixelChannels(image);
1941 if (LocaleCompare(stream_info->map,
"I") == 0)
1943 p=GetAuthenticPixelQueue(image);
1944 if (p == (
const Quantum *) NULL)
1946 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1948 *q++=(float) ((QuantumScale*(
double) GetPixelIntensity(image,p))*
1949 quantum_info->scale+quantum_info->minimum);
1950 p+=(ptrdiff_t) GetPixelChannels(image);
1954 if (LocaleCompare(stream_info->map,
"RGB") == 0)
1956 p=GetAuthenticPixelQueue(image);
1957 if (p == (
const Quantum *) NULL)
1959 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1961 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1962 quantum_info->scale+quantum_info->minimum);
1963 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1964 quantum_info->scale+quantum_info->minimum);
1965 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1966 quantum_info->scale+quantum_info->minimum);
1967 p+=(ptrdiff_t) GetPixelChannels(image);
1971 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
1973 p=GetAuthenticPixelQueue(image);
1974 if (p == (
const Quantum *) NULL)
1976 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1978 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1979 quantum_info->scale+quantum_info->minimum);
1980 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
1981 quantum_info->scale+quantum_info->minimum);
1982 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
1983 quantum_info->scale+quantum_info->minimum);
1984 *q++=(float) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
1985 quantum_info->scale+quantum_info->minimum);
1986 p+=(ptrdiff_t) GetPixelChannels(image);
1990 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
1992 p=GetAuthenticPixelQueue(image);
1993 if (p == (
const Quantum *) NULL)
1995 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
1997 *q++=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
1998 quantum_info->scale+quantum_info->minimum);
1999 *q++=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
2000 quantum_info->scale+quantum_info->minimum);
2001 *q++=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
2002 quantum_info->scale+quantum_info->minimum);
2004 p+=(ptrdiff_t) GetPixelChannels(image);
2008 p=GetAuthenticPixelQueue(image);
2009 if (p == (
const Quantum *) NULL)
2011 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2013 for (i=0; i < (ssize_t) length; i++)
2016 switch (quantum_map[i])
2021 *q=(float) ((QuantumScale*(
double) GetPixelRed(image,p))*
2022 quantum_info->scale+quantum_info->minimum);
2026 case MagentaQuantum:
2028 *q=(float) ((QuantumScale*(
double) GetPixelGreen(image,p))*
2029 quantum_info->scale+quantum_info->minimum);
2035 *q=(float) ((QuantumScale*(
double) GetPixelBlue(image,p))*
2036 quantum_info->scale+quantum_info->minimum);
2041 *q=(float) ((QuantumScale*(
double) GetPixelAlpha(image,p))*
2042 quantum_info->scale+quantum_info->minimum);
2045 case OpacityQuantum:
2047 *q=(float) ((QuantumScale*(
double) GetPixelOpacity(image,p))*
2048 quantum_info->scale+quantum_info->minimum);
2053 if (image->colorspace == CMYKColorspace)
2054 *q=(float) ((QuantumScale*(
double) GetPixelBlack(image,p))*
2055 quantum_info->scale+quantum_info->minimum);
2060 *q=(float) ((QuantumScale*(
double) GetPixelIntensity(image,p))*
2061 quantum_info->scale+quantum_info->minimum);
2069 p+=(ptrdiff_t) GetPixelChannels(image);
2078 q=(
unsigned int *) stream_info->pixels;
2079 if (LocaleCompare(stream_info->map,
"BGR") == 0)
2081 p=GetAuthenticPixelQueue(image);
2082 if (p == (
const Quantum *) NULL)
2084 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2086 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2087 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2088 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2089 p+=(ptrdiff_t) GetPixelChannels(image);
2093 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
2095 p=GetAuthenticPixelQueue(image);
2096 if (p == (
const Quantum *) NULL)
2098 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2100 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2101 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2102 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2103 *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
2104 p+=(ptrdiff_t) GetPixelChannels(image);
2108 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
2110 p=GetAuthenticPixelQueue(image);
2111 if (p == (
const Quantum *) NULL)
2113 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2115 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2116 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2117 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2119 p+=(ptrdiff_t) GetPixelChannels(image);
2123 if (LocaleCompare(stream_info->map,
"I") == 0)
2125 p=GetAuthenticPixelQueue(image);
2126 if (p == (
const Quantum *) NULL)
2128 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2130 *q++=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
2131 p+=(ptrdiff_t) GetPixelChannels(image);
2135 if (LocaleCompare(stream_info->map,
"RGB") == 0)
2137 p=GetAuthenticPixelQueue(image);
2138 if (p == (
const Quantum *) NULL)
2140 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2142 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2143 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2144 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2145 p+=(ptrdiff_t) GetPixelChannels(image);
2149 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
2151 p=GetAuthenticPixelQueue(image);
2152 if (p == (
const Quantum *) NULL)
2154 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2156 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2157 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2158 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2159 *q++=ScaleQuantumToLong(GetPixelAlpha(image,p));
2160 p+=(ptrdiff_t) GetPixelChannels(image);
2164 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
2166 p=GetAuthenticPixelQueue(image);
2167 if (p == (
const Quantum *) NULL)
2169 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2171 *q++=ScaleQuantumToLong(GetPixelRed(image,p));
2172 *q++=ScaleQuantumToLong(GetPixelGreen(image,p));
2173 *q++=ScaleQuantumToLong(GetPixelBlue(image,p));
2175 p+=(ptrdiff_t) GetPixelChannels(image);
2179 p=GetAuthenticPixelQueue(image);
2180 if (p == (
const Quantum *) NULL)
2182 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2184 for (i=0; i < (ssize_t) length; i++)
2187 switch (quantum_map[i])
2192 *q=ScaleQuantumToLong(GetPixelRed(image,p));
2196 case MagentaQuantum:
2198 *q=ScaleQuantumToLong(GetPixelGreen(image,p));
2204 *q=ScaleQuantumToLong(GetPixelBlue(image,p));
2209 *q=ScaleQuantumToLong(GetPixelAlpha(image,p));
2212 case OpacityQuantum:
2214 *q=ScaleQuantumToLong(GetPixelOpacity(image,p));
2219 if (image->colorspace == CMYKColorspace)
2220 *q=ScaleQuantumToLong(GetPixelBlack(image,p));
2225 *q=ScaleQuantumToLong(ClampToQuantum(GetPixelIntensity(image,p)));
2233 p+=(ptrdiff_t) GetPixelChannels(image);
2242 q=(MagickSizeType *) stream_info->pixels;
2243 if (LocaleCompare(stream_info->map,
"BGR") == 0)
2245 p=GetAuthenticPixelQueue(image);
2246 if (p == (
const Quantum *) NULL)
2248 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2250 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2251 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2252 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2253 p+=(ptrdiff_t) GetPixelChannels(image);
2257 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
2259 p=GetAuthenticPixelQueue(image);
2260 if (p == (
const Quantum *) NULL)
2262 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2264 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2265 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2266 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2267 *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
2268 p+=(ptrdiff_t) GetPixelChannels(image);
2272 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
2274 p=GetAuthenticPixelQueue(image);
2275 if (p == (
const Quantum *) NULL)
2277 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2279 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2280 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2281 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2283 p+=(ptrdiff_t) GetPixelChannels(image);
2287 if (LocaleCompare(stream_info->map,
"I") == 0)
2289 p=GetAuthenticPixelQueue(image);
2290 if (p == (
const Quantum *) NULL)
2292 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2294 *q++=ScaleQuantumToLongLong(ClampToQuantum(
2295 GetPixelIntensity(image,p)));
2296 p+=(ptrdiff_t) GetPixelChannels(image);
2300 if (LocaleCompare(stream_info->map,
"RGB") == 0)
2302 p=GetAuthenticPixelQueue(image);
2303 if (p == (
const Quantum *) NULL)
2305 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2307 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2308 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2309 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2310 p+=(ptrdiff_t) GetPixelChannels(image);
2314 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
2316 p=GetAuthenticPixelQueue(image);
2317 if (p == (
const Quantum *) NULL)
2319 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2321 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2322 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2323 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2324 *q++=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
2325 p+=(ptrdiff_t) GetPixelChannels(image);
2329 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
2331 p=GetAuthenticPixelQueue(image);
2332 if (p == (
const Quantum *) NULL)
2334 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2336 *q++=ScaleQuantumToLongLong(GetPixelRed(image,p));
2337 *q++=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2338 *q++=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2340 p+=(ptrdiff_t) GetPixelChannels(image);
2344 p=GetAuthenticPixelQueue(image);
2345 if (p == (
const Quantum *) NULL)
2347 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2349 for (i=0; i < (ssize_t) length; i++)
2352 switch (quantum_map[i])
2357 *q=ScaleQuantumToLongLong(GetPixelRed(image,p));
2361 case MagentaQuantum:
2363 *q=ScaleQuantumToLongLong(GetPixelGreen(image,p));
2369 *q=ScaleQuantumToLongLong(GetPixelBlue(image,p));
2374 *q=ScaleQuantumToLongLong(GetPixelAlpha(image,p));
2377 case OpacityQuantum:
2379 *q=ScaleQuantumToLongLong(GetPixelOpacity(image,p));
2384 if (image->colorspace == CMYKColorspace)
2385 *q=ScaleQuantumToLongLong(GetPixelBlack(image,p));
2390 *q=ScaleQuantumToLongLong(ClampToQuantum(
2391 GetPixelIntensity(image,p)));
2399 p+=(ptrdiff_t) GetPixelChannels(image);
2408 q=(Quantum *) stream_info->pixels;
2409 if (LocaleCompare(stream_info->map,
"BGR") == 0)
2411 p=GetAuthenticPixelQueue(image);
2412 if (p == (
const Quantum *) NULL)
2414 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2416 *q++=GetPixelBlue(image,p);
2417 *q++=GetPixelGreen(image,p);
2418 *q++=GetPixelRed(image,p);
2419 p+=(ptrdiff_t) GetPixelChannels(image);
2423 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
2425 p=GetAuthenticPixelQueue(image);
2426 if (p == (
const Quantum *) NULL)
2428 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2430 *q++=GetPixelBlue(image,p);
2431 *q++=GetPixelGreen(image,p);
2432 *q++=GetPixelRed(image,p);
2433 *q++=GetPixelAlpha(image,p);
2434 p+=(ptrdiff_t) GetPixelChannels(image);
2438 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
2440 p=GetAuthenticPixelQueue(image);
2441 if (p == (
const Quantum *) NULL)
2443 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2445 *q++=GetPixelBlue(image,p);
2446 *q++=GetPixelGreen(image,p);
2447 *q++=GetPixelRed(image,p);
2449 p+=(ptrdiff_t) GetPixelChannels(image);
2453 if (LocaleCompare(stream_info->map,
"I") == 0)
2455 p=GetAuthenticPixelQueue(image);
2456 if (p == (
const Quantum *) NULL)
2458 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2460 *q++=ClampToQuantum(GetPixelIntensity(image,p));
2461 p+=(ptrdiff_t) GetPixelChannels(image);
2465 if (LocaleCompare(stream_info->map,
"RGB") == 0)
2467 p=GetAuthenticPixelQueue(image);
2468 if (p == (
const Quantum *) NULL)
2470 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2472 *q++=GetPixelRed(image,p);
2473 *q++=GetPixelGreen(image,p);
2474 *q++=GetPixelBlue(image,p);
2475 p+=(ptrdiff_t) GetPixelChannels(image);
2479 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
2481 p=GetAuthenticPixelQueue(image);
2482 if (p == (
const Quantum *) NULL)
2484 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2486 *q++=GetPixelRed(image,p);
2487 *q++=GetPixelGreen(image,p);
2488 *q++=GetPixelBlue(image,p);
2489 *q++=GetPixelAlpha(image,p);
2490 p+=(ptrdiff_t) GetPixelChannels(image);
2494 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
2496 p=GetAuthenticPixelQueue(image);
2497 if (p == (
const Quantum *) NULL)
2499 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2501 *q++=GetPixelRed(image,p);
2502 *q++=GetPixelGreen(image,p);
2503 *q++=GetPixelBlue(image,p);
2505 p+=(ptrdiff_t) GetPixelChannels(image);
2509 p=GetAuthenticPixelQueue(image);
2510 if (p == (
const Quantum *) NULL)
2512 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2514 for (i=0; i < (ssize_t) length; i++)
2517 switch (quantum_map[i])
2522 *q=GetPixelRed(image,p);
2526 case MagentaQuantum:
2528 *q=GetPixelGreen(image,p);
2534 *q=GetPixelBlue(image,p);
2539 *q=GetPixelAlpha(image,p);
2542 case OpacityQuantum:
2544 *q=GetPixelOpacity(image,p);
2549 if (image->colorspace == CMYKColorspace)
2550 *q=GetPixelBlack(image,p);
2555 *q=ClampToQuantum(GetPixelIntensity(image,p));
2563 p+=(ptrdiff_t) GetPixelChannels(image);
2572 q=(
unsigned short *) stream_info->pixels;
2573 if (LocaleCompare(stream_info->map,
"BGR") == 0)
2575 p=GetAuthenticPixelQueue(image);
2576 if (p == (
const Quantum *) NULL)
2578 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2580 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2581 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2582 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2583 p+=(ptrdiff_t) GetPixelChannels(image);
2587 if (LocaleCompare(stream_info->map,
"BGRA") == 0)
2589 p=GetAuthenticPixelQueue(image);
2590 if (p == (
const Quantum *) NULL)
2592 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2594 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2595 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2596 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2597 *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
2598 p+=(ptrdiff_t) GetPixelChannels(image);
2602 if (LocaleCompare(stream_info->map,
"BGRP") == 0)
2604 p=GetAuthenticPixelQueue(image);
2605 if (p == (
const Quantum *) NULL)
2607 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2609 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2610 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2611 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2613 p+=(ptrdiff_t) GetPixelChannels(image);
2617 if (LocaleCompare(stream_info->map,
"I") == 0)
2619 p=GetAuthenticPixelQueue(image);
2620 if (p == (
const Quantum *) NULL)
2622 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2624 *q++=ScaleQuantumToShort(ClampToQuantum(
2625 GetPixelIntensity(image,p)));
2626 p+=(ptrdiff_t) GetPixelChannels(image);
2630 if (LocaleCompare(stream_info->map,
"RGB") == 0)
2632 p=GetAuthenticPixelQueue(image);
2633 if (p == (
const Quantum *) NULL)
2635 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2637 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2638 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2639 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2640 p+=(ptrdiff_t) GetPixelChannels(image);
2644 if (LocaleCompare(stream_info->map,
"RGBA") == 0)
2646 p=GetAuthenticPixelQueue(image);
2647 if (p == (
const Quantum *) NULL)
2649 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2651 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2652 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2653 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2654 *q++=ScaleQuantumToShort(GetPixelAlpha(image,p));
2655 p+=(ptrdiff_t) GetPixelChannels(image);
2659 if (LocaleCompare(stream_info->map,
"RGBP") == 0)
2661 p=GetAuthenticPixelQueue(image);
2662 if (p == (
const Quantum *) NULL)
2664 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2666 *q++=ScaleQuantumToShort(GetPixelRed(image,p));
2667 *q++=ScaleQuantumToShort(GetPixelGreen(image,p));
2668 *q++=ScaleQuantumToShort(GetPixelBlue(image,p));
2670 p+=(ptrdiff_t) GetPixelChannels(image);
2674 p=GetAuthenticPixelQueue(image);
2675 if (p == (
const Quantum *) NULL)
2677 for (x=0; x < (ssize_t) GetImageExtent(image); x++)
2679 for (i=0; i < (ssize_t) length; i++)
2682 switch (quantum_map[i])
2687 *q=ScaleQuantumToShort(GetPixelRed(image,p));
2691 case MagentaQuantum:
2693 *q=ScaleQuantumToShort(GetPixelGreen(image,p));
2699 *q=ScaleQuantumToShort(GetPixelBlue(image,p));
2704 *q=ScaleQuantumToShort(GetPixelAlpha(image,p));
2707 case OpacityQuantum:
2709 *q=ScaleQuantumToShort(GetPixelOpacity(image,p));
2714 if (image->colorspace == CMYKColorspace)
2715 *q=ScaleQuantumToShort(GetPixelBlack(image,p));
2720 *q=ScaleQuantumToShort(ClampToQuantum(
2721 GetPixelIntensity(image,p)));
2729 p+=(ptrdiff_t) GetPixelChannels(image);
2735 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
2736 (void) ThrowMagickException(exception,GetMagickModule(),OptionError,
2737 "UnrecognizedPixelMap",
"`%s'",stream_info->map);
2741 quantum_map=(QuantumType *) RelinquishMagickMemory(quantum_map);
2771static MagickBooleanType SyncAuthenticPixelsStream(
Image *image,
2783 assert(image != (
Image *) NULL);
2784 assert(image->signature == MagickCoreSignature);
2785 if (IsEventLogging() != MagickFalse)
2786 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",image->filename);
2788 assert(cache_info->signature == MagickCoreSignature);
2789 stream_handler=GetBlobStreamHandler(image);
2790 if (stream_handler == (StreamHandler) NULL)
2792 (void) ThrowMagickException(exception,GetMagickModule(),StreamError,
2793 "NoStreamHandlerIsDefined",
"`%s'",image->filename);
2794 return(MagickFalse);
2796 length=stream_handler(image,cache_info->pixels,(
size_t) cache_info->columns);
2797 return(length == cache_info->columns ? MagickTrue : MagickFalse);
2828MagickExport MagickBooleanType WriteStream(
const ImageInfo *image_info,
2837 assert(image_info != (
ImageInfo *) NULL);
2838 assert(image_info->signature == MagickCoreSignature);
2839 if (IsEventLogging() != MagickFalse)
2840 (void) LogMagickEvent(TraceEvent,GetMagickModule(),
"%s",
2841 image_info->filename);
2842 assert(image != (
Image *) NULL);
2843 assert(image->signature == MagickCoreSignature);
2844 write_info=CloneImageInfo(image_info);
2845 *write_info->magick=
'\0';
2846 write_info->stream=stream;
2847 status=WriteImage(write_info,image,exception);
2848 write_info=DestroyImageInfo(write_info);