% 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 %
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;
*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.
*/
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)))
{
#define MaxCount 128
#define MaxPackbitsRunlength 128
- ssize_t
- count,
- repeat_count,
- runlength;
-
register const unsigned char
*p;
size_t
length;
+ ssize_t
+ count,
+ repeat_count,
+ runlength;
+
unsigned char
index;
c,
code;
- ssize_t
- flags,
- j,
- version,
- y;
-
MagickBooleanType
jpeg,
status;
length;
ssize_t
- count;
+ count,
+ flags,
+ j,
+ version,
+ y;
StringInfo
*profile;
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
{
{
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)
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++;
if (info == (unsigned char *) NULL)
break;
count=ReadBlob(image,length,info);
+ (void) count;
switch (type)
{
case 0xe0:
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));
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");
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");
x_resolution,
y_resolution;
- ssize_t
- y;
-
MagickBooleanType
status;
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,
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;
}
{
(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
{