ssize_t
y;
- /*
- Clone pixels.
- */
assert(cache_info != (CacheInfo *) NULL);
assert(clone_info != (CacheInfo *) NULL);
assert(exception != (ExceptionInfo *) NULL);
if (cache_info->type == PingCache)
return(MagickTrue);
+ length=cache_info->number_channels*sizeof(*cache_info->channel_map);
+ if (((cache_info->type == MemoryCache) || (cache_info->type == MapCache)) &&
+ ((clone_info->type == MemoryCache) || (clone_info->type == MapCache)) &&
+ (cache_info->columns == clone_info->columns) &&
+ (cache_info->rows == clone_info->rows) &&
+ (cache_info->number_channels == clone_info->number_channels) &&
+ (memcmp(cache_info->channel_map,clone_info->channel_map,length) == 0))
+ {
+ /*
+ Identical pixel cache morphology.
+ */
+ (void) memcpy(clone_info->pixels,cache_info->pixels,cache_info->columns*
+ cache_info->number_channels*cache_info->rows*
+ sizeof(*cache_info->pixels));
+ if ((cache_info->metacontent_extent != 0) &&
+ (clone_info->metacontent_extent != 0) &&
+ (cache_info->metacontent_extent == clone_info->metacontent_extent))
+ (void) memcpy(clone_info->metacontent,cache_info->metacontent,
+ cache_info->columns*cache_info->rows*
+ clone_info->metacontent_extent*sizeof(*cache_info->metacontent));
+ return(MagickTrue);
+ }
+ /*
+ Irregular pixel cache morphology.
+ */
cache_nexus=AcquirePixelCacheNexus(1);
clone_nexus=AcquirePixelCacheNexus(1);
if ((cache_nexus == (NexusInfo **) NULL) ||