diff --git a/MagickCore/effect.c b/MagickCore/effect.c
index 302c44f..f8129b3 100644
--- a/MagickCore/effect.c
+++ b/MagickCore/effect.c
@@ -1426,7 +1426,7 @@
#define KuwaharaImageTag "Kuwahara/Image"
CacheView
- *image_view,
+ *image_view[4],
*kuwahara_view;
Image
@@ -1438,6 +1438,9 @@
MagickOffsetType
progress;
+ register ssize_t
+ i;
+
size_t
width;
@@ -1468,7 +1471,8 @@
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 @@
}
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 @@
}
}
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);