]> granicus.if.org Git - imagemagick/blobdiff - coders/pnm.c
(no commit message)
[imagemagick] / coders / pnm.c
index 9313b720ce47bc38e64a7d5bab509751e0001fcc..b7981a2a735ae9ae8496de0907604761f4e9a438 100644 (file)
@@ -17,7 +17,7 @@
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
@@ -158,9 +158,7 @@ static size_t PNMInteger(Image *image,const unsigned int base)
     *p;
 
   size_t
-    extent;
-
-  size_t
+    extent,
     value;
 
   /*
@@ -235,10 +233,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
   Image
     *image;
 
-  ssize_t
-    row,
-    y;
-
   MagickBooleanType
     status;
 
@@ -255,15 +249,15 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
     i;
 
   size_t
+    depth,
     extent,
+    max_value,
     packet_size;
 
   ssize_t
-    count;
-
-  size_t
-    depth,
-    max_value;
+    count,
+    row,
+    y;
 
   /*
     Open image file.
@@ -364,6 +358,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
           */
           if (LocaleCompare(keyword,"depth") == 0)
             packet_size=StringToUnsignedLong(value);
+          (void) packet_size;
           if (LocaleCompare(keyword,"height") == 0)
             image->rows=StringToUnsignedLong(value);
           if (LocaleCompare(keyword,"maxval") == 0)
@@ -439,9 +434,9 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             break;
           for (x=0; x < (ssize_t) image->columns; x++)
           {
-            q->red=(Quantum) (PNMInteger(image,2) == 0 ? QuantumRange : 0);
-            q->green=q->red;
-            q->blue=q->red;
+            SetRedPixelComponent(q,PNMInteger(image,2) == 0 ? QuantumRange : 0);
+            SetGreenPixelComponent(q,GetRedPixelComponent(q));
+            SetBluePixelComponent(q,GetRedPixelComponent(q));
             q++;
           }
           if (SyncAuthenticPixels(image,exception) == MagickFalse)
@@ -492,11 +487,12 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
           for (x=0; x < (ssize_t) image->columns; x++)
           {
             intensity=PNMInteger(image,10);
-            q->red=(Quantum) intensity;
+            SetRedPixelComponent(q,intensity);
             if (scale != (Quantum *) NULL)
-              q->red=scale[ConstrainPixel(image,(ssize_t) intensity,max_value)];
-            q->green=q->red;
-            q->blue=q->red;
+              SetRedPixelComponent(q,scale[ConstrainPixel(image,(ssize_t)
+                intensity,max_value)]);
+            SetGreenPixelComponent(q,GetRedPixelComponent(q));
+            SetBluePixelComponent(q,GetRedPixelComponent(q));
             q++;
           }
           if (SyncAuthenticPixels(image,exception) == MagickFalse)
@@ -555,14 +551,14 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
               {
                 pixel.red=(MagickRealType) scale[ConstrainPixel(image,(ssize_t)
                   pixel.red,max_value)];
-                pixel.green=(MagickRealType) scale[ConstrainPixel(image,(ssize_t)
-                  pixel.green,max_value)];
+                pixel.green=(MagickRealType) scale[ConstrainPixel(image,
+                  (ssize_t) pixel.green,max_value)];
                 pixel.blue=(MagickRealType) scale[ConstrainPixel(image,(ssize_t)
                   pixel.blue,max_value)];
               }
-            q->red=(Quantum) pixel.red;
-            q->green=(Quantum) pixel.green;
-            q->blue=(Quantum) pixel.blue;
+            SetRedPixelComponent(q,pixel.red);
+            SetGreenPixelComponent(q,pixel.green);
+            SetBluePixelComponent(q,pixel.blue);
             q++;
           }
           if (SyncAuthenticPixels(image,exception) == MagickFalse)
