From: cristy Date: Mon, 29 Sep 2014 20:57:24 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~1962 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bc8db7775d37c67eb358dce903d2ae44c9b950b6;p=imagemagick --- diff --git a/MagickCore/effect.c b/MagickCore/effect.c index 302c44fd7..f8129b390 100644 --- a/MagickCore/effect.c +++ b/MagickCore/effect.c @@ -1426,7 +1426,7 @@ MagickExport Image *KuwaharaImage(const Image *image,const double radius, #define KuwaharaImageTag "Kuwahara/Image" CacheView - *image_view, + *image_view[4], *kuwahara_view; Image @@ -1438,6 +1438,9 @@ MagickExport Image *KuwaharaImage(const Image *image,const double radius, MagickOffsetType progress; + register ssize_t + i; + size_t width; @@ -1468,7 +1471,8 @@ MagickExport Image *KuwaharaImage(const Image *image,const double radius, status=MagickTrue; progress=0; width=GetOptimalKernelWidth1D(radius,sigma); - image_view=AcquireVirtualCacheView(image,exception); + for (i=0; i < 4; i++) + image_view[i]=AcquireVirtualCacheView(image,exception); kuwahara_view=AcquireAuthenticCacheView(kuwahara_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(static,4) shared(progress,status) \ @@ -1493,6 +1497,54 @@ MagickExport Image *KuwaharaImage(const Image *image,const double radius, } for (x=0; x < (ssize_t) image->columns; x++) { + const Quantum + *restrict p[4]; + + for (i=0; i < 4; i++) + { + ssize_t + x_offset, + y_offset; + + x_offset=x; + y_offset=y; + switch (i) + { + case 0: + { + x_offset=x-(ssize_t) width/2L; + y_offset=y-(ssize_t) width/2L; + break; + } + case 1: + { + x_offset=x; + y_offset=y-(ssize_t) width/2L; + break; + } + case 2: + { + x_offset=x-(ssize_t) width/2L; + y_offset=y; + break; + } + case 3: + { + x_offset=x; + y_offset=y; + break; + } + } + p[i]=GetCacheViewVirtualPixels(image_view[i],x_offset,y_offset, + width,width,exception); + if (p[i] == (const Quantum *) NULL) + break; + } + if (i < 4) + { + status=MagickFalse; + break; + } q+=GetPixelChannels(kuwahara_image); } if (SyncCacheViewAuthenticPixels(kuwahara_view,exception) == MagickFalse) @@ -1511,7 +1563,8 @@ MagickExport Image *KuwaharaImage(const Image *image,const double radius, } } kuwahara_view=DestroyCacheView(kuwahara_view); - image_view=DestroyCacheView(image_view); + for (i=0; i < 4; i++) + image_view[i]=DestroyCacheView(image_view[i]); if (status == MagickFalse) kuwahara_image=DestroyImage(kuwahara_image); return(kuwahara_image);