From: cristy Date: Fri, 8 Feb 2013 22:42:46 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~4275 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f14602363f63e18dddb6948dcce6dcb530ca2af4;p=imagemagick --- diff --git a/MagickCore/cache.c b/MagickCore/cache.c index ad414f9b8..5eb197c91 100644 --- a/MagickCore/cache.c +++ b/MagickCore/cache.c @@ -2798,11 +2798,22 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, } for (v=0; v < (ssize_t) rows; v++) { + ssize_t + y_offset; + + y_offset=y+v; + if ((virtual_pixel_method == EdgeVirtualPixelMethod) || + (virtual_pixel_method == UndefinedVirtualPixelMethod)) + y_offset=EdgeY(y_offset,cache_info->rows); for (u=0; u < (ssize_t) columns; u+=length) { - length=(MagickSizeType) MagickMin(cache_info->columns-(x+u),columns-u); - if ((((x+u) < 0) || ((x+u) >= (ssize_t) cache_info->columns)) || - (((y+v) < 0) || ((y+v) >= (ssize_t) cache_info->rows)) || + ssize_t + x_offset; + + x_offset=x+u; + length=(MagickSizeType) MagickMin(cache_info->columns-x_offset,columns-u); + if (((x_offset < 0) || (x_offset >= (ssize_t) cache_info->columns)) || + ((y_offset < 0) || (y_offset >= (ssize_t) cache_info->rows)) || (length == 0)) { MagickModulo @@ -2815,11 +2826,13 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, length=(MagickSizeType) 1; switch (virtual_pixel_method) { + case EdgeVirtualPixelMethod: default: { p=GetVirtualPixelsFromNexus(image,virtual_pixel_method, - EdgeX(x+u,cache_info->columns),EdgeY(y+v,cache_info->rows), - 1UL,1UL,*virtual_nexus,exception); + EdgeX(x_offset,cache_info->columns), + EdgeY(y_offset,cache_info->rows),1UL,1UL,*virtual_nexus, + exception); r=GetVirtualMetacontentFromNexus(cache_info,*virtual_nexus); break; } @@ -2837,15 +2850,16 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, case DitherVirtualPixelMethod: { p=GetVirtualPixelsFromNexus(image,virtual_pixel_method, - DitherX(x+u,cache_info->columns),DitherY(y+v,cache_info->rows), - 1UL,1UL,*virtual_nexus,exception); + DitherX(x_offset,cache_info->columns), + DitherY(y_offset,cache_info->rows),1UL,1UL,*virtual_nexus, + exception); r=GetVirtualMetacontentFromNexus(cache_info,*virtual_nexus); break; } case TileVirtualPixelMethod: { - x_modulo=VirtualPixelModulo(x+u,cache_info->columns); - y_modulo=VirtualPixelModulo(y+v,cache_info->rows); + x_modulo=VirtualPixelModulo(x_offset,cache_info->columns); + y_modulo=VirtualPixelModulo(y_offset,cache_info->rows); p=GetVirtualPixelsFromNexus(image,virtual_pixel_method, x_modulo.remainder,y_modulo.remainder,1UL,1UL,*virtual_nexus, exception); @@ -2854,11 +2868,11 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, } case MirrorVirtualPixelMethod: { - x_modulo=VirtualPixelModulo(x+u,cache_info->columns); + x_modulo=VirtualPixelModulo(x_offset,cache_info->columns); if ((x_modulo.quotient & 0x01) == 1L) x_modulo.remainder=(ssize_t) cache_info->columns- x_modulo.remainder-1L; - y_modulo=VirtualPixelModulo(y+v,cache_info->rows); + y_modulo=VirtualPixelModulo(y_offset,cache_info->rows); if ((y_modulo.quotient & 0x01) == 1L) y_modulo.remainder=(ssize_t) cache_info->rows- y_modulo.remainder-1L; @@ -2870,18 +2884,18 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, } case HorizontalTileEdgeVirtualPixelMethod: { - x_modulo=VirtualPixelModulo(x+u,cache_info->columns); + x_modulo=VirtualPixelModulo(x_offset,cache_info->columns); p=GetVirtualPixelsFromNexus(image,virtual_pixel_method, - x_modulo.remainder,EdgeY(y+v,cache_info->rows),1UL,1UL, + x_modulo.remainder,EdgeY(y_offset,cache_info->rows),1UL,1UL, *virtual_nexus,exception); r=GetVirtualMetacontentFromNexus(cache_info,*virtual_nexus); break; } case VerticalTileEdgeVirtualPixelMethod: { - y_modulo=VirtualPixelModulo(y+v,cache_info->rows); + y_modulo=VirtualPixelModulo(y_offset,cache_info->rows); p=GetVirtualPixelsFromNexus(image,virtual_pixel_method, - EdgeX(x+u,cache_info->columns),y_modulo.remainder,1UL,1UL, + EdgeX(x_offset,cache_info->columns),y_modulo.remainder,1UL,1UL, *virtual_nexus,exception); r=GetVirtualMetacontentFromNexus(cache_info,*virtual_nexus); break; @@ -2897,11 +2911,10 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, r=virtual_metacontent; break; } - case EdgeVirtualPixelMethod: case CheckerTileVirtualPixelMethod: { - x_modulo=VirtualPixelModulo(x+u,cache_info->columns); - y_modulo=VirtualPixelModulo(y+v,cache_info->rows); + x_modulo=VirtualPixelModulo(x_offset,cache_info->columns); + y_modulo=VirtualPixelModulo(y_offset,cache_info->rows); if (((x_modulo.quotient ^ y_modulo.quotient) & 0x01) != 0L) { p=virtual_pixel; @@ -2916,14 +2929,14 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, } case HorizontalTileVirtualPixelMethod: { - if (((y+v) < 0) || ((y+v) >= (ssize_t) cache_info->rows)) + if ((y_offset < 0) || (y_offset >= (ssize_t) cache_info->rows)) { p=virtual_pixel; r=virtual_metacontent; break; } - x_modulo=VirtualPixelModulo(x+u,cache_info->columns); - y_modulo=VirtualPixelModulo(y+v,cache_info->rows); + x_modulo=VirtualPixelModulo(x_offset,cache_info->columns); + y_modulo=VirtualPixelModulo(y_offset,cache_info->rows); p=GetVirtualPixelsFromNexus(image,virtual_pixel_method, x_modulo.remainder,y_modulo.remainder,1UL,1UL,*virtual_nexus, exception); @@ -2932,14 +2945,14 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, } case VerticalTileVirtualPixelMethod: { - if (((x+u) < 0) || ((x+u) >= (ssize_t) cache_info->columns)) + if ((x_offset < 0) || (x_offset >= (ssize_t) cache_info->columns)) { p=virtual_pixel; r=virtual_metacontent; break; } - x_modulo=VirtualPixelModulo(x+u,cache_info->columns); - y_modulo=VirtualPixelModulo(y+v,cache_info->rows); + x_modulo=VirtualPixelModulo(x_offset,cache_info->columns); + y_modulo=VirtualPixelModulo(y_offset,cache_info->rows); p=GetVirtualPixelsFromNexus(image,virtual_pixel_method, x_modulo.remainder,y_modulo.remainder,1UL,1UL,*virtual_nexus, exception); @@ -2962,8 +2975,8 @@ MagickPrivate const Quantum *GetVirtualPixelsFromNexus(const Image *image, /* Transfer a run of pixels. */ - p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,x+u,y+v,(size_t) - length,1UL,*virtual_nexus,exception); + p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,x_offset,y_offset, + (size_t) length,1UL,*virtual_nexus,exception); if (p == (const Quantum *) NULL) break; r=GetVirtualMetacontentFromNexus(cache_info,*virtual_nexus);