]> granicus.if.org Git - imagemagick/blobdiff - coders/wpg.c
(no commit message)
[imagemagick] / coders / wpg.c
index 3c2719be8ecfe44c27d57b070d664cff3cab1585..9d267328e2a56cd29ad6202468eb60cbebcf78a3 100644 (file)
@@ -16,7 +16,7 @@
 %                                 June 2000                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2013 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  %
@@ -48,6 +48,7 @@
 #include "MagickCore/exception.h"
 #include "MagickCore/exception-private.h"
 #include "MagickCore/cache.h"
+#include "MagickCore/distort.h"
 #include "MagickCore/image.h"
 #include "MagickCore/image-private.h"
 #include "MagickCore/list.h"
@@ -57,7 +58,6 @@
 #include "MagickCore/resource_.h"
 #include "MagickCore/pixel-accessor.h"
 #include "MagickCore/quantum-private.h"
-#include "MagickCore/shear.h"
 #include "MagickCore/static.h"
 #include "MagickCore/string_.h"
 #include "MagickCore/module.h"
@@ -264,11 +264,9 @@ static void Rd_WP_DWORD(Image *image,size_t *d)
   return;
 }
 
-static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
+static void InsertRow(Image *image,unsigned char *p,ssize_t y,int bpp,
+  ExceptionInfo *exception)
 {
-  ExceptionInfo
-    *exception;
-
   int
     bit;
 
@@ -281,7 +279,6 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
   ssize_t
     x;
 
-  exception=(&image->exception);
   switch (bpp)
     {
     case 1:  /* Convert bitmap scanline. */
@@ -295,7 +292,7 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
           {
             index=((*p) & (0x80 >> bit) ? 0x01 : 0x00);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
           }
           p++;
@@ -306,7 +303,7 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
             {
               index=((*p) & (0x80 >> bit) ? 0x01 : 0x00);
               SetPixelIndex(image,index,q);
-              SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+              SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
               q+=GetPixelChannels(image);
             }
             p++;
@@ -322,43 +319,44 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
           break;
         for (x=0; x < ((ssize_t) image->columns-1); x+=2)
         {
-            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p >> 2) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 2) & 0x3,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p) & 0x3);
+            index=ConstrainColormapIndex(image,(*p) & 0x3,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             p++;
             q+=GetPixelChannels(image);
         }
        if ((image->columns % 4) != 0)
           {
-            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3);
+            index=ConstrainColormapIndex(image,(*p >> 6) & 0x3,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
             if ((image->columns % 4) >= 1)
 
               {
-                index=ConstrainColormapIndex(image,(*p >> 4) & 0x3);
+                index=ConstrainColormapIndex(image,(*p >> 4) & 0x3,exception);
                 SetPixelIndex(image,index,q);
-                SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+                SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
                 q+=GetPixelChannels(image);
                 if ((image->columns % 4) >= 2)
 
                   {
-                    index=ConstrainColormapIndex(image,(*p >> 2) & 0x3);
+                    index=ConstrainColormapIndex(image,(*p >> 2) & 0x3,
+                      exception);
                     SetPixelIndex(image,index,q);
-                    SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+                    SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
                     q+=GetPixelChannels(image);
                   }
               }
@@ -376,21 +374,21 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
           break;
         for (x=0; x < ((ssize_t) image->columns-1); x+=2)
           { 
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             q+=GetPixelChannels(image);
-            index=ConstrainColormapIndex(image,(*p) & 0x0f);
+            index=ConstrainColormapIndex(image,(*p) & 0x0f,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             p++;
             q+=GetPixelChannels(image);
           }
         if ((image->columns % 2) != 0)
           {
-            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f);
+            index=ConstrainColormapIndex(image,(*p >> 4) & 0x0f,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             p++;
             q+=GetPixelChannels(image);
           }
@@ -405,9 +403,9 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
 
         for (x=0; x < (ssize_t) image->columns; x++)
           {
-            index=ConstrainColormapIndex(image,*p);
+            index=ConstrainColormapIndex(image,*p,exception);
             SetPixelIndex(image,index,q);
-            SetPixelPixelInfo(image,image->colormap+(ssize_t) index,q);
+            SetPixelInfoPixel(image,image->colormap+(ssize_t) index,q);
             p++;
             q+=GetPixelChannels(image);
           }
@@ -441,13 +439,13 @@ static void InsertRow(unsigned char *p,ssize_t y,Image *image, int bpp)
   x++; \
   if((ssize_t) x>=ldblk) \
   { \
-    InsertRow(BImgBuff,(ssize_t) y,image,bpp); \
+    InsertRow(image,BImgBuff,(ssize_t) y,bpp,exception); \
     x=0; \
     y++; \
     } \
 }
 /* WPG1 raster reader. */
-static int UnpackWPGRaster(Image *image,int bpp)
+static int UnpackWPGRaster(Image *image,int bpp,ExceptionInfo *exception)
 {
   int
     x,
@@ -513,7 +511,7 @@ static int UnpackWPGRaster(Image *image,int bpp)
                   BImgBuff=(unsigned char *) RelinquishMagickMemory(BImgBuff);
                   return(-4);
                 }
-              InsertRow(BImgBuff,y-1,image,bpp);
+              InsertRow(image,BImgBuff,y-1,bpp,exception);
             }
         }
       }
