% 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 %
#include "magick/cache.h"
#include "magick/color.h"
#include "magick/color-private.h"
+#include "magick/colormap.h"
#include "magick/colorspace.h"
#include "magick/exception.h"
#include "magick/exception-private.h"
*/
static int CompareXPMColor(const void *target,const void *source)
-{
+{
const char
*p,
*q;
-
+
p=(const char *) target;
q=(const char *) source;
return(strcmp(p,q));
register const char
*q;
- register long
+ register ssize_t
i;
static const char
Image
*image;
- long
+ ssize_t
j,
y;
register IndexPacket
*indexes;
- register long
- i,
+ register ssize_t
x;
register PixelPacket
count;
unsigned long
+ colors,
+ columns,
+ rows,
width;
/*
{
if (*p != '"')
continue;
- count=(ssize_t) sscanf(p+1,"%lu %lu %lu %lu",&image->columns,&image->rows,
- &image->colors,&width);
+ count=(ssize_t) sscanf(p+1,"%lu %lu %lu %lu",&columns,&rows,&colors,&width);
+ image->columns=columns;
+ image->rows=rows;
+ image->colors=colors;
if (count == 4)
break;
}
/*
Remove unquoted characters.
*/
- i=0;
active=MagickFalse;
q=xpm_buffer;
while (*p != '\0')
/*
Read image colormap.
*/
- i=1;
next=NextXPMLine(xpm_buffer);
- for (j=0; (j < (long) image->colors) && (next != (char*) NULL); j++)
+ for (j=0; (j < (ssize_t) image->colors) && (next != (char*) NULL); j++)
{
p=next;
next=NextXPMLine(p);
image->storage_class=DirectClass;
image->matte=MagickTrue;
}
- if (QueryColorDatabase(target,&image->colormap[j],exception) == MagickFalse)
+ status=QueryColorCompliance(target,AllCompliance,&image->colormap[j],
+ exception);
+ if (status == MagickFalse)
break;
}
- if (j < (long) image->colors)
+ if (j < (ssize_t) image->colors)
ThrowReaderException(CorruptImageError,"CorruptImage");
j=0;
if (image_info->ping == MagickFalse)
/*
Read image pixels.
*/
- for (y=0; y < (long) image->rows; y++)
+ for (y=0; y < (ssize_t) image->rows; y++)
{
p=NextXPMLine(p);
if (p == (char *) NULL)
if (r == (PixelPacket *) NULL)
break;
indexes=GetAuthenticIndexQueue(image);
- for (x=0; x < (long) image->columns; x++)
+ for (x=0; x < (ssize_t) image->columns; x++)
{
(void) CopyXPMColor(key,p,(size_t) width);
- j=(long) GetValueFromSplayTree(xpm_colors,key);
+ j=(ssize_t) GetValueFromSplayTree(xpm_colors,key);
if (image->storage_class == PseudoClass)
indexes[x]=(IndexPacket) j;
*r=image->colormap[j];
if (SyncAuthenticPixels(image,exception) == MagickFalse)
break;
}
- if (y < (long) image->rows)
+ if (y < (ssize_t) image->rows)
ThrowReaderException(CorruptImageError,"NotEnoughPixelData");
}
/*
%
% The format of the RegisterXPMImage method is:
%
-% unsigned long RegisterXPMImage(void)
+% size_t RegisterXPMImage(void)
%
*/
-ModuleExport unsigned long RegisterXPMImage(void)
+ModuleExport size_t RegisterXPMImage(void)
{
MagickInfo
*entry;
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% Procedure WritePICONImage() writes an image to a file in the Personal Icon
-% format.
+% WritePICONImage() writes an image to a file in the Personal Icon format.
%
% The format of the WritePICONImage method is:
%
ImageInfo
*blob_info;
- long
+ ssize_t
j,
k,
y;
register const PixelPacket
*p;
- register long
+ register ssize_t
i,
x;
register PixelPacket
*q;
- unsigned long
+ size_t
characters_per_pixel,
colors;
exception=(&image->exception);
if (picon->storage_class == PseudoClass)
{
- CompressImageColormap(picon);
+ (void) CompressImageColormap(picon);
if (picon->matte != MagickFalse)
transparent=MagickTrue;
}
/*
Map all the transparent pixels.
*/
- for (y=0; y < (long) picon->rows; y++)
+ for (y=0; y < (ssize_t) picon->rows; y++)
{
q=GetAuthenticPixels(picon,0,y,picon->columns,1,exception);
if (q == (PixelPacket *) NULL)
break;
- for (x=0; x < (long) picon->columns; x++)
+ for (x=0; x < (ssize_t) picon->columns; x++)
{
if (q->opacity == (Quantum) TransparentOpacity)
transparent=MagickTrue;
else
- q->opacity=OpaqueOpacity;
+ SetOpacityPixelComponent(q,OpaqueOpacity);
q++;
}
if (SyncAuthenticPixels(picon,exception) == MagickFalse)
picon->colormap,(size_t) colors,sizeof(*picon->colormap));
if (picon->colormap == (PixelPacket *) NULL)
ThrowWriterException(ResourceLimitError,"MemoryAllocationError");
- for (y=0; y < (long) picon->rows; y++)
+ for (y=0; y < (ssize_t) picon->rows; y++)
{
q=GetAuthenticPixels(picon,0,y,picon->columns,1,exception);
if (q == (PixelPacket *) NULL)
break;
indexes=GetAuthenticIndexQueue(picon);
- for (x=0; x < (long) picon->columns; x++)
+ for (x=0; x < (ssize_t) picon->columns; x++)
{
if (q->opacity == (Quantum) TransparentOpacity)
indexes[x]=(IndexPacket) picon->colors;
Compute the character per pixel.
*/
characters_per_pixel=1;
- for (k=MaxCixels; (long) colors > k; k*=MaxCixels)
+ for (k=MaxCixels; (ssize_t) colors > k; k*=MaxCixels)
characters_per_pixel++;
/*
XPM header.
"static char *%s[] = {\n",basename);
(void) WriteBlobString(image,buffer);
(void) WriteBlobString(image,"/* columns rows colors chars-per-pixel */\n");
- (void) FormatMagickString(buffer,MaxTextExtent,"\"%lu %lu %lu %ld\",\n",
- picon->columns,picon->rows,colors,characters_per_pixel);
+ (void) FormatMagickString(buffer,MaxTextExtent,
+ "\"%.20g %.20g %.20g %.20g\",\n",(double) picon->columns,(double)
+ picon->rows,(double) colors,(double) characters_per_pixel);
(void) WriteBlobString(image,buffer);
GetMagickPixelPacket(image,&pixel);
- for (i=0; i < (long) colors; i++)
+ for (i=0; i < (ssize_t) colors; i++)
{
/*
Define XPM color.
&image->exception);
if (transparent != MagickFalse)
{
- if (i == (long) (colors-1))
+ if (i == (ssize_t) (colors-1))
(void) CopyMagickString(name,"grey75",MaxTextExtent);
}
/*
*/
k=i % MaxCixels;
symbol[0]=Cixel[k];
- for (j=1; j < (long) characters_per_pixel; j++)
+ for (j=1; j < (ssize_t) characters_per_pixel; j++)
{
k=((i-k)/MaxCixels) % MaxCixels;
symbol[j]=Cixel[k];
Define XPM pixels.
*/
(void) WriteBlobString(image,"/* pixels */\n");
- for (y=0; y < (long) picon->rows; y++)
+ for (y=0; y < (ssize_t) picon->rows; y++)
{
p=GetVirtualPixels(picon,0,y,picon->columns,1,&picon->exception);
if (p == (const PixelPacket *) NULL)
break;
indexes=GetVirtualIndexQueue(picon);
(void) WriteBlobString(image,"\"");
- for (x=0; x < (long) picon->columns; x++)
+ for (x=0; x < (ssize_t) picon->columns; x++)
{
- k=((long) indexes[x] % MaxCixels);
+ k=((ssize_t) indexes[x] % MaxCixels);
symbol[0]=Cixel[k];
- for (j=1; j < (long) characters_per_pixel; j++)
+ for (j=1; j < (ssize_t) characters_per_pixel; j++)
{
k=(((int) indexes[x]-k)/MaxCixels) % MaxCixels;
symbol[j]=Cixel[k];
(void) WriteBlobString(image,buffer);
}
(void) FormatMagickString(buffer,MaxTextExtent,"\"%s\n",
- y == (long) (picon->rows-1) ? "" : ",");
+ y == (ssize_t) (picon->rows-1) ? "" : ",");
(void) WriteBlobString(image,buffer);
- status=SetImageProgress(image,SaveImageTag,y,picon->rows);
+ status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
+ picon->rows);
if (status == MagickFalse)
break;
}
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% Procedure WriteXPMImage() writes an image to a file in the X pixmap format.
+% WriteXPMImage() writes an image to a file in the X pixmap format.
%
% The format of the WriteXPMImage method is:
%
%
% o image: The image.
%
-%
*/
static MagickBooleanType WriteXPMImage(const ImageInfo *image_info,Image *image)
{
name[MaxTextExtent],
symbol[MaxTextExtent];
- long
+ ssize_t
j,
k,
opacity,
register const PixelPacket
*p;
- register long
+ register ssize_t
i,
x;
- unsigned long
+ size_t
characters_per_pixel;
/*
*/
if ((image->storage_class == DirectClass) || (image->colors > 256))
(void) SetImageType(image,PaletteBilevelMatteType);
- for (i=0; i < (long) image->colors; i++)
+ for (i=0; i < (ssize_t) image->colors; i++)
if (image->colormap[i].opacity != OpaqueOpacity)
{
if (opacity < 0)
if (opacity == -1)
{
(void) SetImageType(image,PaletteBilevelMatteType);
- for (i=0; i < (long) image->colors; i++)
+ for (i=0; i < (ssize_t) image->colors; i++)
if (image->colormap[i].opacity != OpaqueOpacity)
{
if (opacity < 0)
Compute the character per pixel.
*/
characters_per_pixel=1;
- for (k=MaxCixels; (long) image->colors > k; k*=MaxCixels)
+ for (k=MaxCixels; (ssize_t) image->colors > k; k*=MaxCixels)
characters_per_pixel++;
/*
XPM header.
(void) FormatMagickString(buffer,MaxTextExtent,"xpm_%s",basename);
(void) CopyMagickString(basename,buffer,MaxTextExtent);
}
- for (i=0; basename[i] != '\0'; i++)
- if (isalpha((int) ((unsigned char) basename[i])) == 0)
+ if (isalpha((int) ((unsigned char) basename[0])) == 0)
+ basename[0]='_';
+ for (i=1; basename[i] != '\0'; i++)
+ if (isalnum((int) ((unsigned char) basename[i])) == 0)
basename[i]='_';
(void) FormatMagickString(buffer,MaxTextExtent,
"static char *%s[] = {\n",basename);
(void) WriteBlobString(image,buffer);
(void) WriteBlobString(image,"/* columns rows colors chars-per-pixel */\n");
- (void) FormatMagickString(buffer,MaxTextExtent,"\"%lu %lu %lu %ld\",\n",
- image->columns,image->rows,image->colors,characters_per_pixel);
+ (void) FormatMagickString(buffer,MaxTextExtent,
+ "\"%.20g %.20g %.20g %.20g \",\n",(double) image->columns,(double)
+ image->rows,(double) image->colors,(double) characters_per_pixel);
(void) WriteBlobString(image,buffer);
GetMagickPixelPacket(image,&pixel);
- for (i=0; i < (long) image->colors; i++)
+ for (i=0; i < (ssize_t) image->colors; i++)
{
/*
Define XPM color.
*/
k=i % MaxCixels;
symbol[0]=Cixel[k];
- for (j=1; j < (long) characters_per_pixel; j++)
+ for (j=1; j < (ssize_t) characters_per_pixel; j++)
{
k=((i-k)/MaxCixels) % MaxCixels;
symbol[j]=Cixel[k];
Define XPM pixels.
*/
(void) WriteBlobString(image,"/* pixels */\n");
- for (y=0; y < (long) image->rows; y++)
+ for (y=0; y < (ssize_t) image->rows; y++)
{
p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception);
if (p == (const PixelPacket *) NULL)
break;
indexes=GetVirtualIndexQueue(image);
(void) WriteBlobString(image,"\"");
- for (x=0; x < (long) image->columns; x++)
+ for (x=0; x < (ssize_t) image->columns; x++)
{
- k=((long) indexes[x] % MaxCixels);
+ k=((ssize_t) indexes[x] % MaxCixels);
symbol[0]=Cixel[k];
- for (j=1; j < (long) characters_per_pixel; j++)
+ for (j=1; j < (ssize_t) characters_per_pixel; j++)
{
k=(((int) indexes[x]-k)/MaxCixels) % MaxCixels;
symbol[j]=Cixel[k];
(void) WriteBlobString(image,buffer);
}
(void) FormatMagickString(buffer,MaxTextExtent,"\"%s\n",
- (y == (long) (image->rows-1) ? "" : ","));
+ (y == (ssize_t) (image->rows-1) ? "" : ","));
(void) WriteBlobString(image,buffer);
- if (QuantumTick(y,image->rows) != MagickFalse)
- if ((image->progress_monitor != (MagickProgressMonitor) NULL) &&
- (QuantumTick(y,image->rows) != MagickFalse))
- {
- status=image->progress_monitor(SaveImageTag,y,image->rows,
- image->client_data);
- if (status == MagickFalse)
- break;
- }
+ if (image->previous == (Image *) NULL)
+ {
+ status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
+ image->rows);
+ if (status == MagickFalse)
+ break;
+ }
}
(void) WriteBlobString(image,"};\n");
(void) CloseBlob(image);