X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=coders%2Fps2.c;h=83351d0c62f9f62f71ba47943c41aa3859f9b804;hb=2ea2cbfa1006eeda0d230955f9933062065b6aa1;hp=139ea2663a05598144f3f381eafba584fec16efd;hpb=16af1cbdffcc02e7239d432e5fb51734fcf9f9ff;p=imagemagick diff --git a/coders/ps2.c b/coders/ps2.c index 139ea2663..83351d0c6 100644 --- a/coders/ps2.c +++ b/coders/ps2.c @@ -103,10 +103,10 @@ static MagickBooleanType % % The format of the RegisterPS2Image method is: % -% unsigned long RegisterPS2Image(void) +% size_t RegisterPS2Image(void) % */ -ModuleExport unsigned long RegisterPS2Image(void) +ModuleExport size_t RegisterPS2Image(void) { MagickInfo *entry; @@ -391,7 +391,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) GeometryInfo geometry_info; - long + ssize_t j, y; @@ -429,10 +429,10 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) register const PixelPacket *p; - register long + register ssize_t x; - register long + register ssize_t i; SegmentInfo @@ -447,7 +447,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) unsigned char *pixels; - unsigned long + size_t page, text_size; @@ -511,18 +511,19 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) } if (image->units == PixelsPerCentimeterResolution) { - resolution.x*=2.54; - resolution.y*=2.54; + resolution.x=(size_t) (100.0*2.54*resolution.x+0.5)/100.0; + resolution.y=(size_t) (100.0*2.54*resolution.y+0.5)/100.0; } SetGeometry(image,&geometry); - (void) FormatMagickString(page_geometry,MaxTextExtent,"%lux%lu", - image->columns,image->rows); + (void) FormatMagickString(page_geometry,MaxTextExtent,"%.20gx%.20g", + (double) image->columns,(double) image->rows); if (image_info->page != (char *) NULL) (void) CopyMagickString(page_geometry,image_info->page,MaxTextExtent); else if ((image->page.width != 0) && (image->page.height != 0)) - (void) FormatMagickString(page_geometry,MaxTextExtent,"%lux%lu%+ld%+ld", - image->page.width,image->page.height,image->page.x,image->page.y); + (void) FormatMagickString(page_geometry,MaxTextExtent, + "%.20gx%.20g%+.20g%+.20g",(double) image->page.width,(double) + image->page.height,(double) image->page.x,(double) image->page.y); else if ((image->gravity != UndefinedGravity) && (LocaleCompare(image_info->magick,"PS") == 0)) @@ -531,16 +532,16 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) (void) ParseMetaGeometry(page_geometry,&geometry.x,&geometry.y, &geometry.width,&geometry.height); scale.x=(double) (geometry.width*delta.x)/resolution.x; - geometry.width=(unsigned long) (scale.x+0.5); + geometry.width=(size_t) floor(scale.x+0.5); scale.y=(double) (geometry.height*delta.y)/resolution.y; - geometry.height=(unsigned long) (scale.y+0.5); + geometry.height=(size_t) floor(scale.y+0.5); (void) ParseAbsoluteGeometry(page_geometry,&media_info); (void) ParseGravityGeometry(image,page_geometry,&page_info, &image->exception); if (image->gravity != UndefinedGravity) { geometry.x=(-page_info.x); - geometry.y=(long) (media_info.height+page_info.y-image->rows); + geometry.y=(ssize_t) (media_info.height+page_info.y-image->rows); } pointsize=12.0; if (image_info->pointsize != 0.0) @@ -548,7 +549,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) text_size=0; value=GetImageProperty(image,"label"); if (value != (const char *) NULL) - text_size=(unsigned long) (MultilineCensus(value)*pointsize+12); + text_size=(size_t) (MultilineCensus(value)*pointsize+12); if (page == 1) { /* @@ -580,13 +581,12 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) else { (void) FormatMagickString(buffer,MaxTextExtent, - "%%%%BoundingBox: %ld %ld %ld %ld\n",(long) (bounds.x1+0.5), - (long) (bounds.y1+0.5), - (long) (bounds.x2+0.5),(long) (bounds.y2+0.5)); + "%%%%BoundingBox: %.20g %.20g %.20g %.20g\n",ceil(bounds.x1-0.5), + ceil(bounds.y1-0.5),floor(bounds.x2+0.5),floor(bounds.y2+0.5)); (void) WriteBlobString(image,buffer); (void) FormatMagickString(buffer,MaxTextExtent, - "%%%%HiResBoundingBox: %g %g %g %g\n",bounds.x1,bounds.y1, - bounds.x2,bounds.y2); + "%%%%HiResBoundingBox: %g %g %g %g\n",bounds.x1, + bounds.y1,bounds.x2,bounds.y2); } (void) WriteBlobString(image,buffer); value=GetImageProperty(image,"label"); @@ -603,8 +603,8 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) if (image_info->adjoin == MagickFalse) (void) CopyMagickString(buffer,"%%Pages: 1\n",MaxTextExtent); else - (void) FormatMagickString(buffer,MaxTextExtent,"%%%%Pages: %lu\n", - (unsigned long) GetImageListLength(image)); + (void) FormatMagickString(buffer,MaxTextExtent, + "%%%%Pages: %.20g\n",(double) GetImageListLength(image)); (void) WriteBlobString(image,buffer); } (void) WriteBlobString(image,"%%EndComments\n"); @@ -653,7 +653,7 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) } value=GetImageProperty(image,"label"); if (value != (const char *) NULL) - for (j=(long) MultilineCensus(value)-1; j >= 0; j--) + for (j=(ssize_t) MultilineCensus(value)-1; j >= 0; j--) { (void) WriteBlobString(image," /label 512 string def\n"); (void) WriteBlobString(image," currentfile label readline pop\n"); @@ -671,11 +671,12 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) (void) WriteBlobString(image,"} bind def\n"); (void) WriteBlobString(image,"%%EndProlog\n"); } - (void) FormatMagickString(buffer,MaxTextExtent,"%%%%Page: 1 %lu\n",page++); + (void) FormatMagickString(buffer,MaxTextExtent,"%%%%Page: 1 %.20g\n", + (double) page++); (void) WriteBlobString(image,buffer); (void) FormatMagickString(buffer,MaxTextExtent, - "%%%%PageBoundingBox: %ld %ld %ld %ld\n",geometry.x,geometry.y, - geometry.x+(long) geometry.width,geometry.y+(long) + "%%%%PageBoundingBox: %.20g %.20g %.20g %.20g\n",(double) geometry.x, + (double) geometry.y,geometry.x+(double) geometry.width,geometry.y+(double) (geometry.height+text_size)); (void) WriteBlobString(image,buffer); if ((double) geometry.x < bounds.x1) @@ -701,8 +702,8 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) /* Output image data. */ - (void) FormatMagickString(buffer,MaxTextExtent,"%ld %ld\n%g %g\n%f\n", - geometry.x,geometry.y,scale.x,scale.y,pointsize); + (void) FormatMagickString(buffer,MaxTextExtent,"%.20g %.20g\n%g %g\n%g\n", + (double) geometry.x,(double) geometry.y,scale.x,scale.y,pointsize); (void) WriteBlobString(image,buffer); labels=(char **) NULL; value=GetImageProperty(image,"label"); @@ -726,8 +727,8 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) ((image_info->type != TrueColorType) && (IsGrayImage(image,&image->exception) != MagickFalse))) { - (void) FormatMagickString(buffer,MaxTextExtent,"%lu %lu\n1\n%d\n", - image->columns,image->rows,(int) + (void) FormatMagickString(buffer,MaxTextExtent,"%.20g %.20g\n1\n%d\n", + (double) image->columns,(double) image->rows,(int) (image->colorspace == CMYKColorspace)); (void) WriteBlobString(image,buffer); (void) FormatMagickString(buffer,MaxTextExtent,"%d\n", @@ -778,18 +779,18 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) Dump Runlength encoded pixels. */ q=pixels; - 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; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { *q++=ScaleQuantumToChar(PixelIntensityToQuantum(p)); p++; } - progress=SetImageProgress(image,SaveImageTag,y,image->rows); + progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,image->rows); if (progress == MagickFalse) break; } @@ -812,19 +813,20 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) Dump uncompressed PseudoColor packets. */ Ascii85Initialize(image); - 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; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { Ascii85Encode(image, ScaleQuantumToChar(PixelIntensityToQuantum(p))); p++; } - progress=SetImageProgress(image,SaveImageTag,y,image->rows); + progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) + y,image->rows); if (progress == MagickFalse) break; } @@ -837,8 +839,8 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) if ((image->storage_class == DirectClass) || (image->colors > 256) || (compression == JPEGCompression) || (image->matte != MagickFalse)) { - (void) FormatMagickString(buffer,MaxTextExtent,"%lu %lu\n0\n%d\n", - image->columns,image->rows,(int) + (void) FormatMagickString(buffer,MaxTextExtent,"%.20g %.20g\n0\n%d\n", + (double) image->columns,(double) image->rows,(int) (image->colorspace == CMYKColorspace)); (void) WriteBlobString(image,buffer); (void) FormatMagickString(buffer,MaxTextExtent,"%d\n", @@ -873,14 +875,14 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) Dump Packbit encoded pixels. */ q=pixels; - 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); - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { if ((image->matte != MagickFalse) && (p->opacity == (Quantum) TransparentOpacity)) @@ -892,20 +894,20 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) else if (image->colorspace != CMYKColorspace) { - *q++=ScaleQuantumToChar(p->red); - *q++=ScaleQuantumToChar(p->green); - *q++=ScaleQuantumToChar(p->blue); + *q++=ScaleQuantumToChar(GetRedPixelComponent(p)); + *q++=ScaleQuantumToChar(GetGreenPixelComponent(p)); + *q++=ScaleQuantumToChar(GetBluePixelComponent(p)); } else { - *q++=ScaleQuantumToChar(p->red); - *q++=ScaleQuantumToChar(p->green); - *q++=ScaleQuantumToChar(p->blue); + *q++=ScaleQuantumToChar(GetRedPixelComponent(p)); + *q++=ScaleQuantumToChar(GetGreenPixelComponent(p)); + *q++=ScaleQuantumToChar(GetBluePixelComponent(p)); *q++=ScaleQuantumToChar(indexes[x]); } p++; } - progress=SetImageProgress(image,SaveImageTag,y,image->rows); + progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,image->rows); if (progress == MagickFalse) break; } @@ -928,14 +930,14 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) Dump uncompressed DirectColor packets. */ Ascii85Initialize(image); - 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); - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { if ((image->matte != MagickFalse) && (p->opacity == (Quantum) TransparentOpacity)) @@ -950,20 +952,20 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) else if (image->colorspace != CMYKColorspace) { - Ascii85Encode(image,ScaleQuantumToChar(p->red)); - Ascii85Encode(image,ScaleQuantumToChar(p->green)); - Ascii85Encode(image,ScaleQuantumToChar(p->blue)); + Ascii85Encode(image,ScaleQuantumToChar(GetRedPixelComponent(p))); + Ascii85Encode(image,ScaleQuantumToChar(GetGreenPixelComponent(p))); + Ascii85Encode(image,ScaleQuantumToChar(GetBluePixelComponent(p))); } else { - Ascii85Encode(image,ScaleQuantumToChar(p->red)); - Ascii85Encode(image,ScaleQuantumToChar(p->green)); - Ascii85Encode(image,ScaleQuantumToChar(p->blue)); + Ascii85Encode(image,ScaleQuantumToChar(GetRedPixelComponent(p))); + Ascii85Encode(image,ScaleQuantumToChar(GetGreenPixelComponent(p))); + Ascii85Encode(image,ScaleQuantumToChar(GetBluePixelComponent(p))); Ascii85Encode(image,ScaleQuantumToChar(indexes[x])); } p++; } - progress=SetImageProgress(image,SaveImageTag,y,image->rows); + progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,image->rows); if (progress == MagickFalse) break; } @@ -977,16 +979,17 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) /* Dump number of colors and colormap. */ - (void) FormatMagickString(buffer,MaxTextExtent,"%lu %lu\n1\n%d\n", - image->columns,image->rows,(int) + (void) FormatMagickString(buffer,MaxTextExtent,"%.20g %.20g\n1\n%d\n", + (double) image->columns,(double) image->rows,(int) (image->colorspace == CMYKColorspace)); (void) WriteBlobString(image,buffer); (void) FormatMagickString(buffer,MaxTextExtent,"%d\n", (int) (compression == NoCompression)); (void) WriteBlobString(image,buffer); - (void) FormatMagickString(buffer,MaxTextExtent,"%lu\n",image->colors); + (void) FormatMagickString(buffer,MaxTextExtent,"%.20g\n",(double) + image->colors); (void) WriteBlobString(image,buffer); - for (i=0; i < (long) image->colors; i++) + for (i=0; i < (ssize_t) image->colors; i++) { (void) FormatMagickString(buffer,MaxTextExtent,"%02X%02X%02X\n", ScaleQuantumToChar(image->colormap[i].red), @@ -1015,16 +1018,16 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) Dump Runlength encoded pixels. */ q=pixels; - 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); - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) *q++=(unsigned char) indexes[x]; - progress=SetImageProgress(image,SaveImageTag,y,image->rows); + progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,image->rows); if (progress == MagickFalse) break; } @@ -1047,16 +1050,16 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) Dump uncompressed PseudoColor packets. */ Ascii85Initialize(image); - 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); - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) Ascii85Encode(image,(unsigned char) indexes[x]); - progress=SetImageProgress(image,SaveImageTag,y,image->rows); + progress=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,image->rows); if (progress == MagickFalse) break; } @@ -1092,12 +1095,12 @@ static MagickBooleanType WritePS2Image(const ImageInfo *image_info,Image *image) if (page > 1) { (void) FormatMagickString(buffer,MaxTextExtent, - "%%%%BoundingBox: %ld %ld %ld %ld\n",(long) (bounds.x1+0.5), - (long) (bounds.y1+0.5),(long) (bounds.x2+0.5),(long) (bounds.y2+0.5)); + "%%%%BoundingBox: %.20g %.20g %.20g %.20g\n",ceil(bounds.x1-0.5), + ceil(bounds.y1-0.5),floor(bounds.x2+0.5),floor(bounds.y2+0.5)); (void) WriteBlobString(image,buffer); (void) FormatMagickString(buffer,MaxTextExtent, - "%%%%HiResBoundingBox: %g %g %g %g\n",bounds.x1,bounds.y1,bounds.x2, - bounds.y2); + "%%%%HiResBoundingBox: %g %g %g %g\n",bounds.x1,bounds.y1, + bounds.x2,bounds.y2); (void) WriteBlobString(image,buffer); } (void) WriteBlobString(image,"%%EOF\n");