]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/effect.c
(no commit message)
[imagemagick] / MagickCore / effect.c
index ff3b3c7aa87e55b9a3f028c062ffc098326b2be7..26492ee9bef0116ab0e27f2608ad33b5d99db8f9 100644 (file)
@@ -379,7 +379,7 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,
           continue;
         if ((blur_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[center+i];
+            SetPixelChannel(blur_image,channel,p[center+i],q);
             continue;
           }
         k=kernel[j];
@@ -402,7 +402,7 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,
               }
             }
             gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-            q[channel]=ClampToQuantum(gamma*pixel);
+            SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
             continue;
           }
         /*
@@ -420,7 +420,7 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,
           }
         }
         gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-        q[channel]=ClampToQuantum(gamma*pixel);
+        SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
       }
       q+=GetPixelChannels(blur_image);
       r+=GetPixelChannels(edge_image);
@@ -701,7 +701,7 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius,
           continue;
         if ((sharp_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[center+i];
+            SetPixelChannel(sharp_image,channel,p[center+i],q);
             continue;
           }
         k=kernel[j];
@@ -724,7 +724,7 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius,
               }
             }
             gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-            q[channel]=ClampToQuantum(gamma*pixel);
+            SetPixelChannel(sharp_image,channel,ClampToQuantum(gamma*pixel),q);
             continue;
           }
         /*
@@ -742,7 +742,7 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius,
           }
         }
         gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-        q[channel]=ClampToQuantum(gamma*pixel);
+        SetPixelChannel(sharp_image,channel,ClampToQuantum(gamma*pixel),q);
       }
       q+=GetPixelChannels(sharp_image);
       r+=GetPixelChannels(edge_image);
@@ -1002,7 +1002,7 @@ MagickExport Image *BlurImage(const Image *image,const double radius,
           continue;
         if ((blur_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[center+i];
+            SetPixelChannel(blur_image,channel,p[center+i],q);
             continue;
           }
         k=kernel;
@@ -1019,7 +1019,7 @@ MagickExport Image *BlurImage(const Image *image,const double radius,
               k++;
               pixels+=GetPixelChannels(image);
             }
-            q[channel]=ClampToQuantum(pixel);
+            SetPixelChannel(blur_image,channel,ClampToQuantum(pixel),q);
             continue;
           }
         /*
@@ -1035,7 +1035,7 @@ MagickExport Image *BlurImage(const Image *image,const double radius,
           pixels+=GetPixelChannels(image);
         }
         gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-        q[channel]=ClampToQuantum(gamma*pixel);
+        SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(blur_image);
@@ -1123,7 +1123,7 @@ MagickExport Image *BlurImage(const Image *image,const double radius,
           continue;
         if ((blur_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[center+i];
+            SetPixelChannel(blur_image,channel,p[center+i],q);
             continue;
           }
         k=kernel;
@@ -1140,7 +1140,7 @@ MagickExport Image *BlurImage(const Image *image,const double radius,
               k++;
               pixels+=GetPixelChannels(blur_image);
             }
-            q[channel]=ClampToQuantum(pixel);
+            SetPixelChannel(blur_image,channel,ClampToQuantum(pixel),q);
             continue;
           }
         /*
@@ -1157,7 +1157,7 @@ MagickExport Image *BlurImage(const Image *image,const double radius,
           pixels+=GetPixelChannels(blur_image);
         }
         gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-        q[channel]=ClampToQuantum(gamma*pixel);
+        SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
       }
       p+=GetPixelChannels(blur_image);
       q+=GetPixelChannels(blur_image);
@@ -1290,6 +1290,9 @@ MagickExport Image *ConvolveImage(const Image *image,
       }
       message=DestroyString(message);
     }
+  status=AccelerateConvolveImage(image,kernel_info,convolve_image,exception);
+  if (status == MagickTrue)
+    return(convolve_image);
   /*
     Convolve image.
   */
