X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=coders%2Fpnm.c;h=91d67f33479193924e38bd93b521b27b6234d443;hb=2ea2cbfa1006eeda0d230955f9933062065b6aa1;hp=2c0471f35c86383e8e4a79ff8ec2283d65084f95;hpb=e0f584d932b80d1326a3db8cb99ca8d975351ec2;p=imagemagick diff --git a/coders/pnm.c b/coders/pnm.c index 2c0471f35..91d67f334 100644 --- a/coders/pnm.c +++ b/coders/pnm.c @@ -17,7 +17,7 @@ % July 1992 % % % % % -% Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization % +% Copyright 1999-2010 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 % @@ -53,6 +53,7 @@ #include "magick/list.h" #include "magick/magick.h" #include "magick/memory_.h" +#include "magick/module.h" #include "magick/monitor.h" #include "magick/monitor-private.h" #include "magick/pixel-private.h" @@ -61,7 +62,7 @@ #include "magick/static.h" #include "magick/statistic.h" #include "magick/string_.h" -#include "magick/module.h" +#include "magick/string-private.h" /* Forward declarations. @@ -133,10 +134,10 @@ static MagickBooleanType IsPNM(const unsigned char *magick,const size_t extent) % */ -static inline long ConstrainPixel(Image *image,const long offset, - const unsigned long extent) +static inline ssize_t ConstrainPixel(Image *image,const ssize_t offset, + const size_t extent) { - if ((offset < 0) || (offset > (long) extent)) + if ((offset < 0) || (offset > (ssize_t) extent)) { (void) ThrowMagickException(&image->exception,GetMagickModule(), CorruptImageError,"InvalidPixel","`%s'",image->filename); @@ -145,7 +146,7 @@ static inline long ConstrainPixel(Image *image,const long offset, return(offset); } -static unsigned long PNMInteger(Image *image,const unsigned int base) +static size_t PNMInteger(Image *image,const unsigned int base) { char *comment; @@ -159,7 +160,7 @@ static unsigned long PNMInteger(Image *image,const unsigned int base) size_t extent; - unsigned long + size_t value; /* @@ -207,7 +208,7 @@ static unsigned long PNMInteger(Image *image,const unsigned int base) comment=DestroyString(comment); } if (base == 2) - return((unsigned long) (c-(int) '0')); + return((size_t) (c-(int) '0')); /* Evaluate number. */ @@ -234,7 +235,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) Image *image; - long + ssize_t row, y; @@ -250,7 +251,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) QuantumType quantum_type; - register long + register ssize_t i; size_t @@ -260,13 +261,10 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) ssize_t count; - unsigned long + size_t depth, max_value; - CacheView - *image_view; - /* Open image file. */ @@ -312,7 +310,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) scale[MaxTextExtent]; (void) ReadBlobString(image,scale); - quantum_scale=atof(scale); + quantum_scale=StringToDouble(scale); } else { @@ -365,11 +363,11 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) Assign a value to the specified keyword. */ if (LocaleCompare(keyword,"depth") == 0) - packet_size=(unsigned long) atol(value); + packet_size=StringToUnsignedLong(value); if (LocaleCompare(keyword,"height") == 0) - image->rows=(unsigned long) atol(value); + image->rows=StringToUnsignedLong(value); if (LocaleCompare(keyword,"maxval") == 0) - max_value=(unsigned long) atol(value); + max_value=StringToUnsignedLong(value); if (LocaleCompare(keyword,"TUPLTYPE") == 0) { if (LocaleCompare(value,"BLACKANDWHITE") == 0) @@ -404,7 +402,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) } } if (LocaleCompare(keyword,"width") == 0) - image->columns=(unsigned long) atol(value); + image->columns=StringToUnsignedLong(value); } } if ((image->columns == 0) || (image->rows == 0)) @@ -428,18 +426,18 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) /* Convert PBM image to pixel packets. */ - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { - register long + register ssize_t x; register PixelPacket - *__restrict q; + *restrict q; q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); if (q == (PixelPacket *) NULL) break; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { q->red=(Quantum) (PNMInteger(image,2) == 0 ? QuantumRange : 0); q->green=q->red; @@ -450,7 +448,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) 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; } @@ -460,7 +459,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) } case '2': { - unsigned long + size_t intensity; /* @@ -476,27 +475,26 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) sizeof(*scale)); if (scale == (Quantum *) NULL) ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); - for (i=0; i <= (long) max_value; i++) + for (i=0; i <= (ssize_t) max_value; i++) scale[i]=(Quantum) (((double) QuantumRange*i)/max_value+0.5); } - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { - register long + register ssize_t x; register PixelPacket - *__restrict q; + *restrict q; q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); if (q == (PixelPacket *) NULL) break; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { intensity=PNMInteger(image,10); - if (scale != (Quantum *) NULL) - intensity=(unsigned long) scale[ConstrainPixel(image,(long) - intensity,max_value)]; q->red=(Quantum) intensity; + if (scale != (Quantum *) NULL) + q->red=scale[ConstrainPixel(image,(ssize_t) intensity,max_value)]; q->green=q->red; q->blue=q->red; q++; @@ -505,7 +503,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) 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; } @@ -533,32 +532,32 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) sizeof(*scale)); if (scale == (Quantum *) NULL) ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); - for (i=0; i <= (long) max_value; i++) + for (i=0; i <= (ssize_t) max_value; i++) scale[i]=(Quantum) (((double) QuantumRange*i)/max_value+0.5); } - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { - register long + register ssize_t x; register PixelPacket - *__restrict q; + *restrict q; q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); if (q == (PixelPacket *) NULL) break; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel.red=(MagickRealType) PNMInteger(image,10); pixel.green=(MagickRealType) PNMInteger(image,10); pixel.blue=(MagickRealType) PNMInteger(image,10); if (scale != (Quantum *) NULL) { - pixel.red=(MagickRealType) scale[ConstrainPixel(image,(long) + pixel.red=(MagickRealType) scale[ConstrainPixel(image,(ssize_t) pixel.red,max_value)]; - pixel.green=(MagickRealType) scale[ConstrainPixel(image,(long) + pixel.green=(MagickRealType) scale[ConstrainPixel(image,(ssize_t) pixel.green,max_value)]; - pixel.blue=(MagickRealType) scale[ConstrainPixel(image,(long) + pixel.blue=(MagickRealType) scale[ConstrainPixel(image,(ssize_t) pixel.blue,max_value)]; } q->red=(Quantum) pixel.red; @@ -570,7 +569,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) 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; } @@ -592,20 +592,16 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); SetQuantumMinIsWhite(quantum_info,MagickTrue); extent=GetQuantumExtent(image,quantum_info,quantum_type); - image_view=AcquireCacheView(image); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp parallel for shared(row,status,quantum_type) -#endif - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { - long + ssize_t offset; MagickBooleanType sync; register PixelPacket - *__restrict q; + *restrict q; ssize_t count; @@ -619,9 +615,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) continue; pixels=GetQuantumPixels(quantum_info); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp critical (MagickCore_ReadPNMImage) -#endif { count=ReadBlob(image,extent,pixels); if ((image->progress_monitor != (MagickProgressMonitor) NULL) && @@ -630,7 +623,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) MagickBooleanType proceed; - proceed=SetImageProgress(image,LoadImageTag,row,image->rows); + proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) + row,image->rows); if (proceed == MagickFalse) status=MagickFalse; } @@ -638,22 +632,20 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) } if (count != (ssize_t) extent) status=MagickFalse; - q=QueueCacheViewAuthenticPixels(image_view,0,offset,image->columns,1, - exception); + q=QueueAuthenticPixels(image,0,offset,image->columns,1,exception); if (q == (PixelPacket *) NULL) { status=MagickFalse; continue; } - length=ImportQuantumPixels(image,image_view,quantum_info,quantum_type, - pixels,exception); + length=ImportQuantumPixels(image,(CacheView *) NULL,quantum_info, + quantum_type,pixels,exception); if (length != extent) status=MagickFalse; - sync=SyncCacheViewAuthenticPixels(image_view,exception); + sync=SyncAuthenticPixels(image,exception); if (sync == MagickFalse) status=MagickFalse; } - image_view=DestroyCacheView(image_view); quantum_info=DestroyQuantumInfo(quantum_info); if (status == MagickFalse) ThrowReaderException(CorruptImageError,"UnableToReadImageData"); @@ -674,26 +666,22 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) quantum_info=AcquireQuantumInfo(image_info,image); if (quantum_info == (QuantumInfo *) NULL) ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); - image_view=AcquireCacheView(image); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp parallel for shared(row,status,quantum_type) -#endif - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { - long + ssize_t offset; MagickBooleanType sync; register const unsigned char - *p; + *restrict p; - register long + register ssize_t x; register PixelPacket - *__restrict q; + *restrict q; ssize_t count; @@ -704,9 +692,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) continue; pixels=GetQuantumPixels(quantum_info); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp critical (MagickCore_ReadPNMImage) -#endif { count=ReadBlob(image,extent,pixels); if ((image->progress_monitor != (MagickProgressMonitor) NULL) && @@ -715,7 +700,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) MagickBooleanType proceed; - proceed=SetImageProgress(image,LoadImageTag,row,image->rows); + proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) row, + image->rows); if (proceed == MagickFalse) status=MagickFalse; } @@ -723,8 +709,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) } if (count != (ssize_t) extent) status=MagickFalse; - q=QueueCacheViewAuthenticPixels(image_view,0,offset,image->columns,1, - exception); + q=QueueAuthenticPixels(image,0,offset,image->columns,1,exception); if (q == (PixelPacket *) NULL) { status=MagickFalse; @@ -732,7 +717,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) } p=pixels; if ((image->depth == 8) || (image->depth == 16)) - (void) ImportQuantumPixels(image,image_view,quantum_info, + (void) ImportQuantumPixels(image,(CacheView *) NULL,quantum_info, quantum_type,pixels,exception); else if (image->depth <= 8) @@ -740,10 +725,10 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) unsigned char pixel; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushCharPixel(p,&pixel); - q->red=ScaleAnyToQuantum(pixel,range); + SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range)); q->green=q->red; q->blue=q->red; q++; @@ -754,20 +739,19 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) unsigned short pixel; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushShortPixel(MSBEndian,p,&pixel); - q->red=ScaleAnyToQuantum(pixel,range); + SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range)); q->green=q->red; q->blue=q->red; q++; } } - sync=SyncCacheViewAuthenticPixels(image_view,exception); + sync=SyncAuthenticPixels(image,exception); if (sync == MagickFalse) status=MagickFalse; } - image_view=DestroyCacheView(image_view); quantum_info=DestroyQuantumInfo(quantum_info); if (status == MagickFalse) ThrowReaderException(CorruptImageError,"UnableToReadImageData"); @@ -792,42 +776,32 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) quantum_info=AcquireQuantumInfo(image_info,image); if (quantum_info == (QuantumInfo *) NULL) ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); - image_view=AcquireCacheView(image); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp parallel for shared(row,status,type) -#endif - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { - long + ssize_t offset; MagickBooleanType sync; register const unsigned char - *p; + *restrict p; - register long + register ssize_t x; register PixelPacket - *__restrict q; + *restrict q; ssize_t count; - size_t - length; - unsigned char *pixels; if (status == MagickFalse) continue; pixels=GetQuantumPixels(quantum_info); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp critical (MagickCore_ReadPNMImage) -#endif { count=ReadBlob(image,extent,pixels); if ((image->progress_monitor != (MagickProgressMonitor) NULL) && @@ -836,7 +810,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) MagickBooleanType proceed; - proceed=SetImageProgress(image,LoadImageTag,row,image->rows); + proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) row, + image->rows); if (proceed == MagickFalse) status=MagickFalse; } @@ -844,80 +819,95 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) } if (count != (ssize_t) extent) status=MagickFalse; - q=QueueCacheViewAuthenticPixels(image_view,0,offset,image->columns,1, - exception); + q=QueueAuthenticPixels(image,0,offset,image->columns,1,exception); if (q == (PixelPacket *) NULL) { status=MagickFalse; continue; } p=pixels; - if ((image->depth == 8) || (image->depth == 16)) + if (image->depth == 8) + for (x=0; x < (ssize_t) image->columns; x++) { - length=ImportQuantumPixels(image,image_view,quantum_info, - quantum_type,pixels,exception); - if (length != extent) - status=MagickFalse; + q->red=ScaleCharToQuantum(*p++); + q->green=ScaleCharToQuantum(*p++); + q->blue=ScaleCharToQuantum(*p++); + q->opacity=OpaqueOpacity; + q++; } else - if (image->depth <= 8) - { - unsigned char - pixel; - - register PixelPacket - *__restrict r; - - r=q; - for (x=0; x < (long) image->columns; x++) - { - p=PushCharPixel(p,&pixel); - r->red=ScaleAnyToQuantum(pixel,range); - p=PushCharPixel(p,&pixel); - r->green=ScaleAnyToQuantum(pixel,range); - p=PushCharPixel(p,&pixel); - r->blue=ScaleAnyToQuantum(pixel,range); - r++; - } - } - else + if (image->depth == 16) { unsigned short pixel; - register PixelPacket - *__restrict r; - - r=q; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushShortPixel(MSBEndian,p,&pixel); - r->red=ScaleAnyToQuantum(pixel,range); + q->red=ScaleShortToQuantum(pixel); p=PushShortPixel(MSBEndian,p,&pixel); - r->green=ScaleAnyToQuantum(pixel,range); + q->green=ScaleShortToQuantum(pixel); p=PushShortPixel(MSBEndian,p,&pixel); - r->blue=ScaleAnyToQuantum(pixel,range); - r++; + q->blue=ScaleShortToQuantum(pixel); + q->opacity=OpaqueOpacity; + q++; } } + else + if (image->depth <= 8) + { + unsigned char + pixel; + + for (x=0; x < (ssize_t) image->columns; x++) + { + p=PushCharPixel(p,&pixel); + q->red=ScaleAnyToQuantum(pixel,range); + p=PushCharPixel(p,&pixel); + q->green=ScaleAnyToQuantum(pixel,range); + p=PushCharPixel(p,&pixel); + q->blue=ScaleAnyToQuantum(pixel,range); + q->opacity=OpaqueOpacity; + q++; + } + } + else + { + unsigned short + pixel; + + for (x=0; x < (ssize_t) image->columns; x++) + { + p=PushShortPixel(MSBEndian,p,&pixel); + q->red=ScaleAnyToQuantum(pixel,range); + p=PushShortPixel(MSBEndian,p,&pixel); + q->green=ScaleAnyToQuantum(pixel,range); + p=PushShortPixel(MSBEndian,p,&pixel); + q->blue=ScaleAnyToQuantum(pixel,range); + q->opacity=OpaqueOpacity; + q++; + } + } if ((type == BilevelType) || (type == GrayscaleType)) - for (x=0; x < (long) image->columns; x++) { - if ((type == BilevelType) && - (IsMonochromePixel(q) == MagickFalse)) - type=IsGrayPixel(q) == MagickFalse ? UndefinedType : - GrayscaleType; - if ((type == GrayscaleType) && (IsGrayPixel(q) == MagickFalse)) - type=UndefinedType; - if ((type != BilevelType) && (type != GrayscaleType)) - break; - q++; + q=QueueAuthenticPixels(image,0,offset,image->columns,1,exception); + for (x=0; x < (ssize_t) image->columns; x++) + { + if ((type == BilevelType) && + (IsMonochromePixel(q) == MagickFalse)) + type=IsGrayPixel(q) == MagickFalse ? UndefinedType : + GrayscaleType; + if ((type == GrayscaleType) && (IsGrayPixel(q) == MagickFalse)) + type=UndefinedType; + if ((type != BilevelType) && (type != GrayscaleType)) + break; + q++; + } } - sync=SyncCacheViewAuthenticPixels(image_view,exception); + sync=SyncAuthenticPixels(image,exception); if (sync == MagickFalse) status=MagickFalse; } - image_view=DestroyCacheView(image_view); quantum_info=DestroyQuantumInfo(quantum_info); if (status == MagickFalse) ThrowReaderException(CorruptImageError,"UnableToReadImageData"); @@ -933,7 +923,7 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) QuantumAny range; - unsigned long + size_t channels; /* @@ -966,26 +956,22 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) quantum_info=AcquireQuantumInfo(image_info,image); if (quantum_info == (QuantumInfo *) NULL) ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); - image_view=AcquireCacheView(image); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp parallel for shared(row,status,quantum_type) -#endif - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { - long + ssize_t offset; MagickBooleanType sync; register const unsigned char - *p; + *restrict p; - register long + register ssize_t x; register PixelPacket - *__restrict q; + *restrict q; ssize_t count; @@ -996,9 +982,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) continue; pixels=GetQuantumPixels(quantum_info); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp critical (MagickCore_ReadPNMImage) -#endif { count=ReadBlob(image,extent,pixels); if ((image->progress_monitor != (MagickProgressMonitor) NULL) && @@ -1007,7 +990,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) MagickBooleanType proceed; - proceed=SetImageProgress(image,LoadImageTag,row,image->rows); + proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) row, + image->rows); if (proceed == MagickFalse) status=MagickFalse; } @@ -1015,17 +999,16 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) } if (count != (ssize_t) extent) status=MagickFalse; - q=QueueCacheViewAuthenticPixels(image_view,0,offset,image->columns,1, - exception); + q=QueueAuthenticPixels(image,0,offset,image->columns,1,exception); if (q == (PixelPacket *) NULL) { status=MagickFalse; continue; } - indexes=GetCacheViewAuthenticIndexQueue(image_view); + indexes=GetAuthenticIndexQueue(image); p=pixels; if ((image->depth == 8) || (image->depth == 16)) - (void) ImportQuantumPixels(image,image_view,quantum_info, + (void) ImportQuantumPixels(image,(CacheView *) NULL,quantum_info, quantum_type,pixels,exception); else switch (quantum_type) @@ -1038,17 +1021,17 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) unsigned char pixel; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushCharPixel(p,&pixel); - q->red=ScaleAnyToQuantum(pixel,range); + SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range)); q->green=q->red; q->blue=q->red; - q->opacity=OpaqueOpacity; + SetOpacityPixelComponent(q,OpaqueOpacity); if (image->matte != MagickFalse) { p=PushCharPixel(p,&pixel); - q->opacity=ScaleAnyToQuantum(pixel,range); + SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range)); } q++; } @@ -1058,17 +1041,17 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) unsigned short pixel; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushShortPixel(MSBEndian,p,&pixel); - q->red=ScaleAnyToQuantum(pixel,range); + SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range)); q->green=q->red; q->blue=q->red; - q->opacity=OpaqueOpacity; + SetOpacityPixelComponent(q,OpaqueOpacity); if (image->matte != MagickFalse) { p=PushShortPixel(MSBEndian,p,&pixel); - q->opacity=ScaleAnyToQuantum(pixel,range); + SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range)); } q++; } @@ -1083,21 +1066,21 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) unsigned char pixel; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushCharPixel(p,&pixel); - q->red=ScaleAnyToQuantum(pixel,range); + SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushCharPixel(p,&pixel); - q->green=ScaleAnyToQuantum(pixel,range); + SetGreenPixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushCharPixel(p,&pixel); - q->blue=ScaleAnyToQuantum(pixel,range); + SetBluePixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushCharPixel(p,&pixel); indexes[x]=ScaleAnyToQuantum(pixel,range); - q->opacity=OpaqueOpacity; + SetOpacityPixelComponent(q,OpaqueOpacity); if (image->matte != MagickFalse) { p=PushCharPixel(p,&pixel); - q->opacity=ScaleAnyToQuantum(pixel,range); + SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range)); } q++; } @@ -1107,21 +1090,21 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) unsigned short pixel; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushShortPixel(MSBEndian,p,&pixel); - q->red=ScaleAnyToQuantum(pixel,range); + SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushShortPixel(MSBEndian,p,&pixel); - q->green=ScaleAnyToQuantum(pixel,range); + SetGreenPixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushShortPixel(MSBEndian,p,&pixel); - q->blue=ScaleAnyToQuantum(pixel,range); + SetBluePixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushShortPixel(MSBEndian,p,&pixel); indexes[x]=ScaleAnyToQuantum(pixel,range); - q->opacity=OpaqueOpacity; + SetOpacityPixelComponent(q,OpaqueOpacity); if (image->matte != MagickFalse) { p=PushShortPixel(MSBEndian,p,&pixel); - q->opacity=ScaleAnyToQuantum(pixel,range); + SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range)); } q++; } @@ -1135,19 +1118,19 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) unsigned char pixel; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushCharPixel(p,&pixel); - q->red=ScaleAnyToQuantum(pixel,range); + SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushCharPixel(p,&pixel); - q->green=ScaleAnyToQuantum(pixel,range); + SetGreenPixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushCharPixel(p,&pixel); - q->blue=ScaleAnyToQuantum(pixel,range); - q->opacity=OpaqueOpacity; + SetBluePixelComponent(q,ScaleAnyToQuantum(pixel,range)); + SetOpacityPixelComponent(q,OpaqueOpacity); if (image->matte != MagickFalse) { p=PushCharPixel(p,&pixel); - q->opacity=ScaleAnyToQuantum(pixel,range); + SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range)); } q++; } @@ -1157,19 +1140,19 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) unsigned short pixel; - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { p=PushShortPixel(MSBEndian,p,&pixel); - q->red=ScaleAnyToQuantum(pixel,range); + SetRedPixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushShortPixel(MSBEndian,p,&pixel); - q->green=ScaleAnyToQuantum(pixel,range); + SetGreenPixelComponent(q,ScaleAnyToQuantum(pixel,range)); p=PushShortPixel(MSBEndian,p,&pixel); - q->blue=ScaleAnyToQuantum(pixel,range); - q->opacity=OpaqueOpacity; + SetBluePixelComponent(q,ScaleAnyToQuantum(pixel,range)); + SetOpacityPixelComponent(q,OpaqueOpacity); if (image->matte != MagickFalse) { p=PushShortPixel(MSBEndian,p,&pixel); - q->opacity=ScaleAnyToQuantum(pixel,range); + SetOpacityPixelComponent(q,ScaleAnyToQuantum(pixel,range)); } q++; } @@ -1177,11 +1160,10 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) break; } } - sync=SyncCacheViewAuthenticPixels(image_view,exception); + sync=SyncAuthenticPixels(image,exception); if (sync == MagickFalse) status=MagickFalse; } - image_view=DestroyCacheView(image_view); quantum_info=DestroyQuantumInfo(quantum_info); if (status == MagickFalse) ThrowReaderException(CorruptImageError,"UnableToReadImageData"); @@ -1209,20 +1191,16 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) SetQuantumScale(quantum_info,(MagickRealType) QuantumRange* fabs(quantum_scale)); extent=GetQuantumExtent(image,quantum_info,quantum_type); - image_view=AcquireCacheView(image); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp parallel for shared(row,status,quantum_type) -#endif - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { - long + ssize_t offset; MagickBooleanType sync; register PixelPacket - *__restrict q; + *restrict q; ssize_t count; @@ -1236,9 +1214,6 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) if (status == MagickFalse) continue; pixels=GetQuantumPixels(quantum_info); -#if defined(_OPENMP) && (_OPENMP > 200505) - #pragma omp critical (MagickCore_ReadPNMImage) -#endif { count=ReadBlob(image,extent,pixels); if ((image->progress_monitor != (MagickProgressMonitor) NULL) && @@ -1247,7 +1222,8 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) MagickBooleanType proceed; - proceed=SetImageProgress(image,LoadImageTag,row,image->rows); + proceed=SetImageProgress(image,LoadImageTag,(MagickOffsetType) row, + image->rows); if (proceed == MagickFalse) status=MagickFalse; } @@ -1255,22 +1231,21 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) } if ((size_t) count != extent) status=MagickFalse; - q=QueueCacheViewAuthenticPixels(image_view,0,(long) (image->rows- - offset-1),image->columns,1,exception); + q=QueueAuthenticPixels(image,0,(ssize_t) (image->rows-offset-1), + image->columns,1,exception); if (q == (PixelPacket *) NULL) { status=MagickFalse; continue; } - length=ImportQuantumPixels(image,image_view,quantum_info,quantum_type, - pixels,exception); + length=ImportQuantumPixels(image,(CacheView *) NULL,quantum_info, + quantum_type,pixels,exception); if (length != extent) status=MagickFalse; - sync=SyncCacheViewAuthenticPixels(image_view,exception); + sync=SyncAuthenticPixels(image,exception); if (sync == MagickFalse) status=MagickFalse; } - image_view=DestroyCacheView(image_view); quantum_info=DestroyQuantumInfo(quantum_info); if (status == MagickFalse) ThrowReaderException(CorruptImageError,"UnableToReadImageData"); @@ -1344,10 +1319,10 @@ static Image *ReadPNMImage(const ImageInfo *image_info,ExceptionInfo *exception) % % The format of the RegisterPNMImage method is: % -% unsigned long RegisterPNMImage(void) +% size_t RegisterPNMImage(void) % */ -ModuleExport unsigned long RegisterPNMImage(void) +ModuleExport size_t RegisterPNMImage(void) { MagickInfo *entry; @@ -1367,6 +1342,7 @@ ModuleExport unsigned long RegisterPNMImage(void) entry=SetMagickInfo("PFM"); entry->decoder=(DecodeImageHandler *) ReadPNMImage; entry->encoder=(EncodeImageHandler *) WritePNMImage; + entry->endian_support=MagickTrue; entry->description=ConstantString("Portable float format"); entry->module=ConstantString("PFM"); (void) RegisterMagickInfo(entry); @@ -1431,8 +1407,7 @@ ModuleExport void UnregisterPNMImage(void) % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% Procedure WritePNMImage() writes an image to a file in the PNM rasterfile -% format. +% WritePNMImage() writes an image to a file in the PNM rasterfile format. % % The format of the WritePNMImage method is: % @@ -1458,7 +1433,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) IndexPacket index; - long + ssize_t y; MagickBooleanType @@ -1476,7 +1451,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) QuantumType quantum_type; - register long + register ssize_t i; register unsigned char @@ -1595,8 +1570,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) { if (image->colorspace != RGBColorspace) (void) TransformImageColorspace(image,RGBColorspace); - (void) FormatMagickString(buffer,MaxTextExtent,"%lu %lu\n", - image->columns,image->rows); + (void) FormatMagickString(buffer,MaxTextExtent,"%.20g %.20g\n", + (double) image->columns,(double) image->rows); (void) WriteBlobString(image,buffer); } else @@ -1608,7 +1583,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) PAM header. */ (void) FormatMagickString(buffer,MaxTextExtent, - "WIDTH %lu\nHEIGHT %lu\n",image->columns,image->rows); + "WIDTH %.20g\nHEIGHT %.20g\n",(double) image->columns,(double) + image->rows); (void) WriteBlobString(image,buffer); quantum_type=GetQuantumType(image,&image->exception); switch (quantum_type) @@ -1645,7 +1621,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) if (image->depth > 16) image->depth=16; (void) FormatMagickString(buffer,MaxTextExtent, - "DEPTH %lu\nMAXVAL %lu\n",(unsigned long) packet_size,(unsigned long) + "DEPTH %.20g\nMAXVAL %.20g\n",(double) packet_size,(double) GetQuantumRange(image->depth)); (void) WriteBlobString(image,buffer); (void) FormatMagickString(buffer,MaxTextExtent,"TUPLTYPE %s\nENDHDR\n", @@ -1666,22 +1642,22 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) Convert image to a PBM image. */ q=pixels; - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { register const IndexPacket - *__restrict indexes; + *restrict indexes; register const PixelPacket - *__restrict p; + *restrict p; - register long + register ssize_t x; 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++) { pixel=PixelIntensityToQuantum(p); *q++=(unsigned char) (pixel >= (Quantum) (QuantumRange/2) ? @@ -1698,7 +1674,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) } if (image->previous == (Image *) NULL) { - status=SetImageProgress(image,SaveImageTag,y,image->rows); + status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, + image->rows); if (status == MagickFalse) break; } @@ -1723,18 +1700,18 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) else (void) WriteBlobString(image,"65535\n"); q=pixels; - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { register const PixelPacket - *__restrict p; + *restrict p; - register long + register ssize_t x; 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++) { index=PixelIntensityToQuantum(p); if (image->depth <= 8) @@ -1756,7 +1733,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) } if (image->previous == (Image *) NULL) { - status=SetImageProgress(image,SaveImageTag,y,image->rows); + status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, + image->rows); if (status == MagickFalse) break; } @@ -1781,27 +1759,29 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) else (void) WriteBlobString(image,"65535\n"); q=pixels; - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { register const PixelPacket - *__restrict p; + *restrict p; - register long + register ssize_t x; 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++) { if (image->depth <= 8) count=(ssize_t) FormatMagickString(buffer,MaxTextExtent, - "%u %u %u ",ScaleQuantumToChar(p->red), - ScaleQuantumToChar(p->green),ScaleQuantumToChar(p->blue)); + "%u %u %u ",ScaleQuantumToChar(GetRedPixelComponent(p)), + ScaleQuantumToChar(GetGreenPixelComponent(p)), + ScaleQuantumToChar(GetBluePixelComponent(p))); else count=(ssize_t) FormatMagickString(buffer,MaxTextExtent, - "%u %u %u ",ScaleQuantumToShort(p->red), - ScaleQuantumToShort(p->green),ScaleQuantumToShort(p->blue)); + "%u %u %u ",ScaleQuantumToShort(GetRedPixelComponent(p)), + ScaleQuantumToShort(GetGreenPixelComponent(p)), + ScaleQuantumToShort(GetBluePixelComponent(p))); extent=(size_t) count; (void) strncpy((char *) q,buffer,extent); q+=extent; @@ -1815,7 +1795,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) } if (image->previous == (Image *) NULL) { - status=SetImageProgress(image,SaveImageTag,y,image->rows); + status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, + image->rows); if (status == MagickFalse) break; } @@ -1838,10 +1819,10 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed"); quantum_info->min_is_white=MagickTrue; pixels=GetQuantumPixels(quantum_info); - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { register const PixelPacket - *__restrict p; + *restrict p; p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception); if (p == (const PixelPacket *) NULL) @@ -1853,7 +1834,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) break; if (image->previous == (Image *) NULL) { - status=SetImageProgress(image,SaveImageTag,y,image->rows); + status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, + image->rows); if (status == MagickFalse) break; } @@ -1871,7 +1853,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) */ if (image->depth > 8) image->depth=16; - (void) FormatMagickString(buffer,MaxTextExtent,"%lu\n",(unsigned long) + (void) FormatMagickString(buffer,MaxTextExtent,"%.20g\n",(double) GetQuantumRange(image->depth)); (void) WriteBlobString(image,buffer); quantum_info=AcquireQuantumInfo((const ImageInfo *) NULL,image); @@ -1881,12 +1863,12 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) pixels=GetQuantumPixels(quantum_info); extent=GetQuantumExtent(image,quantum_info,GrayQuantum); range=GetQuantumRange(image->depth); - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { register const PixelPacket - *__restrict p; + *restrict p; - register long + register ssize_t x; p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception); @@ -1899,14 +1881,14 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) else { if (image->depth <= 8) - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { if (IsGrayPixel(p) == MagickFalse) pixel=ScaleQuantumToAny(PixelIntensityToQuantum(p),range); else { if (image->depth == 8) - pixel=ScaleQuantumToChar(p->red); + pixel=ScaleQuantumToChar(GetRedPixelComponent(p)); else pixel=ScaleQuantumToAny(p->red,range); } @@ -1914,14 +1896,14 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) p++; } else - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { if (IsGrayPixel(p) == MagickFalse) pixel=ScaleQuantumToAny(PixelIntensityToQuantum(p),range); else { if (image->depth == 16) - pixel=ScaleQuantumToShort(p->red); + pixel=ScaleQuantumToShort(GetRedPixelComponent(p)); else pixel=ScaleQuantumToAny(p->red,range); } @@ -1935,7 +1917,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) break; if (image->previous == (Image *) NULL) { - status=SetImageProgress(image,SaveImageTag,y,image->rows); + status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, + image->rows); if (status == MagickFalse) break; } @@ -1953,7 +1936,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) */ if (image->depth > 8) image->depth=16; - (void) FormatMagickString(buffer,MaxTextExtent,"%lu\n",(unsigned long) + (void) FormatMagickString(buffer,MaxTextExtent,"%.20g\n",(double) GetQuantumRange(image->depth)); (void) WriteBlobString(image,buffer); quantum_info=AcquireQuantumInfo((const ImageInfo *) NULL,image); @@ -1962,12 +1945,12 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) pixels=GetQuantumPixels(quantum_info); extent=GetQuantumExtent(image,quantum_info,quantum_type); range=GetQuantumRange(image->depth); - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { register const PixelPacket - *__restrict p; + *restrict p; - register long + register ssize_t x; p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception); @@ -1980,7 +1963,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) else { if (image->depth <= 8) - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel=ScaleQuantumToAny(p->red,range); q=PopCharPixel((unsigned char) pixel,q); @@ -1988,16 +1971,10 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) q=PopCharPixel((unsigned char) pixel,q); pixel=ScaleQuantumToAny(p->blue,range); q=PopCharPixel((unsigned char) pixel,q); - if (image->matte != MagickFalse) - { - pixel=ScaleQuantumToAny((Quantum) (QuantumRange- - p->opacity),range); - q=PopCharPixel((unsigned char) pixel,q); - } p++; } else - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel=ScaleQuantumToAny(p->red,range); q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); @@ -2005,12 +1982,6 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); pixel=ScaleQuantumToAny(p->blue,range); q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); - if (image->matte != MagickFalse) - { - pixel=ScaleQuantumToAny((Quantum) (QuantumRange- - p->opacity),range); - q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); - } p++; } extent=(size_t) (q-pixels); @@ -2020,7 +1991,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) break; if (image->previous == (Image *) NULL) { - status=SetImageProgress(image,SaveImageTag,y,image->rows); + status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, + image->rows); if (status == MagickFalse) break; } @@ -2041,15 +2013,15 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) quantum_info=AcquireQuantumInfo((const ImageInfo *) NULL,image); pixels=GetQuantumPixels(quantum_info); range=GetQuantumRange(image->depth); - for (y=0; y < (long) image->rows; y++) + for (y=0; y < (ssize_t) image->rows; y++) { register const IndexPacket - *__restrict indexes; + *restrict indexes; register const PixelPacket - *__restrict p; + *restrict p; - register long + register ssize_t x; p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception); @@ -2068,7 +2040,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) case GrayAlphaQuantum: { if (image->depth <= 8) - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel=ScaleQuantumToAny(PixelIntensityToQuantum(p),range); q=PopCharPixel((unsigned char) pixel,q); @@ -2081,7 +2053,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) p++; } else - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel=ScaleQuantumToAny(PixelIntensityToQuantum(p),range); q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); @@ -2099,7 +2071,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) case CMYKAQuantum: { if (image->depth <= 8) - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel=ScaleQuantumToAny(p->red,range); q=PopCharPixel((unsigned char) pixel,q); @@ -2112,13 +2084,13 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) if (image->matte != MagickFalse) { pixel=ScaleQuantumToAny((Quantum) (QuantumRange- - p->opacity),range); + GetOpacityPixelComponent(p)),range); q=PopCharPixel((unsigned char) pixel,q); } p++; } else - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel=ScaleQuantumToAny(p->red,range); q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); @@ -2131,7 +2103,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) if (image->matte != MagickFalse) { pixel=ScaleQuantumToAny((Quantum) (QuantumRange- - p->opacity),range); + GetOpacityPixelComponent(p)),range); q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); } p++; @@ -2141,7 +2113,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) default: { if (image->depth <= 8) - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel=ScaleQuantumToAny(p->red,range); q=PopCharPixel((unsigned char) pixel,q); @@ -2152,13 +2124,13 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) if (image->matte != MagickFalse) { pixel=ScaleQuantumToAny((Quantum) (QuantumRange- - p->opacity),range); + GetOpacityPixelComponent(p)),range); q=PopCharPixel((unsigned char) pixel,q); } p++; } else - for (x=0; x < (long) image->columns; x++) + for (x=0; x < (ssize_t) image->columns; x++) { pixel=ScaleQuantumToAny(p->red,range); q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); @@ -2169,7 +2141,7 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) if (image->matte != MagickFalse) { pixel=ScaleQuantumToAny((Quantum) (QuantumRange- - p->opacity),range); + GetOpacityPixelComponent(p)),range); q=PopShortPixel(MSBEndian,(unsigned short) pixel,q); } p++; @@ -2184,7 +2156,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) break; if (image->previous == (Image *) NULL) { - status=SetImageProgress(image,SaveImageTag,y,image->rows); + status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, + image->rows); if (status == MagickFalse) break; } @@ -2206,10 +2179,10 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) if (status == MagickFalse) ThrowWriterException(ResourceLimitError,"MemoryAllocationFailed"); pixels=GetQuantumPixels(quantum_info); - for (y=(long) image->rows-1; y >= 0; y--) + for (y=(ssize_t) image->rows-1; y >= 0; y--) { register const PixelPacket - *__restrict p; + *restrict p; p=GetVirtualPixels(image,0,y,image->columns,1,&image->exception); if (p == (const PixelPacket *) NULL) @@ -2219,7 +2192,8 @@ static MagickBooleanType WritePNMImage(const ImageInfo *image_info,Image *image) (void) WriteBlob(image,extent,pixels); if (image->previous == (Image *) NULL) { - status=SetImageProgress(image,SaveImageTag,y,image->rows); + status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y, + image->rows); if (status == MagickFalse) break; }