From 36601075aa5592898c1e7348eddfca3105707bf9 Mon Sep 17 00:00:00 2001 From: cristy Date: Tue, 22 Jan 2013 00:36:18 +0000 Subject: [PATCH] --- MagickCore/cache.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/MagickCore/cache.c b/MagickCore/cache.c index a60322488..1b983d103 100644 --- a/MagickCore/cache.c +++ b/MagickCore/cache.c @@ -521,14 +521,36 @@ static MagickBooleanType ClonePixelCacheRepository(CacheInfo *clone_info, 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) || -- 2.40.0