@@ -1364,7 +1367,7 @@ MagickExport Image *ConvolveImage(const Image *image,
           continue;
         if ((convolve_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[center+i];
+            SetPixelChannel(convolve_image,channel,p[center+i],q);
             continue;
           }
         k=kernel_info->values;
@@ -1385,7 +1388,7 @@ MagickExport Image *ConvolveImage(const Image *image,
               }
               pixels+=image->columns*GetPixelChannels(image);
             }
-            q[channel]=ClampToQuantum(pixel);
+            SetPixelChannel(convolve_image,channel,ClampToQuantum(pixel),q);
             continue;
           }
         /*
@@ -1405,7 +1408,7 @@ MagickExport Image *ConvolveImage(const Image *image,
           pixels+=image->columns*GetPixelChannels(image);
         }
         gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-        q[channel]=ClampToQuantum(gamma*pixel);
+        SetPixelChannel(convolve_image,channel,ClampToQuantum(gamma*pixel),q);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(convolve_image);
@@ -1707,7 +1710,7 @@ MagickExport Image *DespeckleImage(const Image *image,ExceptionInfo *exception)
       j++;
       for (x=0; x < (ssize_t) image->columns; x++)
       {
-        q[channel]=pixel[j++];
+        SetPixelChannel(despeckle_image,channel,pixel[j++],q);
         q+=GetPixelChannels(despeckle_image);
       }
       sync=SyncCacheViewAuthenticPixels(despeckle_view,exception);
@@ -1817,7 +1820,7 @@ MagickExport Image *EdgeImage(const Image *image,const double radius,
     }
   }
   kernel_info->values[i/2]=(double) (width*width-1.0);
-  kernel_info->bias=image->bias;
+  kernel_info->bias=image->bias;   /* FUTURE: User bias on a edge image? */
   edge_image=ConvolveImage(image,kernel_info,exception);
   kernel_info=DestroyKernelInfo(kernel_info);
   return(edge_image);
@@ -1912,7 +1915,7 @@ MagickExport Image *EmbossImage(const Image *image,const double radius,
     }
     k--;
   }
-  kernel_info->bias=image->bias;
+  kernel_info->bias=image->bias;  /* FUTURE: user bias on an edge image */
   emboss_image=ConvolveImage(image,kernel_info,exception);
   kernel_info=DestroyKernelInfo(kernel_info);
   if (emboss_image != (Image *) NULL)
