]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/effect.c
(no commit message)
[imagemagick] / MagickCore / effect.c
index 65d1528a2d5a2cfb45e231b428bf67d9cccca294..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);
@@ -1367,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;
@@ -1388,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;
           }
         /*
@@ -1408,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);
@@ -1710,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);
@@ -1802,7 +1802,7 @@ MagickExport Image *EdgeImage(const Image *image,const double radius,
     ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
   kernel_info->width=width;
   kernel_info->height=width;
-  kernel_info->values=(double *) AcquireQuantumMemory(kernel_info->width,
+  kernel_info->values=(double *) AcquireAlignedMemory(kernel_info->width,
     kernel_info->width*sizeof(*kernel_info->values));
   if (kernel_info->values == (double *) NULL)
     {
@@ -1820,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);
@@ -1892,7 +1892,7 @@ MagickExport Image *EmbossImage(const Image *image,const double radius,
     ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
   kernel_info->width=width;
   kernel_info->height=width;
-  kernel_info->values=(double *) AcquireQuantumMemory(kernel_info->width,
+  kernel_info->values=(double *) AcquireAlignedMemory(kernel_info->width,
     kernel_info->width*sizeof(*kernel_info->values));
   if (kernel_info->values == (double *) NULL)
     {
@@ -1915,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)
@@ -1991,9 +1991,9 @@ 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 *) AcquireQuantumMemory(kernel_info->width,
+  kernel_info->values=(double *) AcquireAlignedMemory(kernel_info->width,
     kernel_info->width*sizeof(*kernel_info->values));
   if (kernel_info->values == (double *) NULL)
     {
@@ -2224,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;
@@ -2243,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;
@@ -2263,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);
@@ -2401,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;
       }
@@ -2594,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",
@@ -2602,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);
@@ -2612,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;
@@ -2714,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",
@@ -2780,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);
@@ -3011,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;
@@ -3033,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)
@@ -3051,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);
@@ -3294,7 +3298,7 @@ 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;
@@ -3321,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++)
@@ -3347,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);
@@ -3562,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);
@@ -3675,9 +3680,9 @@ 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 *) AcquireQuantumMemory(kernel_info->width,
+  kernel_info->values=(double *) AcquireAlignedMemory(kernel_info->width,
     kernel_info->width*sizeof(*kernel_info->values));
   if (kernel_info->values == (double *) NULL)
     {
@@ -4437,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;
@@ -4501,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);
@@ -4597,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;
@@ -4657,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);