]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Thu, 12 Aug 2010 19:56:38 +0000 (19:56 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Thu, 12 Aug 2010 19:56:38 +0000 (19:56 +0000)
coders/psd.c
magick/quantum-import.c

index 4758d3adba87a17ea1e8e657cc7b69ff143ec18a..049b71d948825c12d779418c8303ada7d58498a8 100644 (file)
@@ -587,18 +587,27 @@ static MagickBooleanType ReadPSDLayer(Image *image,const size_t channels,
   colorspace=image->colorspace;
   for (y=0; y < (ssize_t) image->rows; y++)
   {
-    if (image->compression != RLECompression)
-      count=ReadBlob(image,packet_size*image->columns,pixels);
+    if (image->depth == 1)
+      {
+        count=ReadBlob(image,(image->columns+7)/8,pixels);
+        if (count < (ssize_t) ((image->columns+7)/8))
+          break;
+      }
     else
       {
-        count=ReadBlob(image,(size_t) offsets[y],compact_pixels);
-        if (count != (ssize_t) offsets[y])
+        if (image->compression != RLECompression)
+          count=ReadBlob(image,packet_size*image->columns,pixels);
+        else
+          {
+            count=ReadBlob(image,(size_t) offsets[y],compact_pixels);
+            if (count != (ssize_t) offsets[y])
+              break;
+            count=DecodePSDPixels((size_t) offsets[y],compact_pixels,
+              (ssize_t) image->depth,packet_size*image->columns,pixels);
+          }
+        if (count < (ssize_t) (packet_size*image->columns))
           break;
-        count=DecodePSDPixels((size_t) offsets[y],compact_pixels,
-          (ssize_t) image->depth,packet_size*image->columns,pixels);
       }
-    if (count < (ssize_t) (packet_size*image->columns))
-      break;
     q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
     if (q == (PixelPacket *) NULL)
       break;
@@ -638,6 +647,24 @@ static MagickBooleanType ReadPSDLayer(Image *image,const size_t channels,
               q->red=image->colormap[(ssize_t) indexes[x]].red;
               q->green=image->colormap[(ssize_t) indexes[x]].green;
               q->blue=image->colormap[(ssize_t) indexes[x]].blue;
+              if (image->depth == 1)
+                {
+                  ssize_t
+                    bit;
+
+                  for (bit=0; bit < (image->columns % 8); bit++)
+                  {
+                    indexes[x]=((pixel & (0x01 << (7-bit))) != 0 ? 0 : 255);
+                    *q=image->colormap[(ssize_t) indexes[x]];
+                    q->red=image->colormap[(ssize_t) indexes[x]].red;
+                    q->green=image->colormap[(ssize_t) indexes[x]].green;
+                    q->blue=image->colormap[(ssize_t) indexes[x]].blue;
+                    q++;
+                    x++;
+                  }
+                  q--;
+                  x--;
+                }
             }
           break;
         }
index 915816aae6a32427cdf2ca361bb246fe0a75ce1f..0d299a985506fec4554d5da7d25a0669f285c401 100644 (file)
@@ -734,7 +734,7 @@ MagickExport size_t ImportQuantumPixels(Image *image,CacheView *image_view,
           }
           for (bit=0; bit < (ssize_t) (number_pixels % 8); bit++)
           {
-            q->red=(((*p) & (1 << (7-bit))) == 0 ? black : white);
+            q->red=(((*p) & (0x01 << (7-bit))) == 0 ? black : white);
             q->green=q->red;
             q->blue=q->red;
             q++;