@@ -594,9 +590,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
         extent=GetQuantumExtent(image,quantum_info,quantum_type);
         for (y=0; y < (ssize_t) image->rows; y++)
         {
-          ssize_t
-            offset;
-
           MagickBooleanType
             sync;
 
@@ -604,7 +597,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             *restrict q;
 
           ssize_t
-            count;
+            count,
+            offset;
 
           size_t
             length;
@@ -668,9 +662,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
           ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
         for (y=0; y < (ssize_t) image->rows; y++)
         {
-          ssize_t
-            offset;
-
           MagickBooleanType
             sync;
 
@@ -684,7 +675,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             *restrict q;
 
           ssize_t
-            count;
+            count,
+            offset;
 
           unsigned char
             *pixels;
@@ -700,8 +692,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 MagickBooleanType
                   proceed;
 
-                proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) row,
-                image->rows);
+                proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType)
+                  row,image->rows);
                 if (proceed == MagickFalse)
                   status=MagickFalse;
               }
@@ -729,8 +721,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 {
                   p=PushCharPixel(p,&pixel);
                   SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range));
-                  q->green=q->red;
-                  q->blue=q->red;
+                  SetGreenPixelComponent(q,GetRedPixelComponent(q));
+                  SetBluePixelComponent(q,GetRedPixelComponent(q));
                   q++;
                 }
               }
@@ -743,8 +735,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 {
                   p=PushShortPixel(MSBEndian,p,&pixel);
                   SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range));
-                  q->green=q->red;
-                  q->blue=q->red;
+                  SetGreenPixelComponent(q,GetRedPixelComponent(q));
+                  SetBluePixelComponent(q,GetRedPixelComponent(q));
                   q++;
                 }
               }
@@ -778,9 +770,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
           ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
         for (y=0; y < (ssize_t) image->rows; y++)
         {
-          ssize_t
-            offset;
-
           MagickBooleanType
             sync;
 
@@ -794,7 +783,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             *restrict q;
 
           ssize_t
-            count;
+            count,
+            offset;
 
           unsigned char
             *pixels;
@@ -810,8 +800,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 MagickBooleanType
                   proceed;
 
-                proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) row,
-                image->rows);
+                proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType)
+                  row,image->rows);
                 if (proceed == MagickFalse)
                   status=MagickFalse;
               }
@@ -829,9 +819,9 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
           if (image->depth == 8)
             for (x=0; x < (ssize_t) image->columns; x++)
             {
-              q->red=ScaleCharToQuantum(*p++);
-              q->green=ScaleCharToQuantum(*p++);
-              q->blue=ScaleCharToQuantum(*p++);
+              SetRedPixelComponent(q,ScaleCharToQuantum(*p++));
+              SetGreenPixelComponent(q,ScaleCharToQuantum(*p++));
+              SetBluePixelComponent(q,ScaleCharToQuantum(*p++));
               q->opacity=OpaqueOpacity;
               q++;
             }
@@ -844,12 +834,12 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 for (x=0; x < (ssize_t) image->columns; x++)
                 {
                   p=PushShortPixel(MSBEndian,p,&pixel);
-                  q->red=ScaleShortToQuantum(pixel);
+                  SetRedPixelComponent(q,ScaleShortToQuantum(pixel));
                   p=PushShortPixel(MSBEndian,p,&pixel);
-                  q->green=ScaleShortToQuantum(pixel);
+                  SetGreenPixelComponent(q,ScaleShortToQuantum(pixel));
                   p=PushShortPixel(MSBEndian,p,&pixel);
-                  q->blue=ScaleShortToQuantum(pixel);
-                  q->opacity=OpaqueOpacity;
+                  SetBluePixelComponent(q,ScaleShortToQuantum(pixel));
+                  SetOpacityPixelComponent(q,OpaqueOpacity);
                   q++;
                 }
               }
@@ -862,12 +852,12 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                   for (x=0; x < (ssize_t) image->columns; x++)
                   {
                     p=PushCharPixel(p,&pixel);
-                    q->red=ScaleAnyToQuantum(pixel,range);
+                    SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range));
                     p=PushCharPixel(p,&pixel);
