]> granicus.if.org Git - imagemagick/commitdiff
Fixed issue with PseudoClass image.
authorDirk Lemstra <dirk@git.imagemagick.org>
Sat, 17 Jun 2017 15:10:51 +0000 (17:10 +0200)
committerDirk Lemstra <dirk@git.imagemagick.org>
Sat, 17 Jun 2017 15:37:46 +0000 (17:37 +0200)
coders/psd.c

index fd18c01efdc6e34952493a0b2eb21392d638f677..bf8dc0ae2fcdbab2086457dd47fa0c52d43210c4 100644 (file)
@@ -891,12 +891,23 @@ static inline void SetPSDPixel(Image *image,const size_t channels,
 {
   if (image->storage_class == PseudoClass)
     {
-      if (packet_size == 1)
-        SetPixelIndex(image,ScaleQuantumToChar(pixel),q);
+      PixelInfo
+        *color;
+
+      if (type == 0)
+        {
+          if (packet_size == 1)
+            SetPixelIndex(image,ScaleQuantumToChar(pixel),q);
+          else
+            SetPixelIndex(image,ScaleQuantumToShort(pixel),q);
+        }
+      color=image->colormap+(ssize_t) ConstrainColormapIndex(image,
+        GetPixelIndex(image,q),exception);
+      if ((type == 0) && (channels > 1))
+        return;
       else
-        SetPixelIndex(image,ScaleQuantumToShort(pixel),q);
-      SetPixelViaPixelInfo(image,image->colormap+(ssize_t)
-        ConstrainColormapIndex(image,GetPixelIndex(image,q),exception),q);
+        color->alpha=(MagickRealType) pixel;
+      SetPixelViaPixelInfo(image,color,q);
       return;
     }
   switch (type)
@@ -914,18 +925,12 @@ static inline void SetPSDPixel(Image *image,const size_t channels,
     }
     case 1:
     {
-      if (image->storage_class == PseudoClass)
-        SetPixelAlpha(image,pixel,q);
-      else
-        SetPixelGreen(image,pixel,q);
+      SetPixelGreen(image,pixel,q);
       break;
     }
     case 2:
     {
-      if (image->storage_class == PseudoClass)
-        SetPixelAlpha(image,pixel,q);
-      else
-        SetPixelBlue(image,pixel,q);
+      SetPixelBlue(image,pixel,q);
       break;
     }
     case 3: