]> granicus.if.org Git - imagemagick/blobdiff - coders/rle.c
Fixed api call to Ghostscript.
[imagemagick] / coders / rle.c
index 20f2ac3e6912fde24eb230281c5494ef5b112f45..a1fb820694bd030bd7880a16529c745b07d72a29 100644 (file)
 %                          Read URT RLE Image Format                          %
 %                                                                             %
 %                              Software Design                                %
-%                                John Cristy                                  %
+%                                   Cristy                                    %
 %                                 July 1992                                   %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2014 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  %
@@ -149,6 +149,9 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
   MagickSizeType
     number_pixels;
 
+  MemoryInfo
+    *pixel_info;
+
   register ssize_t
     x;
 
@@ -177,7 +180,7 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
     *colormap,
     pixel,
     plane,
-    *rle_pixels;
+    *pixels;
 
   /*
     Open image file.
@@ -212,12 +215,12 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
     image->columns=ReadBlobLSBShort(image);
     image->rows=ReadBlobLSBShort(image);
     flags=(MagickStatusType) ReadBlobByte(image);
-    image->matte=flags & 0x04 ? MagickTrue : MagickFalse;
+    image->alpha_trait=flags & 0x04 ? BlendPixelTrait : UndefinedPixelTrait;
     number_planes=1UL*ReadBlobByte(image);
     bits_per_pixel=1UL*ReadBlobByte(image);
     number_colormaps=1UL*ReadBlobByte(image);
     one=1;
-    map_length=one << ReadBlobByte(image);
+    map_length=one << (unsigned char) ReadBlobByte(image);
     if ((number_planes == 0) || (number_planes == 2) || (bits_per_pixel != 8) ||
         (image->columns == 0))
       ThrowReaderException(CorruptImageError,"ImproperImageHeader");
@@ -287,15 +290,16 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
     /*
       Allocate RLE pixels.
     */
-    if (image->matte != MagickFalse)
+    if (image->alpha_trait == BlendPixelTrait)
       number_planes++;
     number_pixels=(MagickSizeType) image->columns*image->rows;
     if ((number_pixels*number_planes) != (size_t) (number_pixels*number_planes))
       ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
-    rle_pixels=(unsigned char *) AcquireQuantumMemory(image->columns,
-      image->rows*number_planes*sizeof(*rle_pixels));
-    if (rle_pixels == (unsigned char *) NULL)
+    pixel_info=AcquireVirtualMemory(image->columns,image->rows*number_planes*
+      sizeof(*pixels));
+    if (pixel_info == (MemoryInfo *) NULL)
       ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
+    pixels=(unsigned char *) GetVirtualMemoryBlob(pixel_info);
     if ((flags & 0x01) && !(flags & 0x02))
       {
         ssize_t
@@ -304,10 +308,10 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
         /*
           Set background color.
         */
-        p=rle_pixels;
+        p=pixels;
         for (i=0; i < (ssize_t) number_pixels; i++)
         {
-          if (image->matte == MagickFalse)
+          if (image->alpha_trait != BlendPixelTrait)
             for (j=0; j < (ssize_t) number_planes; j++)
               *p++=background_color[j];
           else
@@ -360,7 +364,7 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
           operand=ReadBlobByte(image);
           if (opcode & 0x40)
             operand=(int) ReadBlobLSBShort(image);
-          p=rle_pixels+((image->rows-y-1)*image->columns*number_planes)+
+          p=pixels+((image->rows-y-1)*image->columns*number_planes)+
             x*number_planes+plane;
           operand++;
           for (i=0; i < (ssize_t) operand; i++)
@@ -384,7 +388,7 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
           pixel=(unsigned char) ReadBlobByte(image);
           (void) ReadBlobByte(image);
           operand++;
-          p=rle_pixels+((image->rows-y-1)*image->columns*number_planes)+
+          p=pixels+((image->rows-y-1)*image->columns*number_planes)+
             x*number_planes+plane;
           for (i=0; i < (ssize_t) operand; i++)
           {
@@ -410,7 +414,7 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
           Apply colormap affineation to image.
         */
         mask=(MagickStatusType) (map_length-1);
-        p=rle_pixels;
+        p=pixels;
         if (number_colormaps == 1)
           for (i=0; i < (ssize_t) number_pixels; i++)
           {
@@ -434,7 +438,7 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
         /*
           Convert raster image to DirectClass pixel packets.
         */
-        p=rle_pixels;
+        p=pixels;
         for (y=0; y < (ssize_t) image->rows; y++)
         {
           q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);
@@ -445,7 +449,7 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
             SetPixelRed(image,ScaleCharToQuantum(*p++),q);
             SetPixelGreen(image,ScaleCharToQuantum(*p++),q);
             SetPixelBlue(image,ScaleCharToQuantum(*p++),q);
-            if (image->matte != MagickFalse)
+            if (image->alpha_trait == BlendPixelTrait)
               SetPixelAlpha(image,ScaleCharToQuantum(*p++),q);
             q+=GetPixelChannels(image);
           }
@@ -489,8 +493,8 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
               image->colormap[i].blue=ScaleCharToQuantum(*(p+map_length*2));
               p++;
             }
-        p=rle_pixels;
-        if (image->matte == MagickFalse)
+        p=pixels;
+        if (image->alpha_trait != BlendPixelTrait)
           {
             /*
               Convert raster image to PseudoClass pixel packets.
@@ -515,7 +519,7 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
                     break;
                 }
             }
-            (void) SyncImage(image);
+            (void) SyncImage(image,exception);
           }
         else
           {
@@ -553,7 +557,7 @@ static Image *ReadRLEImage(const ImageInfo *image_info,ExceptionInfo *exception)
       }
     if (number_colormaps != 0)
       colormap=(unsigned char *) RelinquishMagickMemory(colormap);
-    rle_pixels=(unsigned char *) RelinquishMagickMemory(rle_pixels);
+    pixel_info=RelinquishVirtualMemory(pixel_info);
     if (EOFBlob(image) != MagickFalse)
       {
         ThrowFileException(exception,CorruptImageError,"UnexpectedEndOfFile",