-                    q->green=ScaleAnyToQuantum(pixel,range);
+                    SetGreenPixelComponent(q,ScaleAnyToQuantum(pixel,range));
                     p=PushCharPixel(p,&pixel);
-                    q->blue=ScaleAnyToQuantum(pixel,range);
-                    q->opacity=OpaqueOpacity;
+                    SetBluePixelComponent(q,ScaleAnyToQuantum(pixel,range));
+                    SetOpacityPixelComponent(q,OpaqueOpacity);
                     q++;
                   }
                 }
@@ -879,12 +869,12 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                   for (x=0; x < (ssize_t) image->columns; x++)
                   {
                     p=PushShortPixel(MSBEndian,p,&pixel);
-                    q->red=ScaleAnyToQuantum(pixel,range);
+                    SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range));
                     p=PushShortPixel(MSBEndian,p,&pixel);
-                    q->green=ScaleAnyToQuantum(pixel,range);
+                    SetGreenPixelComponent(q,ScaleAnyToQuantum(pixel,range));
                     p=PushShortPixel(MSBEndian,p,&pixel);
-                    q->blue=ScaleAnyToQuantum(pixel,range);
-                    q->opacity=OpaqueOpacity;
+                    SetBluePixelComponent(q,ScaleAnyToQuantum(pixel,range));
+                    SetOpacityPixelComponent(q,OpaqueOpacity);
                     q++;
                   }
                 }
@@ -958,9 +948,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
           ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
         for (y=0; y < (ssize_t) image->rows; y++)
         {
-          ssize_t
-            offset;
-
           MagickBooleanType
             sync;
 
@@ -974,7 +961,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             *restrict q;
 
           ssize_t
-            count;
+            count,
+            offset;
 
           unsigned char
             *pixels;
@@ -990,8 +978,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 MagickBooleanType
                   proceed;
 
-                proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) row,
-                image->rows);
+                proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType)
+                  row,image->rows);
                 if (proceed == MagickFalse)
                   status=MagickFalse;
               }
@@ -1025,13 +1013,14 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                     {
                       p=PushCharPixel(p,&pixel);
                       SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range));
-                      q->green=q->red;
-                      q->blue=q->red;
+                      SetGreenPixelComponent(q,GetRedPixelComponent(q));
+                      SetBluePixelComponent(q,GetRedPixelComponent(q));
                       SetOpacityPixelComponent(q,OpaqueOpacity);
                       if (image->matte != MagickFalse)
                         {
                           p=PushCharPixel(p,&pixel);
-                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range));
+                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,
+                            range));
                         }
                       q++;
                     }
@@ -1045,13 +1034,14 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                     {
                       p=PushShortPixel(MSBEndian,p,&pixel);
                       SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range));
-                      q->green=q->red;
-                      q->blue=q->red;
+                      SetGreenPixelComponent(q,GetRedPixelComponent(q));
+                      SetBluePixelComponent(q,GetRedPixelComponent(q));
                       SetOpacityPixelComponent(q,OpaqueOpacity);
                       if (image->matte != MagickFalse)
                         {
                           p=PushShortPixel(MSBEndian,p,&pixel);
-                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range));
+                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,
+                            range));
                         }
                       q++;
                     }
@@ -1075,12 +1065,14 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                       p=PushCharPixel(p,&pixel);
                       SetBluePixelComponent(q,ScaleAnyToQuantum(pixel,range));
                       p=PushCharPixel(p,&pixel);
-                      indexes[x]=ScaleAnyToQuantum(pixel,range);
+                      SetIndexPixelComponent(indexes+x,ScaleAnyToQuantum(pixel,
+                        range));
                       SetOpacityPixelComponent(q,OpaqueOpacity);
                       if (image->matte != MagickFalse)
                         {
                           p=PushCharPixel(p,&pixel);
-                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range));
+                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,
+                            range));
                         }
                       q++;
                     }
