]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Thu, 20 Dec 2012 13:04:30 +0000 (13:04 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Thu, 20 Dec 2012 13:04:30 +0000 (13:04 +0000)
MagickCore/paint.c
MagickCore/version.h

index a5b09f1c7794f6986ebeaa52d2ae6cb1b824556e..00c2a35f853a30b41e70c5a245bed3d0a1756d9b 100644 (file)
@@ -540,6 +540,7 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
     *paint_view;
 
   Image
+    *linear_image,
     *paint_image;
 
   MagickBooleanType
@@ -566,17 +567,28 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
   assert(exception != (ExceptionInfo *) NULL);
   assert(exception->signature == MagickSignature);
   width=GetOptimalKernelWidth2D(radius,sigma);
+  linear_image=CloneImage(image,0,0,MagickTrue,exception);
   paint_image=CloneImage(image,image->columns,image->rows,MagickTrue,exception);
-  if (paint_image == (Image *) NULL)
-    return((Image *) NULL);
+  if ((linear_image == (Image *) NULL) || (paint_image == (Image *) NULL))
+    {
+      if (linear_image != (Image *) NULL)
+        linear_image=DestroyImage(linear_image);
+      if (paint_image != (Image *) NULL)
+        linear_image=DestroyImage(paint_image);
+      return((Image *) NULL);
+    }
+  if (image->colorspace == sRGBColorspace)
+    (void) TransformImageColorspace(linear_image,sRGBColorspace,exception);
   if (SetImageStorageClass(paint_image,DirectClass,exception) == MagickFalse)
     {
+      linear_image=DestroyImage(linear_image);
       paint_image=DestroyImage(paint_image);
       return((Image *) NULL);
     }
   histograms=AcquireHistogramThreadSet(NumberPaintBins);
   if (histograms == (size_t **) NULL)
     {
+      linear_image=DestroyImage(linear_image);
       paint_image=DestroyImage(paint_image);
       ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
     }
@@ -585,15 +597,15 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
   */
   status=MagickTrue;
   progress=0;
-  center=(ssize_t) GetPixelChannels(image)*(image->columns+width)*(width/2L)+
-    GetPixelChannels(image)*(width/2L);
-  image_view=AcquireVirtualCacheView(image,exception);
+  center=(ssize_t) GetPixelChannels(linear_image)*(linear_image->columns+width)*
+    (width/2L)+GetPixelChannels(linear_image)*(width/2L);
+  image_view=AcquireVirtualCacheView(linear_image,exception);
   paint_view=AcquireAuthenticCacheView(paint_image,exception);
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
   #pragma omp parallel for schedule(static,4) shared(progress,status) \
-    magick_threads(image,paint_image,image->rows,1)
+    magick_threads(linear_image,paint_image,linear_image->rows,1)
 #endif
-  for (y=0; y < (ssize_t) image->rows; y++)
+  for (y=0; y < (ssize_t) linear_image->rows; y++)
   {
     register const Quantum
       *restrict p;
@@ -610,7 +622,7 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
     if (status == MagickFalse)
       continue;
     p=GetCacheViewVirtualPixels(image_view,-((ssize_t) width/2L),y-(ssize_t)
-      (width/2L),image->columns+width,width,exception);
+      (width/2L),linear_image->columns+width,width,exception);
     q=QueueCacheViewAuthenticPixels(paint_view,0,y,paint_image->columns,1,
       exception);
     if ((p == (const Quantum *) NULL) || (q == (Quantum *) NULL))
@@ -619,7 +631,7 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
         continue;
       }
     histogram=histograms[GetOpenMPThreadId()];
-    for (x=0; x < (ssize_t) image->columns; x++)
+    for (x=0; x < (ssize_t) linear_image->columns; x++)
     {
       register ssize_t
         i,
@@ -645,8 +657,8 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
       {
         for (u=0; u < (ssize_t) width; u++)
         {
-          n=(ssize_t) ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(image,
-            p+GetPixelChannels(image)*(u+k))));
+          n=(ssize_t) ScaleQuantumToChar(ClampToQuantum(GetPixelIntensity(
+            linear_image,p+GetPixelChannels(linear_image)*(u+k))));
           histogram[n]++;
           if (histogram[n] > count)
             {
@@ -654,9 +666,9 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
               count=histogram[n];
             }
         }
