% July 1992 %
% %
% %
-% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2012 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 %
#include "MagickCore/colorspace-private.h"
#include "MagickCore/constitute.h"
#include "MagickCore/decorate.h"
+#include "MagickCore/distort.h"
#include "MagickCore/exception.h"
#include "MagickCore/exception-private.h"
#include "MagickCore/gem.h"
#include "MagickCore/montage.h"
#include "MagickCore/pixel-accessor.h"
#include "MagickCore/resize.h"
-#include "MagickCore/shear.h"
#include "MagickCore/quantum-private.h"
#include "MagickCore/static.h"
#include "MagickCore/string_.h"
static MagickBooleanType DecodeImage(Image *image,unsigned char *luma,
unsigned char *chroma1,unsigned char *chroma2,ExceptionInfo *exception)
{
-#define IsSync ((sum & 0xffffff00UL) == 0xfffffe00UL)
+#define IsSync(sum) ((sum & 0xffffff00UL) == 0xfffffe00UL)
#define PCDGetBits(n) \
{ \
sum=(sum << n) & 0xffffffff; \
bits+=8; \
p++; \
} \
- if (EOFBlob(image) != MagickFalse) \
- break; \
}
typedef struct PCDTable
PCDGetBits(16);
while ((sum & 0x00fff000UL) != 0x00fff000UL)
PCDGetBits(8);
- while (IsSync == 0)
+ while (IsSync(sum) == 0)
PCDGetBits(1);
/*
Recover the Huffman encoded luminance and chrominance deltas.
q=luma;
for ( ; ; )
{
- if (IsSync != 0)
+ if (IsSync(sum) != 0)
{
/*
Determine plane and row number.
r++;
if ((row > image->rows) || (r == (PCDTable *) NULL))
{
- (void) ThrowMagickException(&image->exception,GetMagickModule(),
+ (void) ThrowMagickException(exception,GetMagickModule(),
CorruptImageWarning,"SkipToSyncByte","`%s'",image->filename);
while ((sum & 0x00fff000) != 0x00fff000)
PCDGetBits(8);
- while (IsSync == 0)
+ while (IsSync(sum) == 0)
PCDGetBits(1);
continue;
}
for (p=image; p != (Image *) NULL; p=p->next)
{
(void) DeleteImageProperty(p,"label");
- (void) SetImageProperty(p,"label",DefaultTileLabel);
+ (void) SetImageProperty(p,"label",DefaultTileLabel,exception);
}
montage_info=CloneMontageInfo(image_info,(MontageInfo *) NULL);
(void) CopyMagickString(montage_info->filename,image_info->filename,
image_info->filename);
assert(exception != (ExceptionInfo *) NULL);
assert(exception->signature == MagickSignature);
- image=AcquireImage(image_info);
+ image=AcquireImage(image_info,exception);
status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
if (status == MagickFalse)
{
count=ReadBlob(image,3*0x800,header);
overview=LocaleNCompare((char *) header,"PCD_OPA",7) == 0;
if ((count == 0) ||
- ((LocaleNCompare((char *) header+0x800,"PCD",3) != 0) && !overview))
+ ((LocaleNCompare((char *) header+0x800,"PCD",3) != 0) && (overview ==0)))
ThrowReaderException(CorruptImageError,"ImproperImageHeader");
rotate=header[0x0e02] & 0x03;
number_images=(header[10] << 8) | header[11];
}
if (image_info->number_scenes != 0)
scene=(size_t) MagickMin(image_info->scene,6);
- if (overview)
+ if (overview != 0)
scene=1;
/*
Initialize image structure.
if (number_pixels != (size_t) number_pixels)
ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
chroma1=(unsigned char *) AcquireQuantumMemory(image->columns+1UL,image->rows*
- sizeof(*chroma1));
+ 10*sizeof(*chroma1));
chroma2=(unsigned char *) AcquireQuantumMemory(image->columns+1UL,image->rows*
- sizeof(*chroma2));
+ 10*sizeof(*chroma2));
luma=(unsigned char *) AcquireQuantumMemory(image->columns+1UL,image->rows*
- sizeof(*luma));
+ 10*sizeof(*luma));
if ((chroma1 == (unsigned char *) NULL) ||
(chroma2 == (unsigned char *) NULL) || (luma == (unsigned char *) NULL))
ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");
Advance to image data.
*/
offset=93;
- if (overview)
+ if (overview != 0)
offset=2;
else
if (scene == 2)
offset=1;
for (i=0; i < (ssize_t) (offset*0x800); i++)
(void) ReadBlobByte(image);
- if (overview)
+ if (overview != 0)
{
Image
*overview_image;
}
image->colorspace=YCCColorspace;
if (LocaleCompare(image_info->magick,"PCDS") == 0)
- image->colorspace=sRGBColorspace;
+ SetImageColorspace(image,sRGBColorspace,exception);
if (j < (ssize_t) number_images)
{
/*
Allocate next image structure.
*/
- AcquireNextImage(image_info,image);
+ AcquireNextImage(image_info,image,exception);
if (GetNextImageInList(image) == (Image *) NULL)
{
image=DestroyImageList(image);
image->gamma=1.000f/2.200f;
image->colorspace=YCCColorspace;
if (LocaleCompare(image_info->magick,"PCDS") == 0)
- image->colorspace=sRGBColorspace;
+ SetImageColorspace(image,sRGBColorspace,exception);
return(GetFirstImageInList(image));
}
\f
*/
static MagickBooleanType WritePCDTile(Image *image,const char *page_geometry,
- const char *tile_geometry)
+ const char *tile_geometry,ExceptionInfo *exception)
{
GeometryInfo
geometry_info;
if ((geometry.height % 2) != 0)
geometry.height--;
tile_image=ResizeImage(image,geometry.width,geometry.height,TriangleFilter,
- 1.0,&image->exception);
+ exception);
if (tile_image == (Image *) NULL)
return(MagickFalse);
flags=ParseGeometry(page_geometry,&geometry_info);
border_info.width=(geometry.width-tile_image->columns+1) >> 1;
border_info.height=(geometry.height-tile_image->rows+1) >> 1;
bordered_image=BorderImage(tile_image,&border_info,image->compose,
- &image->exception);
+ exception);
if (bordered_image == (Image *) NULL)
return(MagickFalse);
tile_image=DestroyImage(tile_image);
tile_image=bordered_image;
}
- (void) TransformImage(&tile_image,(char *) NULL,tile_geometry);
- if (IsRGBColorspace(image->colorspace) == MagickFalse)
- (void) TransformImageColorspace(tile_image,YCCColorspace);
+ (void) TransformImage(&tile_image,(char *) NULL,tile_geometry,exception);
+ if (IssRGBCompatibleColorspace(image->colorspace) == MagickFalse)
+ (void) TransformImageColorspace(tile_image,YCCColorspace,exception);
downsample_image=ResizeImage(tile_image,tile_image->columns/2,
- tile_image->rows/2,TriangleFilter,1.0,&image->exception);
+ tile_image->rows/2,TriangleFilter,exception);
if (downsample_image == (Image *) NULL)
return(MagickFalse);
/*
*/
for (y=0; y < (ssize_t) tile_image->rows; y+=2)
{
- p=GetVirtualPixels(tile_image,0,y,tile_image->columns,2,
- &tile_image->exception);
+ p=GetVirtualPixels(tile_image,0,y,tile_image->columns,2,exception);
if (p == (const Quantum *) NULL)
break;
for (x=0; x < (ssize_t) (tile_image->columns << 1); x++)
(void) WriteBlobByte(image,ScaleQuantumToChar(GetPixelRed(tile_image,p)));
p+=GetPixelChannels(tile_image);
}
- q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,
- 1,&downsample_image->exception);
+ q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,1,
+ exception);
if (q == (Quantum *) NULL)
break;
for (x=0; x < (ssize_t) downsample_image->columns; x++)
GetPixelGreen(tile_image,q)));
q++;
}
- q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,
- 1,&downsample_image->exception);
+ q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,1,
+ exception);
if (q == (Quantum *) NULL)
break;
for (x=0; x < (ssize_t) downsample_image->columns; x++)
status=OpenBlob(image_info,pcd_image,WriteBinaryBlobMode,exception);
if (status == MagickFalse)
return(status);
- if (IsRGBColorspace(image->colorspace) == MagickFalse)
- (void) TransformImageColorspace(pcd_image,RGBColorspace);
+ if (IssRGBCompatibleColorspace(pcd_image->colorspace) == MagickFalse)
+ (void) TransformImageColorspace(pcd_image,sRGBColorspace,exception);
/*
Write PCD image header.
*/
/*
Write PCD tiles.
*/
- status=WritePCDTile(pcd_image,"768x512>","192x128");
- status=WritePCDTile(pcd_image,"768x512>","384x256");
- status=WritePCDTile(pcd_image,"768x512>","768x512");
+ status=WritePCDTile(pcd_image,"768x512>","192x128",exception);
+ status=WritePCDTile(pcd_image,"768x512>","384x256",exception);
+ status=WritePCDTile(pcd_image,"768x512>","768x512",exception);
(void) CloseBlob(pcd_image);
if (pcd_image != image)
pcd_image=DestroyImage(pcd_image);