% July 1992 %
% %
% %
-% Copyright 1999-2009 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 declarations.
*/
-#include "magick/studio.h"
-#include "magick/property.h"
-#include "magick/blob.h"
-#include "magick/blob-private.h"
-#include "magick/cache.h"
-#include "magick/client.h"
-#include "magick/colorspace.h"
-#include "magick/constitute.h"
-#include "magick/decorate.h"
-#include "magick/exception.h"
-#include "magick/exception-private.h"
-#include "magick/gem.h"
-#include "magick/geometry.h"
-#include "magick/image.h"
-#include "magick/image-private.h"
-#include "magick/list.h"
-#include "magick/magick.h"
-#include "magick/memory_.h"
-#include "magick/monitor.h"
-#include "magick/monitor-private.h"
-#include "magick/montage.h"
-#include "magick/resize.h"
-#include "magick/shear.h"
-#include "magick/quantum-private.h"
-#include "magick/static.h"
-#include "magick/string_.h"
-#include "magick/module.h"
-#include "magick/transform.h"
-#include "magick/utility.h"
+#include "MagickCore/studio.h"
+#include "MagickCore/property.h"
+#include "MagickCore/blob.h"
+#include "MagickCore/blob-private.h"
+#include "MagickCore/cache.h"
+#include "MagickCore/client.h"
+#include "MagickCore/colorspace.h"
+#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/geometry.h"
+#include "MagickCore/image.h"
+#include "MagickCore/image-private.h"
+#include "MagickCore/list.h"
+#include "MagickCore/magick.h"
+#include "MagickCore/memory_.h"
+#include "MagickCore/monitor.h"
+#include "MagickCore/monitor-private.h"
+#include "MagickCore/montage.h"
+#include "MagickCore/pixel-accessor.h"
+#include "MagickCore/resize.h"
+#include "MagickCore/quantum-private.h"
+#include "MagickCore/static.h"
+#include "MagickCore/string_.h"
+#include "MagickCore/module.h"
+#include "MagickCore/transform.h"
+#include "MagickCore/utility.h"
\f
/*
Forward declarations.
*/
static MagickBooleanType
- WritePCDImage(const ImageInfo *,Image *);
+ WritePCDImage(const ImageInfo *,Image *,ExceptionInfo *);
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
*/
static MagickBooleanType DecodeImage(Image *image,unsigned char *luma,
- unsigned char *chroma1,unsigned char *chroma2)
+ 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
key;
} PCDTable;
- long
- quantum;
-
PCDTable
*pcd_table[3];
- register long
+ register ssize_t
i,
j;
*q;
size_t
- length;
-
- ssize_t
- count;
-
- unsigned char
- *buffer;
-
- unsigned long
bits,
+ length,
plane,
pcd_length[3],
row,
sum;
+ ssize_t
+ count,
+ quantum;
+
+ unsigned char
+ *buffer;
+
/*
Initialize Huffman tables.
*/
image->filename);
}
r=pcd_table[i];
- for (j=0; j < (long) length; j++)
+ for (j=0; j < (ssize_t) length; j++)
{
PCDGetBits(8);
r->length=(unsigned int) (sum & 0xff)+1;
r->mask=(~((1U << (32-r->length))-1));
r++;
}
- pcd_length[i]=(unsigned long) length;
+ pcd_length[i]=(size_t) length;
}
/*
Search for Sync byte.
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.
Decode luminance or chrominance deltas.
*/
r=pcd_table[plane];
- for (i=0; ((i < (long) length) && ((sum & r->mask) != r->sequence)); i++)
+ for (i=0; ((i < (ssize_t) length) && ((sum & r->mask) != r->sequence)); i++)
r++;
- if ((row > image->rows) || (r == (PCDTable *) NULL) ||
- ((size_t) (q-luma) > (image->columns*image->rows)))
+ 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;
}
if (r->key < 128)
- quantum=(long) (*q)+r->key;
+ quantum=(ssize_t) (*q)+r->key;
else
- quantum=(long) (*q)+r->key-256;
+ quantum=(ssize_t) (*q)+r->key-256;
*q=(unsigned char) ((quantum < 0) ? 0 : (quantum > 255) ? 255 : quantum);
q++;
PCDGetBits(r->length);
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,
return(montage_image);
}
-static void Upsample(const unsigned long width,const unsigned long height,
- const unsigned long scaled_width,unsigned char *pixels)
+static void Upsample(const size_t width,const size_t height,
+ const size_t scaled_width,unsigned char *pixels)
{
- register long
+ register ssize_t
x,
y;
Create a new image that is a integral size greater than an existing one.
*/
assert(pixels != (unsigned char *) NULL);
- for (y=0; y < (long) height; y++)
+ for (y=0; y < (ssize_t) height; y++)
{
p=pixels+(height-1-y)*scaled_width+(width-1);
q=pixels+((height-1-y) << 1)*scaled_width+((width-1) << 1);
*q=(*p);
*(q+1)=(*(p));
- for (x=1; x < (long) width; x++)
+ for (x=1; x < (ssize_t) width; x++)
{
p--;
q-=2;
*q=(*p);
- *(q+1)=(unsigned char) ((((unsigned long) *p)+
- ((unsigned long) *(p+1))+1) >> 1);
+ *(q+1)=(unsigned char) ((((size_t) *p)+((size_t) *(p+1))+1) >> 1);
}
}
- for (y=0; y < (long) (height-1); y++)
+ for (y=0; y < (ssize_t) (height-1); y++)
{
- p=pixels+((unsigned long) y << 1)*scaled_width;
+ p=pixels+((size_t) y << 1)*scaled_width;
q=p+scaled_width;
r=q+scaled_width;
- for (x=0; x < (long) (width-1); x++)
+ for (x=0; x < (ssize_t) (width-1); x++)
{
- *q=(unsigned char) ((((unsigned long) *p)+((unsigned long) *r)+1) >> 1);
- *(q+1)=(unsigned char) ((((unsigned long) *p)+((unsigned long) *(p+2))+
- ((unsigned long) *r)+((unsigned long) *(r+2))+2) >> 2);
+ *q=(unsigned char) ((((size_t) *p)+((size_t) *r)+1) >> 1);
+ *(q+1)=(unsigned char) ((((size_t) *p)+((size_t) *(p+2))+
+ ((size_t) *r)+((size_t) *(r+2))+2) >> 2);
q+=2;
p+=2;
r+=2;
}
- *q++=(unsigned char) ((((unsigned long) *p++)+
- ((unsigned long) *r++)+1) >> 1);
- *q++=(unsigned char) ((((unsigned long) *p++)+
- ((unsigned long) *r++)+1) >> 1);
+ *q++=(unsigned char) ((((size_t) *p++)+((size_t) *r++)+1) >> 1);
+ *q++=(unsigned char) ((((size_t) *p++)+((size_t) *r++)+1) >> 1);
}
p=pixels+(2*height-2)*scaled_width;
q=pixels+(2*height-1)*scaled_width;
Image
*image;
- long
- x;
-
MagickBooleanType
status;
MagickSizeType
number_pixels;
- register long
+ register ssize_t
i,
y;
- register PixelPacket
+ register Quantum
*q;
register unsigned char
*c2,
*yy;
+ size_t
+ height,
+ number_images,
+ rotate,
+ scene,
+ width;
+
ssize_t
- count;
+ count,
+ x;
unsigned char
*chroma1,
unsigned int
overview;
- unsigned long
- height,
- number_images,
- rotate,
- scene,
- width;
-
/*
Open image file.
*/
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=(unsigned long) MagickMin(image_info->scene,6);
- if (overview)
+ scene=(size_t) MagickMin(image_info->scene,6);
+ if (overview != 0)
scene=1;
/*
Initialize image structure.
*/
width=192;
height=128;
- for (i=1; i < (long) MagickMin(scene,3); i++)
+ for (i=1; i < (ssize_t) MagickMin(scene,3); i++)
{
width<<=1;
height<<=1;
image->columns=width;
image->rows=height;
image->depth=8;
- for ( ; i < (long) scene; i++)
+ for ( ; i < (ssize_t) scene; i++)
{
image->columns<<=1;
image->rows<<=1;
}
/*
- Allocate lumand chroma memory.
+ Allocate luma and chroma memory.
*/
number_pixels=(MagickSizeType) image->columns*image->rows;
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)
else
if (scene <= 1)
offset=1;
- for (i=0; i < (long) (offset*0x800); i++)
+ for (i=0; i < (ssize_t) (offset*0x800); i++)
(void) ReadBlobByte(image);
- if (overview)
+ if (overview != 0)
{
Image
*overview_image;
MagickProgressMonitor
progress_monitor;
- register long
+ register ssize_t
j;
/*
Read thumbnails from overview image.
*/
- for (j=1; j <= (long) number_images; j++)
+ for (j=1; j <= (ssize_t) number_images; j++)
{
progress_monitor=SetImageProgressMonitor(image,
(MagickProgressMonitor) NULL,image->client_data);
- (void) FormatMagickString(image->filename,MaxTextExtent,
- "images/img%04ld.pcd",j);
- (void) FormatMagickString(image->magick_filename,MaxTextExtent,
- "images/img%04ld.pcd",j);
- image->scene=(unsigned long) j;
+ (void) FormatLocaleString(image->filename,MaxTextExtent,
+ "images/img%04ld.pcd",(long) j);
+ (void) FormatLocaleString(image->magick_filename,MaxTextExtent,
+ "images/img%04ld.pcd",(long) j);
+ image->scene=(size_t) j;
image->columns=width;
image->rows=height;
image->depth=8;
yy=luma;
c1=chroma1;
c2=chroma2;
- for (y=0; y < (long) height; y+=2)
+ for (y=0; y < (ssize_t) height; y+=2)
{
count=ReadBlob(image,width,yy);
yy+=image->columns;
yy=luma;
c1=chroma1;
c2=chroma2;
- for (y=0; y < (long) image->rows; y++)
+ for (y=0; y < (ssize_t) image->rows; y++)
{
q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);
- if (q == (PixelPacket *) NULL)
+ if (q == (Quantum *) NULL)
break;
- for (x=0; x < (long) image->columns; x++)
+ for (x=0; x < (ssize_t) image->columns; x++)
{
- q->red=ScaleCharToQuantum(*yy++);
- q->green=ScaleCharToQuantum(*c1++);
- q->blue=ScaleCharToQuantum(*c2++);
- q++;
+ SetPixelRed(image,ScaleCharToQuantum(*yy++),q);
+ SetPixelGreen(image,ScaleCharToQuantum(*c1++),q);
+ SetPixelBlue(image,ScaleCharToQuantum(*c2++),q);
+ q+=GetPixelChannels(image);
}
if (SyncAuthenticPixels(image,exception) == MagickFalse)
break;
}
image->colorspace=YCCColorspace;
if (LocaleCompare(image_info->magick,"PCDS") == 0)
- image->colorspace=sRGBColorspace;
- if (j < (long) number_images)
+ 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);
yy=luma;
c1=chroma1;
c2=chroma2;
- for (y=0; y < (long) height; y+=2)
+ for (y=0; y < (ssize_t) height; y+=2)
{
count=ReadBlob(image,width,yy);
yy+=image->columns;
image->rows=1024;
for (i=0; i < (4*0x800); i++)
(void) ReadBlobByte(image);
- status=DecodeImage(image,luma,chroma1,chroma2);
+ status=DecodeImage(image,luma,chroma1,chroma2,exception);
if ((scene >= 5) && status)
{
/*
image->rows=2048;
offset=TellBlob(image)/0x800+12;
offset=SeekBlob(image,offset*0x800,SEEK_SET);
- status=DecodeImage(image,luma,chroma1,chroma2);
+ status=DecodeImage(image,luma,chroma1,chroma2,exception);
if ((scene >= 6) && (status != MagickFalse))
{
/*
yy=luma;
c1=chroma1;
c2=chroma2;
- for (y=0; y < (long) image->rows; y++)
+ for (y=0; y < (ssize_t) image->rows; y++)
{
q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);
- if (q == (PixelPacket *) NULL)
+ if (q == (Quantum *) NULL)
break;
- for (x=0; x < (long) image->columns; x++)
+ for (x=0; x < (ssize_t) image->columns; x++)
{
- q->red=ScaleCharToQuantum(*yy++);
- q->green=ScaleCharToQuantum(*c1++);
- q->blue=ScaleCharToQuantum(*c2++);
- q++;
+ SetPixelRed(image,ScaleCharToQuantum(*yy++),q);
+ SetPixelGreen(image,ScaleCharToQuantum(*c1++),q);
+ SetPixelBlue(image,ScaleCharToQuantum(*c2++),q);
+ q+=GetPixelChannels(image);
}
if (SyncAuthenticPixels(image,exception) == MagickFalse)
break;
if (image->previous == (Image *) NULL)
{
- status=SetImageProgress(image,LoadImageTag,y,image->rows);
+ status=SetImageProgress(image,LoadImageTag,(MagickOffsetType) y,
+ image->rows);
if (status == MagickFalse)
break;
}
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
%
% The format of the RegisterPCDImage method is:
%
-% unsigned long RegisterPCDImage(void)
+% size_t RegisterPCDImage(void)
%
*/
-ModuleExport unsigned long RegisterPCDImage(void)
+ModuleExport size_t RegisterPCDImage(void)
{
MagickInfo
*entry;
entry->encoder=(EncodeImageHandler *) WritePCDImage;
entry->magick=(IsImageFormatHandler *) IsPCD;
entry->adjoin=MagickFalse;
+ entry->seekable_stream=MagickTrue;
entry->description=ConstantString("Photo CD");
entry->module=ConstantString("PCD");
(void) RegisterMagickInfo(entry);
entry->decoder=(DecodeImageHandler *) ReadPCDImage;
entry->encoder=(EncodeImageHandler *) WritePCDImage;
entry->adjoin=MagickFalse;
+ entry->seekable_stream=MagickTrue;
entry->description=ConstantString("Photo CD");
entry->module=ConstantString("PCD");
(void) RegisterMagickInfo(entry);
%
% The format of the WritePCDImage method is:
%
-% MagickBooleanType WritePCDImage(const ImageInfo *image_info,Image *image)
+% MagickBooleanType WritePCDImage(const ImageInfo *image_info,
+% Image *image,ExceptionInfo *exception)
%
% A description of each parameter follows.
%
%
% o image: The image.
%
+% o exception: return any errors or warnings in this structure.
+%
*/
static MagickBooleanType WritePCDTile(Image *image,const char *page_geometry,
- const char *tile_geometry)
+ const char *tile_geometry,ExceptionInfo *exception)
{
GeometryInfo
geometry_info;
*downsample_image,
*tile_image;
- long
- y;
-
MagickBooleanType
status;
RectangleInfo
geometry;
- register const PixelPacket
+ register const Quantum
*p,
*q;
- register long
+ register ssize_t
i,
x;
+ ssize_t
+ y;
+
/*
Scale image to tile size.
*/
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);
- geometry.width=(unsigned long) geometry_info.rho;
- geometry.height=(unsigned long) geometry_info.sigma;
+ geometry.width=(size_t) geometry_info.rho;
+ geometry.height=(size_t) geometry_info.sigma;
if ((flags & SigmaValue) == 0)
geometry.height=geometry.width;
if ((tile_image->columns != geometry.width) ||
*/
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->exception);
+ bordered_image=BorderImage(tile_image,&border_info,image->compose,
+ 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 (image->colorspace != RGBColorspace)
- (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);
/*
Write tile to PCD file.
*/
- for (y=0; y < (long) tile_image->rows; y+=2)
+ for (y=0; y < (ssize_t) tile_image->rows; y+=2)
{
- p=GetVirtualPixels(tile_image,0,y,tile_image->columns,2,
- &tile_image->exception);
- if (p == (const PixelPacket *) NULL)
+ p=GetVirtualPixels(tile_image,0,y,tile_image->columns,2,exception);
+ if (p == (const Quantum *) NULL)
break;
- for (x=0; x < (long) (tile_image->columns << 1); x++)
+ for (x=0; x < (ssize_t) (tile_image->columns << 1); x++)
{
- (void) WriteBlobByte(image,ScaleQuantumToChar(p->red));
- p++;
+ (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);
- if (q == (const PixelPacket *) NULL)
+ q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,1,
+ exception);
+ if (q == (Quantum *) NULL)
break;
- for (x=0; x < (long) downsample_image->columns; x++)
+ for (x=0; x < (ssize_t) downsample_image->columns; x++)
{
- (void) WriteBlobByte(image,ScaleQuantumToChar(q->green));
+ (void) WriteBlobByte(image,ScaleQuantumToChar(
+ GetPixelGreen(tile_image,q)));
q++;
}
- q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,
- 1,&downsample_image->exception);
- if (q == (const PixelPacket *) NULL)
+ q=GetVirtualPixels(downsample_image,0,y >> 1,downsample_image->columns,1,
+ exception);
+ if (q == (Quantum *) NULL)
break;
- for (x=0; x < (long) downsample_image->columns; x++)
+ for (x=0; x < (ssize_t) downsample_image->columns; x++)
{
- (void) WriteBlobByte(image,ScaleQuantumToChar(q->blue));
+ (void) WriteBlobByte(image,ScaleQuantumToChar(
+ GetPixelBlue(tile_image,q)));
q++;
}
status=SetImageProgress(image,SaveImageTag,y,tile_image->rows);
return(MagickTrue);
}
-static MagickBooleanType WritePCDImage(const ImageInfo *image_info,Image *image)
+static MagickBooleanType WritePCDImage(const ImageInfo *image_info,Image *image,
+ ExceptionInfo *exception)
{
Image
*pcd_image;
MagickBooleanType
status;
- register long
+ register ssize_t
i;
assert(image_info != (const ImageInfo *) NULL);
/*
Rotate portrait to landscape.
*/
- rotate_image=RotateImage(image,90.0,&image->exception);
+ rotate_image=RotateImage(image,90.0,exception);
if (rotate_image == (Image *) NULL)
return(MagickFalse);
pcd_image=rotate_image;
/*
Open output image file.
*/
- status=OpenBlob(image_info,pcd_image,WriteBinaryBlobMode,&image->exception);
+ status=OpenBlob(image_info,pcd_image,WriteBinaryBlobMode,exception);
if (status == MagickFalse)
return(status);
- if (image->colorspace != RGBColorspace)
- (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);