-        k+=(ssize_t) (image->columns+width);
+        k+=(ssize_t) (linear_image->columns+width);
       }
-      for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+      for (i=0; i < (ssize_t) GetPixelChannels(linear_image); i++)
       {
         PixelChannel
           channel;
@@ -665,26 +677,27 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
           paint_traits,
           traits;
 
-        channel=GetPixelChannelChannel(image,i);
-        traits=GetPixelChannelTraits(image,channel);
+        channel=GetPixelChannelChannel(linear_image,i);
+        traits=GetPixelChannelTraits(linear_image,channel);
         paint_traits=GetPixelChannelTraits(paint_image,channel);
         if ((traits == UndefinedPixelTrait) ||
             (paint_traits == UndefinedPixelTrait))
           continue;
         if (((paint_traits & CopyPixelTrait) != 0) ||
-            (GetPixelMask(image,p) != 0))
+            (GetPixelMask(linear_image,p) != 0))
           {
             SetPixelChannel(paint_image,channel,p[center+i],q);
             continue;
           }
-        SetPixelChannel(paint_image,channel,p[j*GetPixelChannels(image)+i],q);
+        SetPixelChannel(paint_image,channel,p[j*GetPixelChannels(linear_image)+
+          i],q);
       }
-      p+=GetPixelChannels(image);
+      p+=GetPixelChannels(linear_image);
       q+=GetPixelChannels(paint_image);
     }
     if (SyncCacheViewAuthenticPixels(paint_view,exception) == MagickFalse)
       status=MagickFalse;
-    if (image->progress_monitor != (MagickProgressMonitor) NULL)
+    if (linear_image->progress_monitor != (MagickProgressMonitor) NULL)
       {
         MagickBooleanType
           proceed;
@@ -692,7 +705,8 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
 #if defined(MAGICKCORE_OPENMP_SUPPORT)
         #pragma omp critical (MagickCore_OilPaintImage)
 #endif
-        proceed=SetImageProgress(image,OilPaintImageTag,progress++,image->rows);
+        proceed=SetImageProgress(linear_image,OilPaintImageTag,progress++,
+          linear_image->rows);
         if (proceed == MagickFalse)
           status=MagickFalse;
       }
@@ -700,6 +714,9 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius,
   paint_view=DestroyCacheView(paint_view);
   image_view=DestroyCacheView(image_view);
   histograms=DestroyHistogramThreadSet(histograms);
+  linear_image=DestroyImage(linear_image);
+  if (image->colorspace == sRGBColorspace)
+    (void) TransformImageColorspace(paint_image,sRGBColorspace,exception);
   if (status == MagickFalse)
     paint_image=DestroyImage(paint_image);
   return(paint_image);
index 51fa8183d8baafc200e497eb046d3123ec6058d4..65e0fac67da3911a856d5fab0eda077a6707dc90 100644 (file)
@@ -27,14 +27,14 @@ extern "C" {
 */
 #define MagickPackageName "ImageMagick"
 #define MagickCopyright  "Copyright (C) 1999-2013 ImageMagick Studio LLC"
-#define MagickSVNRevision  "10255:10277M"
+#define MagickSVNRevision  "10302:10324M"
 #define MagickLibVersion  0x700
 #define MagickLibVersionText  "7.0.0"
 #define MagickLibVersionNumber  8,0,0
 #define MagickLibAddendum  "-0"
 #define MagickLibInterface  8
 #define MagickLibMinInterface  8
-#define MagickReleaseDate  "2012-12-17"
+#define MagickReleaseDate  "2012-12-20"
 #define MagickChangeDate   "20121005"
 #define MagickAuthoritativeURL  "http://www.imagemagick.org"
 #if defined(MAGICKCORE_OPENMP_SUPPORT)