@@ -533,13 +531,13 @@ static int UnpackWPGRaster(Image *image,int bpp)
   x++; \
   if((ssize_t) x >= ldblk) \
   { \
-    InsertRow(BImgBuff,(ssize_t) y,image,bpp); \
+    InsertRow(image,BImgBuff,(ssize_t) y,bpp,exception); \
     x=0; \
     y++; \
    } \
 }
 /* WPG2 raster reader. */
-static int UnpackWPG2Raster(Image *image,int bpp)
+static int UnpackWPG2Raster(Image *image,int bpp,ExceptionInfo *exception)
 {
   size_t
     x,
@@ -614,8 +612,8 @@ static int UnpackWPG2Raster(Image *image,int bpp)
             /* duplicate the previous row RunCount x */
             for(i=0;i<=RunCount;i++)
               {      
-                InsertRow(BImgBuff,(ssize_t) (image->rows >= y ? y : image->rows-1),
-                          image,bpp);
+                InsertRow(image,BImgBuff,(ssize_t) (image->rows >= y ? y : image->rows-1),
+                          bpp,exception);
                 y++;
               }    
           }
@@ -1023,8 +1021,8 @@ static Image *ReadWPGImage(const ImageInfo *image_info,
               if(BitmapHeader1.HorzRes && BitmapHeader1.VertRes)
                 {
                   image->units=PixelsPerCentimeterResolution;
-                  image->x_resolution=BitmapHeader1.HorzRes/470.0;
-                  image->y_resolution=BitmapHeader1.VertRes/470.0;
+                  image->resolution.x=BitmapHeader1.HorzRes/470.0;
+                  image->resolution.y=BitmapHeader1.VertRes/470.0;
                 }
               image->columns=BitmapHeader1.Width;
               image->rows=BitmapHeader1.Heigth;
@@ -1079,8 +1077,8 @@ static Image *ReadWPGImage(const ImageInfo *image_info,
               image->page.y=(int) (BitmapHeader2.LowLeftX/470.0);
               if(BitmapHeader2.HorzRes && BitmapHeader2.VertRes)
                 {
-                  image->x_resolution=BitmapHeader2.HorzRes/470.0;
-                  image->y_resolution=BitmapHeader2.VertRes/470.0;
+                  image->resolution.x=BitmapHeader2.HorzRes/470.0;
+                  image->resolution.y=BitmapHeader2.VertRes/470.0;
                 }
               image->columns=BitmapHeader2.Width;
               image->rows=BitmapHeader2.Heigth;
@@ -1128,7 +1126,7 @@ static Image *ReadWPGImage(const ImageInfo *image_info,
                     }
                 }      
 
-              if(UnpackWPGRaster(image,bpp) < 0)
+              if(UnpackWPGRaster(image,bpp,exception) < 0)
                 /* The raster cannot be unpacked */
                 {
                 DecompressionFailed:
@@ -1300,7 +1298,7 @@ static Image *ReadWPGImage(const ImageInfo *image_info,
                     for(i=0; i< (ssize_t) image->rows; i++)
                       {
                         (void) ReadBlob(image,ldblk,BImgBuff);
-                        InsertRow(BImgBuff,i,image,bpp);
+                        InsertRow(image,BImgBuff,i,bpp,exception);
                       }
 
                     if(BImgBuff)
@@ -1309,7 +1307,7 @@ static Image *ReadWPGImage(const ImageInfo *image_info,
                   }
                 case 1:    /*RLE for WPG2 */
                   {
-                    if( UnpackWPG2Raster(image,bpp) < 0)
+                    if( UnpackWPG2Raster(image,bpp,exception) < 0)
                       goto DecompressionFailed;
                     break;
                   }