@@ -1988,7 +1991,7 @@ MagickExport Image *GaussianBlurImage(const Image *image,const double radius,
   (void) ResetMagickMemory(kernel_info,0,sizeof(*kernel_info));
   kernel_info->width=width;
   kernel_info->height=width;
-  kernel_info->bias=bias;
+  kernel_info->bias=bias;  /* FUTURE: user bias on Gaussian Blur! non-sense */
   kernel_info->signature=MagickSignature;
   kernel_info->values=(double *) AcquireAlignedMemory(kernel_info->width,
     kernel_info->width*sizeof(*kernel_info->values));
@@ -2221,7 +2224,7 @@ MagickExport Image *MotionBlurImage(const Image *image,const double radius,
           continue;
         if ((blur_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[i];
+            SetPixelChannel(blur_image,channel,p[i],q);
             continue;
           }
         k=kernel;
@@ -2240,7 +2243,7 @@ MagickExport Image *MotionBlurImage(const Image *image,const double radius,
               pixel+=(*k)*r[i];
               k++;
             }
-            q[channel]=ClampToQuantum(pixel);
+            SetPixelChannel(blur_image,channel,ClampToQuantum(pixel),q);
             continue;
           }
         alpha=0.0;
@@ -2260,7 +2263,7 @@ MagickExport Image *MotionBlurImage(const Image *image,const double radius,
           k++;
         }
         gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-        q[channel]=ClampToQuantum(gamma*pixel);
+        SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(blur_image);
@@ -2398,10 +2401,11 @@ MagickExport Image *PreviewImage(const Image *image,const PreviewType preview,
       break;
     (void) SetImageProgressMonitor(thumbnail,(MagickProgressMonitor) NULL,
       (void *) NULL);
-    (void) SetImageProperty(thumbnail,"label",DefaultTileLabel);
+    (void) SetImageProperty(thumbnail,"label",DefaultTileLabel,exception);
     if (i == (NumberTiles/2))
       {
-        (void) QueryColorDatabase("#dfdfdf",&thumbnail->matte_color,exception);
+        (void) QueryColorCompliance("#dfdfdf",AllCompliance,
+          &thumbnail->matte_color,exception);
         AppendImageToList(&images,thumbnail);
         continue;
       }
@@ -2591,6 +2595,7 @@ MagickExport Image *PreviewImage(const Image *image,const PreviewType preview,
       }
       case SharpenPreview:
       {
+        /* FUTURE: user bias on sharpen! This is non-sensical! */
         preview_image=SharpenImage(thumbnail,radius,sigma,image->bias,
           exception);
         (void) FormatLocaleString(label,MaxTextExtent,"sharpen %gx%g",
@@ -2599,6 +2604,7 @@ MagickExport Image *PreviewImage(const Image *image,const PreviewType preview,
       }
       case BlurPreview:
       {
+        /* FUTURE: user bias on blur! This is non-sensical! */
         preview_image=BlurImage(thumbnail,radius,sigma,image->bias,exception);
         (void) FormatLocaleString(label,MaxTextExtent,"blur %gx%g",radius,
           sigma);
@@ -2609,8 +2615,8 @@ MagickExport Image *PreviewImage(const Image *image,const PreviewType preview,
         preview_image=CloneImage(thumbnail,0,0,MagickTrue,exception);
         if (preview_image == (Image *) NULL)
           break;
-        (void) BilevelImage(thumbnail,
-          (double) (percentage*((MagickRealType) QuantumRange+1.0))/100.0);
+        (void) BilevelImage(thumbnail,(double) (percentage*((MagickRealType)
+          QuantumRange+1.0))/100.0,exception);
         (void) FormatLocaleString(label,MaxTextExtent,"threshold %g",
           (double) (percentage*((MagickRealType) QuantumRange+1.0))/100.0);
         break;
@@ -2711,6 +2717,7 @@ MagickExport Image *PreviewImage(const Image *image,const PreviewType preview,
       }
       case CharcoalDrawingPreview:
       {
+        /* FUTURE: user bias on charcoal! This is non-sensical! */
         preview_image=CharcoalImage(thumbnail,(double) radius,(double) sigma,
           image->bias,exception);
         (void) FormatLocaleString(label,MaxTextExtent,"charcoal %gx%g",
@@ -2777,7 +2784,7 @@ MagickExport Image *PreviewImage(const Image *image,const PreviewType preview,
     if (preview_image == (Image *) NULL)
       break;
     (void) DeleteImageProperty(preview_image,"label");
-    (void) SetImageProperty(preview_image,"label",label);
+    (void) SetImageProperty(preview_image,"label",label,exception);
     AppendImageToList(&images,preview_image);
     proceed=SetImageProgress(image,PreviewImageTag,(MagickOffsetType) i,
       NumberTiles);
@@ -3008,7 +3015,7 @@ MagickExport Image *RadialBlurImage(const Image *image,
           continue;
         if ((blur_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[i];
+            SetPixelChannel(blur_image,channel,p[i],q);
             continue;
           }
         gamma=0.0;
@@ -3030,7 +3037,7 @@ MagickExport Image *RadialBlurImage(const Image *image,
               gamma++;
             }
             gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-            q[channel]=ClampToQuantum(gamma*pixel);
+            SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
             continue;
           }
         for (j=0; j < (ssize_t) n; j+=(ssize_t) step)
@@ -3048,7 +3055,7 @@ MagickExport Image *RadialBlurImage(const Image *image,
           gamma+=GetPixelAlpha(image,r);
         }
         gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-        q[channel]=ClampToQuantum(gamma*pixel);
+        SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(blur_image);
@@ -3141,10 +3148,10 @@ MagickExport Image *SelectiveBlurImage(const Image *image,
     i;
 
   size_t
-    center,
     width;
 
   ssize_t
+    center,
     j,
     u,
     v,
@@ -3216,8 +3223,8 @@ MagickExport Image *SelectiveBlurImage(const Image *image,
   */
   status=MagickTrue;
   progress=0;
-  center=(ssize_t) GetPixelChannels(image)*(image->columns+width)*(width/2L)+
-    GetPixelChannels(image)*(width/2L);
+  center=(ssize_t) (GetPixelChannels(image)*(image->columns+width)*(width/2L)+
+    GetPixelChannels(image)*(width/2L));
   image_view=AcquireCacheView(image);
   blur_view=AcquireCacheView(blur_image);
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
@@ -3291,13 +3298,13 @@ MagickExport Image *SelectiveBlurImage(const Image *image,
           continue;
         if ((blur_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[center+i];
+            SetPixelChannel(blur_image,channel,p[center+i],q);
             continue;
           }
         k=kernel;
         pixel=bias;
         pixels=p;
-        intensity=GetPixelIntensity(image,p+center);
+        intensity=(MagickRealType) GetPixelIntensity(image,p+center);
         gamma=0.0;
         if ((blur_traits & BlendPixelTrait) == 0)
           {
@@ -3318,11 +3325,11 @@ MagickExport Image *SelectiveBlurImage(const Image *image,
             }
             if (fabs((double) gamma) < MagickEpsilon)
               {
-                q[channel]=p[center+i];
+                SetPixelChannel(blur_image,channel,p[center+i],q);
                 continue;
               }
             gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-            q[channel]=ClampToQuantum(gamma*pixel);
+            SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
             continue;
           }
         for (v=0; v < (ssize_t) width; v++)
@@ -3344,11 +3351,11 @@ MagickExport Image *SelectiveBlurImage(const Image *image,
         }
         if (fabs((double) gamma) < MagickEpsilon)
           {
-            q[channel]=p[center+i];
+            SetPixelChannel(blur_image,channel,p[center+i],q);
             continue;
           }
         gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
-        q[channel]=ClampToQuantum(gamma*pixel);
+        SetPixelChannel(blur_image,channel,ClampToQuantum(gamma*pixel),q);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(blur_image);
@@ -3559,15 +3566,16 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray,
           continue;
         if ((shade_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=center[i];
+            SetPixelChannel(shade_image,channel,center[i],q);
             continue;
           }
         if (gray != MagickFalse)
           {
-            q[channel]=ClampToQuantum(shade);
+            SetPixelChannel(shade_image,channel,ClampToQuantum(shade),q);
             continue;
           }
-        q[channel]=ClampToQuantum(QuantumScale*shade*center[i]);
+        SetPixelChannel(shade_image,channel,ClampToQuantum(QuantumScale*shade*
+          center[i]),q);
       }
       pre+=GetPixelChannels(image);
       center+=GetPixelChannels(image);
@@ -3672,7 +3680,7 @@ MagickExport Image *SharpenImage(const Image *image,const double radius,
   (void) ResetMagickMemory(kernel_info,0,sizeof(*kernel_info));
   kernel_info->width=width;
   kernel_info->height=width;
-  kernel_info->bias=bias;
+  kernel_info->bias=bias;   /* FUTURE: user bias - non-sensical! */
   kernel_info->signature=MagickSignature;
   kernel_info->values=(double *) AcquireAlignedMemory(kernel_info->width,
     kernel_info->width*sizeof(*kernel_info->values));
@@ -4434,7 +4442,7 @@ MagickExport Image *StatisticImage(const Image *image,const StatisticType type,
           continue;
         if ((statistic_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[center+i];
+            SetPixelChannel(statistic_image,channel,p[center+i],q);
             continue;
           }
         pixels=p;
@@ -4498,7 +4506,7 @@ MagickExport Image *StatisticImage(const Image *image,const StatisticType type,
             break;
           }
         }
-        q[channel]=pixel;
+        SetPixelChannel(statistic_image,channel,pixel,q);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(statistic_image);
@@ -4594,7 +4602,11 @@ MagickExport Image *UnsharpMaskImage(const Image *image,
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   assert(exception != (ExceptionInfo *) NULL);
+
+
+  /* FUTURE:  use of bias on sharpen is non-sensical */
   unsharp_image=BlurImage(image,radius,sigma,image->bias,exception);
+
   if (unsharp_image == (Image *) NULL)
     return((Image *) NULL);
   quantum_threshold=(MagickRealType) QuantumRange*threshold;
@@ -4654,15 +4666,15 @@ MagickExport Image *UnsharpMaskImage(const Image *image,
           continue;
         if ((unsharp_traits & CopyPixelTrait) != 0)
           {
-            q[channel]=p[i];
+            SetPixelChannel(unsharp_image,channel,p[i],q);
             continue;
           }
-        pixel=p[i]-(MagickRealType) q[channel];
+        pixel=p[i]-(MagickRealType) GetPixelChannel(unsharp_image,channel,q);
         if (fabs(2.0*pixel) < quantum_threshold)
           pixel=(MagickRealType) p[i];
         else
           pixel=(MagickRealType) p[i]+amount*pixel;
-        q[channel]=ClampToQuantum(pixel);
+        SetPixelChannel(unsharp_image,channel,ClampToQuantum(pixel),q);
       }
       p+=GetPixelChannels(image);
       q+=GetPixelChannels(unsharp_image);