@@ -1099,12 +1091,14 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                       p=PushShortPixel(MSBEndian,p,&pixel);
                       SetBluePixelComponent(q,ScaleAnyToQuantum(pixel,range));
                       p=PushShortPixel(MSBEndian,p,&pixel);
-                      indexes[x]=ScaleAnyToQuantum(pixel,range);
+                      SetIndexPixelComponent(indexes+x,ScaleAnyToQuantum(pixel,
+                        range));
                       SetOpacityPixelComponent(q,OpaqueOpacity);
                       if (image->matte != MagickFalse)
                         {
                           p=PushShortPixel(MSBEndian,p,&pixel);
-                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range));
+                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,
+                            range));
                         }
                       q++;
                     }
@@ -1130,7 +1124,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                       if (image->matte != MagickFalse)
                         {
                           p=PushCharPixel(p,&pixel);
-                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range));
+                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,
+                            range));
                         }
                       q++;
                     }
@@ -1152,7 +1147,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                       if (image->matte != MagickFalse)
                         {
                           p=PushShortPixel(MSBEndian,p,&pixel);
-                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range));
+                          SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,
+                            range));
                         }
                       q++;
                     }
@@ -1193,9 +1189,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
         extent=GetQuantumExtent(image,quantum_info,quantum_type);
         for (y=0; y < (ssize_t) image->rows; y++)
         {
-          ssize_t
-            offset;
-
           MagickBooleanType
             sync;
 
@@ -1203,7 +1196,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
             *restrict q;
 
           ssize_t
-            count;
+            count,
+            offset;
 
           size_t
             length;
@@ -1222,8 +1216,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception)
                 MagickBooleanType
                   proceed;
 
-                proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) row,
-                image->rows);
+                proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType)
+                  row,image->rows);
                 if (proceed == MagickFalse)
                   status=MagickFalse;
               }
@@ -1433,9 +1427,6 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
   IndexPacket
     index;
 
-  ssize_t
-    y;
-
   MagickBooleanType
     status;
 
@@ -1451,20 +1442,18 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
   QuantumType
     quantum_type;
 
-  register ssize_t
-    i;
-
   register unsigned char
     *pixels,
     *q;
 
-  ssize_t
-    count;
-
   size_t
     extent,
     packet_size;
 
+  ssize_t
+    count,
+    y;
+
   /*
     Open output image file.
   */
@@ -1570,8 +1559,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
       {
         if (image->colorspace != RGBColorspace)
           (void) TransformImageColorspace(image,RGBColorspace);
-        (void) FormatMagickString(buffer,MaxTextExtent,"%lu %lu\n",
-          (unsigned long) image->columns,(unsigned long) image->rows);
+        (void) FormatMagickString(buffer,MaxTextExtent,"%.20g %.20g\n",
+          (double) image->columns,(double) image->rows);
         (void) WriteBlobString(image,buffer);
       }
     else
@@ -1583,8 +1572,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
           PAM header.
         */
         (void) FormatMagickString(buffer,MaxTextExtent,
-          "WIDTH %lu\nHEIGHT %lu\n",(unsigned long) image->columns,
-          (unsigned long) image->rows);
+          "WIDTH %.20g\nHEIGHT %.20g\n",(double) image->columns,(double)
+          image->rows);
         (void) WriteBlobString(image,buffer);
         quantum_type=GetQuantumType(image,&image->exception);
         switch (quantum_type)
