]> granicus.if.org Git - imagemagick/blobdiff - coders/pict.c
(no commit message)
[imagemagick] / coders / pict.c
index a42b87c4de343b5b9fd246eb343f13171ad75e2a..a394e53e923a0e1684079a20ba3fdcb5a29830c6 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  %
@@ -427,10 +427,6 @@ static unsigned char *ExpandBuffer(unsigned char *pixels,
 static unsigned char *DecodeImage(Image *blob,Image *image,
   size_t bytes_per_line,const unsigned int bits_per_pixel,size_t *extent)
 {
-  ssize_t
-    j,
-    y;
-
   MagickSizeType
     number_pixels;
 
@@ -442,21 +438,21 @@ static unsigned char *DecodeImage(Image *blob,Image *image,
     *q;
 
   size_t
+    bytes_per_pixel,
     length,
-    row_bytes;
+    row_bytes,
+    scanline_length,
+    width;
 
   ssize_t
-    count;
+    count,
+    j,
+    y;
 
   unsigned char
     *pixels,
     *scanline;
 
-  size_t
-    bytes_per_pixel,
-    scanline_length,
-    width;
-
   /*
     Determine pixel buffer size.
   */
@@ -499,6 +495,7 @@ static unsigned char *DecodeImage(Image *blob,Image *image,
         q=pixels+y*width;
         number_pixels=bytes_per_line;
         count=ReadBlob(blob,(size_t) number_pixels,scanline);
+        (void) count;
         p=ExpandBuffer(scanline,&number_pixels,bits_per_pixel);
         if ((q+number_pixels) > (pixels+(*extent)))
           {
@@ -595,11 +592,6 @@ static size_t EncodeImage(Image *image,const unsigned char *scanline,
 #define MaxCount  128
 #define MaxPackbitsRunlength  128
 
-  ssize_t
-    count,
-    repeat_count,
-    runlength;
-
   register const unsigned char
     *p;
 
@@ -612,6 +604,11 @@ static size_t EncodeImage(Image *image,const unsigned char *scanline,
   size_t
     length;
 
+  ssize_t
+    count,
+    repeat_count,
+    runlength;
+
   unsigned char
     index;
 
@@ -805,12 +802,6 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
     c,
     code;
 
-  ssize_t
-    flags,
-    j,
-    version,
-    y;
-
   MagickBooleanType
     jpeg,
     status;
@@ -838,7 +829,11 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
     length;
 
   ssize_t
-    count;
+    count,
+    flags,
+    j,
+    version,
+    y;
 
   StringInfo
     *profile;
@@ -1179,10 +1174,13 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
                 if (tile_image->storage_class == PseudoClass)
                   {
                     index=ConstrainColormapIndex(tile_image,*p);
-                    indexes[x]=index;
-                    q->red=tile_image->colormap[(ssize_t) index].red;
-                    q->green=tile_image->colormap[(ssize_t) index].green;
-                    q->blue=tile_image->colormap[(ssize_t) index].blue;
+                    SetIndexPixelComponent(indexes+x,index);
+                    SetRedPixelComponent(q,
+                      tile_image->colormap[(ssize_t) index].red);
+                    SetGreenPixelComponent(q,
+                      tile_image->colormap[(ssize_t) index].green);
+                    SetBluePixelComponent(q,
+                      tile_image->colormap[(ssize_t) index].blue);
                   }
                 else
                   {
@@ -1190,12 +1188,13 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
                       {
                         i=(*p++);
                         j=(*p);
-                        q->red=ScaleCharToQuantum((unsigned char)
-                          ((i & 0x7c) << 1));
-                        q->green=ScaleCharToQuantum((unsigned char)
-                          (((i & 0x03) << 6) | ((j & 0xe0) >> 2)));
-                        q->blue=ScaleCharToQuantum((unsigned char)
-                          ((j & 0x1f) << 3));
+                        SetRedPixelComponent(q,ScaleCharToQuantum(
+                          (unsigned char) ((i & 0x7c) << 1)));
+                        SetGreenPixelComponent(q,ScaleCharToQuantum(
+                          (unsigned char) (((i & 0x03) << 6) |
+                          ((j & 0xe0) >> 2))));
+                        SetBluePixelComponent(q,ScaleCharToQuantum(
+                          (unsigned char) ((j & 0x1f) << 3)));
                       }
                     else
                       if (tile_image->matte == MagickFalse)
@@ -1203,24 +1202,25 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
                           if (p > (pixels+extent+2*image->columns))
                             ThrowReaderException(CorruptImageError,
                               "NotEnoughPixelData");
-                          q->red=ScaleCharToQuantum(*p);
-                          q->green=ScaleCharToQuantum(
-                            *(p+tile_image->columns));
-                          q->blue=ScaleCharToQuantum(
-                            *(p+2*tile_image->columns));
+                          SetRedPixelComponent(q,ScaleCharToQuantum(*p));
+                          SetGreenPixelComponent(q,ScaleCharToQuantum(
+                            *(p+tile_image->columns)));
+                          SetBluePixelComponent(q,ScaleCharToQuantum(
+                            *(p+2*tile_image->columns)));
                         }
                       else
                         {
                           if (p > (pixels+extent+3*image->columns))
                             ThrowReaderException(CorruptImageError,
                               "NotEnoughPixelData");
-                          q->opacity=(Quantum) (QuantumRange-
-                            ScaleCharToQuantum(*p));
-                          q->red=ScaleCharToQuantum(*(p+tile_image->columns));
-                          q->green=(Quantum) ScaleCharToQuantum(
-                            *(p+2*tile_image->columns));
-                          q->blue=ScaleCharToQuantum(
-                            *(p+3*tile_image->columns));
+                          SetOpacityPixelComponent(q,(Quantum) (QuantumRange-
+                            ScaleCharToQuantum(*p)));
+                          SetRedPixelComponent(q,ScaleCharToQuantum(
+                            *(p+tile_image->columns)));
+                          SetGreenPixelComponent(q,ScaleCharToQuantum(
+                            *(p+2*tile_image->columns)));
+                          SetBluePixelComponent(q,ScaleCharToQuantum(
+                            *(p+3*tile_image->columns)));
                         }
                   }
                 p++;
@@ -1271,6 +1271,7 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
             if (info == (unsigned char *) NULL)
               break;
             count=ReadBlob(image,length,info);
+            (void) count;
             switch (type)
             {
               case 0xe0:
@@ -1380,9 +1381,9 @@ static Image *ReadPICTImage(const ImageInfo *image_info,
         read_info=DestroyImageInfo(read_info);
         if (tile_image == (Image *) NULL)
           continue;
-        (void) FormatMagickString(geometry,MaxTextExtent,"%lux%lu",
-          (unsigned long) MagickMax(image->columns,tile_image->columns),
-          (unsigned long) MagickMax(image->rows,tile_image->rows));
+        (void) FormatMagickString(geometry,MaxTextExtent,"%.20gx%.20g",
+          (double) MagickMax(image->columns,tile_image->columns),
+          (double) MagickMax(image->rows,tile_image->rows));
         (void) SetImageExtent(image,
           MagickMax(image->columns,tile_image->columns),
           MagickMax(image->rows,tile_image->rows));
@@ -1455,6 +1456,7 @@ ModuleExport size_t RegisterPICTImage(void)
   entry->decoder=(DecodeImageHandler *) ReadPICTImage;
   entry->encoder=(EncodeImageHandler *) WritePICTImage;
   entry->adjoin=MagickFalse;
+  entry->seekable_stream=MagickTrue;
   entry->description=ConstantString("Apple Macintosh QuickDraw/PICT");
   entry->magick=(IsImageFormatHandler *) IsPICT;
   entry->module=ConstantString("PICT");
@@ -1463,6 +1465,7 @@ ModuleExport size_t RegisterPICTImage(void)
   entry->decoder=(DecodeImageHandler *) ReadPICTImage;
   entry->encoder=(EncodeImageHandler *) WritePICTImage;
   entry->adjoin=MagickFalse;
+  entry->seekable_stream=MagickTrue;
   entry->description=ConstantString("Apple Macintosh QuickDraw/PICT");
   entry->magick=(IsImageFormatHandler *) IsPICT;
   entry->module=ConstantString("PICT");
@@ -1541,9 +1544,6 @@ static MagickBooleanType WritePICTImage(const ImageInfo *image_info,
     x_resolution,
     y_resolution;
 
-  ssize_t
-    y;
-
   MagickBooleanType
     status;
 
@@ -1572,16 +1572,18 @@ static MagickBooleanType WritePICTImage(const ImageInfo *image_info,
     x;
 
   size_t
-    count;
+    bytes_per_line,
+    count,
+    storage_class;
+
+  ssize_t
+    y;
 
   unsigned char
     *buffer,
     *packed_scanline,
     *scanline;
 
-  size_t
-    bytes_per_line,
-    storage_class;
 
   unsigned short
     base_address,
@@ -1884,13 +1886,13 @@ static MagickBooleanType WritePICTImage(const ImageInfo *image_info,
         break;
       indexes=GetVirtualIndexQueue(image);
       for (x=0; x < (ssize_t) image->columns; x++)
-        scanline[x]=(unsigned char) indexes[x];
+        scanline[x]=(unsigned char) GetIndexPixelComponent(indexes+x);
       count+=EncodeImage(image,scanline,(size_t) (row_bytes & 0x7FFF),
         packed_scanline);
       if (image->previous == (Image *) NULL)
         {
           status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
-                image->rows);
+            image->rows);
           if (status == MagickFalse)
             break;
         }
@@ -1900,8 +1902,8 @@ static MagickBooleanType WritePICTImage(const ImageInfo *image_info,
       {
         (void) ResetMagickMemory(scanline,0,row_bytes);
         for (y=0; y < (ssize_t) image->rows; y++)
-          count+=EncodeImage(image,scanline,(size_t)
-            (row_bytes & 0x7FFF),packed_scanline);
+          count+=EncodeImage(image,scanline,(size_t) (row_bytes & 0x7FFF),
+            packed_scanline);
       }
     else
       {