]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Tue, 6 Sep 2011 01:44:48 +0000 (01:44 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Tue, 6 Sep 2011 01:44:48 +0000 (01:44 +0000)
MagickCore/quantum-import.c

index 0da2d489fe3caf3fedb368957f38196a15f1bc58..a1cbd315c780643c1dfbf9a18a27c3e65820db57 100644 (file)
@@ -540,7 +540,7 @@ MagickExport size_t ImportQuantumPixels(Image *image,CacheView *image_view,
           register unsigned char
             pixel;
 
-          for (x=0; x < ((ssize_t) number_pixels-3); x+=4)
+          for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
           {
             for (bit=0; bit < 8; bit+=2)
             {
@@ -559,22 +559,23 @@ MagickExport size_t ImportQuantumPixels(Image *image,CacheView *image_view,
               q+=channels;
             }
           }
-          for (bit=0; bit < (ssize_t) (number_pixels % 4); bit+=2)
-          {
-            if (quantum_info->min_is_white == MagickFalse)
-              pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
-                0x00 : 0x01);
-            else
-              pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
-                0x00 : 0x01);
-            SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
-            SetPixelRed(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
-            SetPixelGreen(image,GetPixelRed(image,q),q);
-            SetPixelBlue(image,GetPixelRed(image,q),q);
-            SetPixelAlpha(image,((*p) & (1UL << (unsigned char)
-              (6-bit))) == 0 ? TransparentAlpha : OpaqueAlpha,q);
-            q+=channels;
-          }
+          if ((number_pixels % 4) != 0)
+            for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
+            {
+              if (quantum_info->min_is_white == MagickFalse)
+                pixel=(unsigned char) (((*p) & (1 << (7-bit))) == 0 ?
+                  0x00 : 0x01);
+              else
+                pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ?
+                  0x00 : 0x01);
+              SetPixelIndex(image,(Quantum) (pixel == 0 ? 0 : 1),q);
+              SetPixelRed(image,(Quantum) (pixel == 0 ? 0 : QuantumRange),q);
+              SetPixelGreen(image,GetPixelRed(image,q),q);
+              SetPixelBlue(image,GetPixelRed(image,q),q);
+              SetPixelAlpha(image,((*p) & (1UL << (unsigned char)
+                (6-bit))) == 0 ? TransparentAlpha : OpaqueAlpha,q);
+              q+=channels;
+            }
           break;
         }
         case 4:
@@ -1623,7 +1624,7 @@ MagickExport size_t ImportQuantumPixels(Image *image,CacheView *image_view,
           register unsigned char
             pixel;
 
-          for (x=0; x < ((ssize_t) number_pixels-3); x+=4)
+          for (x=((ssize_t) number_pixels-3); x > 0; x-=4)
           {
             for (bit=0; bit < 8; bit+=2)
             {
@@ -1638,16 +1639,18 @@ MagickExport size_t ImportQuantumPixels(Image *image,CacheView *image_view,
             }
             p++;
           }
-          for (bit=0; bit <= (ssize_t) (number_pixels % 4); bit+=2)
-          {
-            pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 : 0x01);
-            SetPixelRed(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
-            SetPixelGreen(image,GetPixelRed(image,q),q);
-            SetPixelBlue(image,GetPixelRed(image,q),q);
-            SetPixelAlpha(image,((*p) & (1UL << (unsigned char)
-              (6-bit))) == 0 ? TransparentAlpha : OpaqueAlpha,q);
-            q+=channels;
-          }
+          if ((number_pixels % 4) != 0)
+            for (bit=3; bit >= (ssize_t) (4-(number_pixels % 4)); bit-=2)
+            {
+              pixel=(unsigned char) (((*p) & (1 << (7-bit))) != 0 ? 0x00 :
+                0x01);
+              SetPixelRed(image,(Quantum) (pixel != 0 ? 0 : QuantumRange),q);
+              SetPixelGreen(image,GetPixelRed(image,q),q);
+              SetPixelBlue(image,GetPixelRed(image,q),q);
+              SetPixelAlpha(image,((*p) & (1UL << (unsigned char)
+                (6-bit))) == 0 ? TransparentAlpha : OpaqueAlpha,q);
+              q+=channels;
+            }
           if (bit != 0)
             p++;
           break;