@@ -1621,7 +1610,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
         if (image->depth > 16)
           image->depth=16;
         (void) FormatMagickString(buffer,MaxTextExtent,
-          "DEPTH %lu\nMAXVAL %lu\n",(unsigned long) packet_size,(unsigned long)
+          "DEPTH %.20g\nMAXVAL %.20g\n",(double) packet_size,(double)
           GetQuantumRange(image->depth));
         (void) WriteBlobString(image,buffer);
         (void) FormatMagickString(buffer,MaxTextExtent,"TUPLTYPE %s\nENDHDR\n",
@@ -1644,9 +1633,6 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
         q=pixels;
         for (y=0; y < (ssize_t) image->rows; y++)
         {
-          register const IndexPacket
-            *restrict indexes;
-
           register const PixelPacket
             *restrict p;
 
@@ -1656,7 +1642,6 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
           p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
           if (p == (const PixelPacket *) NULL)
             break;
-          indexes=GetVirtualIndexQueue(image);
           for (x=0; x < (ssize_t) image->columns; x++)
           {
             pixel=PixelIntensityToQuantum(p);
@@ -1668,7 +1653,6 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                 *q++='\n';
                 (void) WriteBlob(image,q-pixels,pixels);
                 q=pixels;
-                i=0;
               }
             p++;
           }
@@ -1853,7 +1837,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
         */
         if (image->depth > 8)
           image->depth=16;
-        (void) FormatMagickString(buffer,MaxTextExtent,"%lu\n",(unsigned long)
+        (void) FormatMagickString(buffer,MaxTextExtent,"%.20g\n",(double)
           GetQuantumRange(image->depth));
         (void) WriteBlobString(image,buffer);
         quantum_info=AcquireQuantumInfo((const ImageInfo *) NULL,image);
@@ -1890,7 +1874,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                       if (image->depth == 8)
                         pixel=ScaleQuantumToChar(GetRedPixelComponent(p));
                       else
-                        pixel=ScaleQuantumToAny(p->red,range);
+                        pixel=ScaleQuantumToAny(GetRedPixelComponent(p),range);
                     }
                   q=PopCharPixel((unsigned char) pixel,q);
                   p++;
@@ -1905,7 +1889,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                       if (image->depth == 16)
                         pixel=ScaleQuantumToShort(GetRedPixelComponent(p));
                       else
-                        pixel=ScaleQuantumToAny(p->red,range);
+                        pixel=ScaleQuantumToAny(GetRedPixelComponent(p),range);
                     }
                   q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
                   p++;
@@ -1936,7 +1920,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
         */
         if (image->depth > 8)
           image->depth=16;
-        (void) FormatMagickString(buffer,MaxTextExtent,"%lu\n",(unsigned long)
+        (void) FormatMagickString(buffer,MaxTextExtent,"%.20g\n",(double)
           GetQuantumRange(image->depth));
         (void) WriteBlobString(image,buffer);
         quantum_info=AcquireQuantumInfo((const ImageInfo *) NULL,image);
@@ -1965,22 +1949,22 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
               if (image->depth <= 8)
                 for (x=0; x < (ssize_t) image->columns; x++)
                 {
-                  pixel=ScaleQuantumToAny(p->red,range);
+                  pixel=ScaleQuantumToAny(GetRedPixelComponent(p),range);
                   q=PopCharPixel((unsigned char) pixel,q);
-                  pixel=ScaleQuantumToAny(p->green,range);
+                  pixel=ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                   q=PopCharPixel((unsigned char) pixel,q);
-                  pixel=ScaleQuantumToAny(p->blue,range);
+                  pixel=ScaleQuantumToAny(GetBluePixelComponent(p),range);
                   q=PopCharPixel((unsigned char) pixel,q);
                   p++;
                 }
               else
                 for (x=0; x < (ssize_t) image->columns; x++)
                 {
-                  pixel=ScaleQuantumToAny(p->red,range);
+                  pixel=ScaleQuantumToAny(GetRedPixelComponent(p),range);
                   q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
-                  pixel=ScaleQuantumToAny(p->green,range);
+                  pixel=ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                   q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
-                  pixel=ScaleQuantumToAny(p->blue,range);
+                  pixel=ScaleQuantumToAny(GetBluePixelComponent(p),range);
                   q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
                   p++;
                 }
@@ -2046,8 +2030,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                       q=PopCharPixel((unsigned char) pixel,q);
                       if (image->matte != MagickFalse)
                         {
-                          pixel=(unsigned char) ScaleQuantumToAny(p->opacity,
-                            range);
+                          pixel=(unsigned char) ScaleQuantumToAny(
+                            GetOpacityPixelComponent(p),range);
                           q=PopCharPixel((unsigned char) pixel,q);
                         }
                       p++;
@@ -2059,8 +2043,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                       q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
                       if (image->matte != MagickFalse)
                         {
-                          pixel=(unsigned char) ScaleQuantumToAny(p->opacity,
-                            range);
+                          pixel=(unsigned char) ScaleQuantumToAny(
+                            GetOpacityPixelComponent(p),range);
                           q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
                         }
                       p++;
@@ -2073,13 +2057,14 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                   if (image->depth <= 8)
                     for (x=0; x < (ssize_t) image->columns; x++)
                     {
-                      pixel=ScaleQuantumToAny(p->red,range);
+                      pixel=ScaleQuantumToAny(GetRedPixelComponent(p),range);
                       q=PopCharPixel((unsigned char) pixel,q);
-                      pixel=ScaleQuantumToAny(p->green,range);
+                      pixel=ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                       q=PopCharPixel((unsigned char) pixel,q);
-                      pixel=ScaleQuantumToAny(p->blue,range);
+                      pixel=ScaleQuantumToAny(GetBluePixelComponent(p),range);
                       q=PopCharPixel((unsigned char) pixel,q);
-                      pixel=ScaleQuantumToAny(indexes[x],range);
+                      pixel=ScaleQuantumToAny(
+                        GetIndexPixelComponent(indexes+x),range);
                       q=PopCharPixel((unsigned char) pixel,q);
                       if (image->matte != MagickFalse)
                         {
@@ -2092,13 +2077,14 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                   else
                     for (x=0; x < (ssize_t) image->columns; x++)
                     {
-                      pixel=ScaleQuantumToAny(p->red,range);
+                      pixel=ScaleQuantumToAny(GetRedPixelComponent(p),range);
                       q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
-                      pixel=ScaleQuantumToAny(p->green,range);
+                      pixel=ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                       q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
-                      pixel=ScaleQuantumToAny(p->blue,range);
+                      pixel=ScaleQuantumToAny(GetBluePixelComponent(p),range);
                       q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
-                      pixel=ScaleQuantumToAny(indexes[x],range);
+                      pixel=ScaleQuantumToAny(
+                        GetIndexPixelComponent(indexes+x),range);
                       q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
                       if (image->matte != MagickFalse)
                         {
@@ -2115,11 +2101,11 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                   if (image->depth <= 8)
                     for (x=0; x < (ssize_t) image->columns; x++)
                     {
-                      pixel=ScaleQuantumToAny(p->red,range);
+                      pixel=ScaleQuantumToAny(GetRedPixelComponent(p),range);
                       q=PopCharPixel((unsigned char) pixel,q);
-                      pixel=ScaleQuantumToAny(p->green,range);
+                      pixel=ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                       q=PopCharPixel((unsigned char) pixel,q);
-                      pixel=ScaleQuantumToAny(p->blue,range);
+                      pixel=ScaleQuantumToAny(GetBluePixelComponent(p),range);
                       q=PopCharPixel((unsigned char) pixel,q);
                       if (image->matte != MagickFalse)
                         {
@@ -2132,11 +2118,11 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image)
                   else
                     for (x=0; x < (ssize_t) image->columns; x++)
                     {
-                      pixel=ScaleQuantumToAny(p->red,range);
+                      pixel=ScaleQuantumToAny(GetRedPixelComponent(p),range);
                       q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
-                      pixel=ScaleQuantumToAny(p->green,range);
+                      pixel=ScaleQuantumToAny(GetGreenPixelComponent(p),range);
                       q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
-                      pixel=ScaleQuantumToAny(p->blue,range);
+                      pixel=ScaleQuantumToAny(GetBluePixelComponent(p),range);
                       q=PopShortPixel(MSBEndian,(unsigned short) pixel,q);
                       if (image->matte != MagickFalse)
                         {