X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=coders%2Fcin.c;h=df281f69e1caf8e03331feaefa9fb28cbe7573b9;hb=7beda643d8713ff62ffc17b57e4b1f0d3fc9c523;hp=cb3b841f3d80df979336852c609d567b66abbb3d;hpb=603952957f43862a68f3f6dbc1933bec490770e8;p=imagemagick diff --git a/coders/cin.c b/coders/cin.c index cb3b841f3..df281f69e 100644 --- a/coders/cin.c +++ b/coders/cin.c @@ -15,12 +15,12 @@ % % % % % Software Design % -% John Cristy % +% Cristy % % Kelly Bergougnoux % % October 2003 % % % % % -% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization % +% Copyright 1999-2015 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 % @@ -47,6 +47,7 @@ Include declarations. */ #include "MagickCore/studio.h" +#include "MagickCore/artifact.h" #include "MagickCore/blob.h" #include "MagickCore/blob-private.h" #include "MagickCore/cache.h" @@ -380,9 +381,15 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) #define MonoColorType 1 #define RGBColorType 3 + char + property[MagickPathExtent]; + CINInfo cin; + const unsigned char + *pixels; + Image *image; @@ -412,8 +419,7 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) y; unsigned char - magick[4], - *pixels; + magick[4]; /* Open image file. @@ -425,7 +431,7 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) 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) { @@ -455,16 +461,22 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) offset+=4; offset+=ReadBlob(image,sizeof(cin.file.version),(unsigned char *) cin.file.version); - (void) SetImageProperty(image,"dpx:file.version",cin.file.version); + (void) CopyMagickString(property,cin.file.version,sizeof(cin.file.version)); + (void) SetImageProperty(image,"dpx:file.version",property,exception); offset+=ReadBlob(image,sizeof(cin.file.filename),(unsigned char *) cin.file.filename); - (void) SetImageProperty(image,"dpx:file.filename",cin.file.filename); + (void) CopyMagickString(property,cin.file.filename,sizeof(cin.file.filename)); + (void) SetImageProperty(image,"dpx:file.filename",property,exception); offset+=ReadBlob(image,sizeof(cin.file.create_date),(unsigned char *) cin.file.create_date); - (void) SetImageProperty(image,"dpx:file.create_date",cin.file.create_date); + (void) CopyMagickString(property,cin.file.create_date, + sizeof(cin.file.create_date)); + (void) SetImageProperty(image,"dpx:file.create_date",property,exception); offset+=ReadBlob(image,sizeof(cin.file.create_time),(unsigned char *) cin.file.create_time); - (void) SetImageProperty(image,"dpx:file.create_time",cin.file.create_time); + (void) CopyMagickString(property,cin.file.create_time, + sizeof(cin.file.create_time)); + (void) SetImageProperty(image,"dpx:file.create_time",property,exception); offset+=ReadBlob(image,sizeof(cin.file.reserve),(unsigned char *) cin.file.reserve); /* @@ -472,7 +484,7 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) */ cin.image.orientation=(unsigned char) ReadBlobByte(image); offset++; - if (cin.image.orientation != (unsigned char) (~0U)) + if (cin.image.orientation != (unsigned char) (~0)) (void) FormatImageProperty(image,"dpx:image.orientation","%d", cin.image.orientation); switch (cin.image.orientation) @@ -548,7 +560,8 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) image->chromaticity.blue_primary.y=cin.image.blue_primary_chromaticity[1]; offset+=ReadBlob(image,sizeof(cin.image.label),(unsigned char *) cin.image.label); - (void) SetImageProperty(image,"dpx:image.label",cin.image.label); + (void) CopyMagickString(property,cin.image.label,sizeof(cin.image.label)); + (void) SetImageProperty(image,"dpx:image.label",property,exception); offset+=ReadBlob(image,sizeof(cin.image.reserve),(unsigned char *) cin.image.reserve); /* @@ -583,27 +596,38 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) (double) cin.origination.y_offset); offset+=ReadBlob(image,sizeof(cin.origination.filename),(unsigned char *) cin.origination.filename); - (void) SetImageProperty(image,"dpx:origination.filename", - cin.origination.filename); + (void) CopyMagickString(property,cin.origination.filename, + sizeof(cin.origination.filename)); + (void) SetImageProperty(image,"dpx:origination.filename",property,exception); offset+=ReadBlob(image,sizeof(cin.origination.create_date),(unsigned char *) cin.origination.create_date); - (void) SetImageProperty(image,"dpx:origination.create_date", - cin.origination.create_date); + (void) CopyMagickString(property,cin.origination.create_date, + sizeof(cin.origination.create_date)); + (void) SetImageProperty(image,"dpx:origination.create_date",property, + exception); offset+=ReadBlob(image,sizeof(cin.origination.create_time),(unsigned char *) cin.origination.create_time); - (void) SetImageProperty(image,"dpx:origination.create_time", - cin.origination.create_time); + (void) CopyMagickString(property,cin.origination.create_time, + sizeof(cin.origination.create_time)); + (void) SetImageProperty(image,"dpx:origination.create_time",property, + exception); offset+=ReadBlob(image,sizeof(cin.origination.device),(unsigned char *) cin.origination.device); - (void) SetImageProperty(image,"dpx:origination.device", - cin.origination.device); + (void) CopyMagickString(property,cin.origination.device, + sizeof(cin.origination.device)); + (void) SetImageProperty(image,"dpx:origination.device",property,exception); offset+=ReadBlob(image,sizeof(cin.origination.model),(unsigned char *) cin.origination.model); - (void) SetImageProperty(image,"dpx:origination.model",cin.origination.model); + (void) CopyMagickString(property,cin.origination.model, + sizeof(cin.origination.model)); + (void) SetImageProperty(image,"dpx:origination.model",property,exception); + (void) ResetMagickMemory(cin.origination.serial,0, + sizeof(cin.origination.serial)); offset+=ReadBlob(image,sizeof(cin.origination.serial),(unsigned char *) cin.origination.serial); - (void) SetImageProperty(image,"dpx:origination.serial", - cin.origination.serial); + (void) CopyMagickString(property,cin.origination.serial, + sizeof(cin.origination.serial)); + (void) SetImageProperty(image,"dpx:origination.serial",property,exception); cin.origination.x_pitch=ReadBlobFloat(image); offset+=4; cin.origination.y_pitch=ReadBlobFloat(image); @@ -616,20 +640,26 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) cin.origination.reserve); if ((cin.file.image_offset > 2048) && (cin.file.user_length != 0)) { + int + c; + /* Image film information. */ cin.film.id=ReadBlobByte(image); offset++; - if (((size_t) cin.film.id) != ~0UL) + c=cin.film.id; + if (c != ~0) (void) FormatImageProperty(image,"dpx:film.id","%d",cin.film.id); cin.film.type=ReadBlobByte(image); offset++; - if (((size_t) cin.film.type) != ~0UL) + c=cin.film.type; + if (c != ~0) (void) FormatImageProperty(image,"dpx:film.type","%d",cin.film.type); cin.film.offset=ReadBlobByte(image); offset++; - if (((size_t) cin.film.offset) != ~0UL) + c=cin.film.offset; + if (c != ~0) (void) FormatImageProperty(image,"dpx:film.offset","%d", cin.film.offset); cin.film.reserve1=ReadBlobByte(image); @@ -643,7 +673,8 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) offset+=4; offset+=ReadBlob(image,sizeof(cin.film.format),(unsigned char *) cin.film.format); - (void) SetImageProperty(image,"dpx:film.format",cin.film.format); + (void) CopyMagickString(property,cin.film.format,sizeof(cin.film.format)); + (void) SetImageProperty(image,"dpx:film.format",property,exception); cin.film.frame_position=ReadBlobLong(image); offset+=4; if (cin.film.frame_position != ~0UL) @@ -656,10 +687,14 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) cin.film.frame_rate); offset+=ReadBlob(image,sizeof(cin.film.frame_id),(unsigned char *) cin.film.frame_id); - (void) SetImageProperty(image,"dpx:film.frame_id",cin.film.frame_id); + (void) CopyMagickString(property,cin.film.frame_id, + sizeof(cin.film.frame_id)); + (void) SetImageProperty(image,"dpx:film.frame_id",property,exception); offset+=ReadBlob(image,sizeof(cin.film.slate_info),(unsigned char *) cin.film.slate_info); - (void) SetImageProperty(image,"dpx:film.slate_info",cin.film.slate_info); + (void) CopyMagickString(property,cin.film.slate_info, + sizeof(cin.film.slate_info)); + (void) SetImageProperty(image,"dpx:film.slate_info",property,exception); offset+=ReadBlob(image,sizeof(cin.film.reserve),(unsigned char *) cin.film.reserve); } @@ -671,24 +706,36 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) /* User defined data. */ - profile=BlobToStringInfo((const void *) NULL,cin.file.user_length); + profile=BlobToStringInfo((const unsigned char *) NULL,cin.file.user_length); if (profile == (StringInfo *) NULL) ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); offset+=ReadBlob(image,GetStringInfoLength(profile), GetStringInfoDatum(profile)); - (void) SetImageProfile(image,"dpx:user.data",profile); + (void) SetImageProfile(image,"dpx:user.data",profile,exception); profile=DestroyStringInfo(profile); } - for ( ; offset < (MagickOffsetType) cin.file.image_offset; offset++) - (void) ReadBlobByte(image); image->depth=cin.image.channel[0].bits_per_pixel; image->columns=cin.image.channel[0].pixels_per_line; image->rows=cin.image.channel[0].lines_per_image; - if (image_info->ping) + if (image_info->ping != MagickFalse) { (void) CloseBlob(image); return(image); } + for ( ; offset < (MagickOffsetType) cin.file.image_offset; offset++) + { + int + c; + + c=ReadBlobByte(image); + if (c == EOF) + break; + } + if (offset < (MagickOffsetType) cin.file.image_offset) + ThrowReaderException(CorruptImageError,"ImproperImageHeader"); + status=SetImageExtent(image,image->columns,image->rows,exception); + if (status == MagickFalse) + return(DestroyImageList(image)); /* Convert CIN raster image to pixel packets. */ @@ -698,7 +745,6 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) quantum_info->quantum=32; quantum_info->pack=MagickFalse; quantum_type=RGBQuantum; - pixels=GetQuantumPixels(quantum_info); length=GetQuantumExtent(image,quantum_info,quantum_type); length=GetBytesPerRow(image->columns,3,image->depth,MagickTrue); if (cin.image.number_channels == 1) @@ -711,7 +757,8 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); if (q == (Quantum *) NULL) break; - count=ReadBlob(image,length,pixels); + pixels=(const unsigned char *) ReadBlobStream(image,length, + GetQuantumPixels(quantum_info),&count); if ((size_t) count != length) break; (void) ImportQuantumPixels(image,(CacheView *) NULL,quantum_info, @@ -731,7 +778,7 @@ static Image *ReadCINImage(const ImageInfo *image_info,ExceptionInfo *exception) if (EOFBlob(image) != MagickFalse) ThrowFileException(exception,CorruptImageError,"UnexpectedEndOfFile", image->filename); - image->colorspace=LogColorspace; + SetImageColorspace(image,LogColorspace,exception); (void) CloseBlob(image); return(GetFirstImageInList(image)); } @@ -763,13 +810,11 @@ ModuleExport size_t RegisterCINImage(void) MagickInfo *entry; - entry=SetMagickInfo("CIN"); + entry=AcquireMagickInfo("CIN","CIN","Cineon Image File"); entry->decoder=(DecodeImageHandler *) ReadCINImage; entry->encoder=(EncodeImageHandler *) WriteCINImage; entry->magick=(IsImageFormatHandler *) IsCIN; - entry->adjoin=MagickFalse; - entry->description=ConstantString("Cineon Image File"); - entry->module=ConstantString("CIN"); + entry->flags^=CoderAdjoinFlag; (void) RegisterMagickInfo(entry); return(MagickImageCoderSignature); } @@ -827,7 +872,7 @@ ModuleExport void UnregisterCINImage(void) */ static inline const char *GetCINProperty(const ImageInfo *image_info, - const Image *image,const char *property) + const Image *image,const char *property,ExceptionInfo *exception) { const char *value; @@ -835,12 +880,15 @@ static inline const char *GetCINProperty(const ImageInfo *image_info, value=GetImageOption(image_info,property); if (value != (const char *) NULL) return(value); - return(GetImageProperty(image,property)); + return(GetImageProperty(image,property,exception)); } static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, ExceptionInfo *exception) { + char + timestamp[MagickPathExtent]; + const char *value; @@ -899,7 +947,7 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, if (status == MagickFalse) return(status); if (image->colorspace != LogColorspace) - (void) TransformImageColorspace(image,LogColorspace); + (void) TransformImageColorspace(image,LogColorspace,exception); /* Write image information. */ @@ -926,7 +974,7 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, (void) CopyMagickString(cin.file.version,"V4.5",sizeof(cin.file.version)); offset+=WriteBlob(image,sizeof(cin.file.version),(unsigned char *) cin.file.version); - value=GetCINProperty(image_info,image,"dpx:file.filename"); + value=GetCINProperty(image_info,image,"dpx:file.filename",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.file.filename,value,sizeof(cin.file.filename)); else @@ -940,12 +988,14 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, #else (void) memcpy(&local_time,localtime(&seconds),sizeof(local_time)); #endif - (void) strftime(cin.file.create_date,sizeof(cin.file.create_date),"%Y:%m:%d", - &local_time); + (void) memset(timestamp,0,sizeof(timestamp)); + (void) strftime(timestamp,MagickPathExtent,"%Y:%m:%d:%H:%M:%S%Z",&local_time); + (void) memset(cin.file.create_date,0,sizeof(cin.file.create_date)); + (void) CopyMagickString(cin.file.create_date,timestamp,11); offset+=WriteBlob(image,sizeof(cin.file.create_date),(unsigned char *) cin.file.create_date); - (void) strftime(cin.file.create_time,sizeof(cin.file.create_time), - "%H:%M:%S%Z",&local_time); + (void) memset(cin.file.create_time,0,sizeof(cin.file.create_time)); + (void) CopyMagickString(cin.file.create_time,timestamp+11,11); offset+=WriteBlob(image,sizeof(cin.file.create_time),(unsigned char *) cin.file.create_time); offset+=WriteBlob(image,sizeof(cin.file.reserve),(unsigned char *) @@ -989,7 +1039,7 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, offset+=WriteBlobFloat(image,image->chromaticity.green_primary.y); offset+=WriteBlobFloat(image,image->chromaticity.blue_primary.x); offset+=WriteBlobFloat(image,image->chromaticity.blue_primary.y); - value=GetCINProperty(image_info,image,"dpx:image.label"); + value=GetCINProperty(image_info,image,"dpx:image.label",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.image.label,value,sizeof(cin.image.label)); offset+=WriteBlob(image,sizeof(cin.image.label),(unsigned char *) @@ -1017,16 +1067,16 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, Write origination information. */ cin.origination.x_offset=0UL; - value=GetCINProperty(image_info,image,"dpx:origination.x_offset"); + value=GetCINProperty(image_info,image,"dpx:origination.x_offset",exception); if (value != (const char *) NULL) cin.origination.x_offset=(ssize_t) StringToLong(value); offset+=WriteBlobLong(image,(unsigned int) cin.origination.x_offset); cin.origination.y_offset=0UL; - value=GetCINProperty(image_info,image,"dpx:origination.y_offset"); + value=GetCINProperty(image_info,image,"dpx:origination.y_offset",exception); if (value != (const char *) NULL) cin.origination.y_offset=(ssize_t) StringToLong(value); offset+=WriteBlobLong(image,(unsigned int) cin.origination.y_offset); - value=GetCINProperty(image_info,image,"dpx:origination.filename"); + value=GetCINProperty(image_info,image,"dpx:origination.filename",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.origination.filename,value, sizeof(cin.origination.filename)); @@ -1036,41 +1086,45 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, offset+=WriteBlob(image,sizeof(cin.origination.filename),(unsigned char *) cin.origination.filename); seconds=time((time_t *) NULL); - (void) strftime(cin.origination.create_date, - sizeof(cin.origination.create_date),"%Y:%m:%d",&local_time); + (void) memset(timestamp,0,sizeof(timestamp)); + (void) strftime(timestamp,MagickPathExtent,"%Y:%m:%d:%H:%M:%S%Z",&local_time); + (void) memset(cin.origination.create_date,0, + sizeof(cin.origination.create_date)); + (void) CopyMagickString(cin.origination.create_date,timestamp,11); offset+=WriteBlob(image,sizeof(cin.origination.create_date),(unsigned char *) cin.origination.create_date); - (void) strftime(cin.origination.create_time, - sizeof(cin.origination.create_time),"%H:%M:%S%Z",&local_time); + (void) memset(cin.origination.create_time,0, + sizeof(cin.origination.create_time)); + (void) CopyMagickString(cin.origination.create_time,timestamp+11,15); offset+=WriteBlob(image,sizeof(cin.origination.create_time),(unsigned char *) cin.origination.create_time); - value=GetCINProperty(image_info,image,"dpx:origination.device"); + value=GetCINProperty(image_info,image,"dpx:origination.device",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.origination.device,value, sizeof(cin.origination.device)); offset+=WriteBlob(image,sizeof(cin.origination.device),(unsigned char *) cin.origination.device); - value=GetCINProperty(image_info,image,"dpx:origination.model"); + value=GetCINProperty(image_info,image,"dpx:origination.model",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.origination.model,value, sizeof(cin.origination.model)); offset+=WriteBlob(image,sizeof(cin.origination.model),(unsigned char *) cin.origination.model); - value=GetCINProperty(image_info,image,"dpx:origination.serial"); + value=GetCINProperty(image_info,image,"dpx:origination.serial",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.origination.serial,value, sizeof(cin.origination.serial)); offset+=WriteBlob(image,sizeof(cin.origination.serial),(unsigned char *) cin.origination.serial); cin.origination.x_pitch=0.0f; - value=GetCINProperty(image_info,image,"dpx:origination.x_pitch"); + value=GetCINProperty(image_info,image,"dpx:origination.x_pitch",exception); if (value != (const char *) NULL) - cin.origination.x_pitch=InterpretLocaleValue(value,(char **) NULL); + cin.origination.x_pitch=StringToDouble(value,(char **) NULL); offset+=WriteBlobFloat(image,cin.origination.x_pitch); cin.origination.y_pitch=0.0f; - value=GetCINProperty(image_info,image,"dpx:origination.y_pitch"); + value=GetCINProperty(image_info,image,"dpx:origination.y_pitch",exception); if (value != (const char *) NULL) - cin.origination.y_pitch=InterpretLocaleValue(value,(char **) NULL); + cin.origination.y_pitch=StringToDouble(value,(char **) NULL); offset+=WriteBlobFloat(image,cin.origination.y_pitch); cin.origination.gamma=image->gamma; offset+=WriteBlobFloat(image,cin.origination.gamma); @@ -1080,52 +1134,52 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, Image film information. */ cin.film.id=0; - value=GetCINProperty(image_info,image,"dpx:film.id"); + value=GetCINProperty(image_info,image,"dpx:film.id",exception); if (value != (const char *) NULL) cin.film.id=(char) StringToLong(value); offset+=WriteBlobByte(image,(unsigned char) cin.film.id); cin.film.type=0; - value=GetCINProperty(image_info,image,"dpx:film.type"); + value=GetCINProperty(image_info,image,"dpx:film.type",exception); if (value != (const char *) NULL) cin.film.type=(char) StringToLong(value); offset+=WriteBlobByte(image,(unsigned char) cin.film.type); cin.film.offset=0; - value=GetCINProperty(image_info,image,"dpx:film.offset"); + value=GetCINProperty(image_info,image,"dpx:film.offset",exception); if (value != (const char *) NULL) cin.film.offset=(char) StringToLong(value); offset+=WriteBlobByte(image,(unsigned char) cin.film.offset); offset+=WriteBlobByte(image,(unsigned char) cin.film.reserve1); cin.film.prefix=0UL; - value=GetCINProperty(image_info,image,"dpx:film.prefix"); + value=GetCINProperty(image_info,image,"dpx:film.prefix",exception); if (value != (const char *) NULL) cin.film.prefix=StringToUnsignedLong(value); offset+=WriteBlobLong(image,(unsigned int) cin.film.prefix); cin.film.count=0UL; - value=GetCINProperty(image_info,image,"dpx:film.count"); + value=GetCINProperty(image_info,image,"dpx:film.count",exception); if (value != (const char *) NULL) cin.film.count=StringToUnsignedLong(value); offset+=WriteBlobLong(image,(unsigned int) cin.film.count); - value=GetCINProperty(image_info,image,"dpx:film.format"); + value=GetCINProperty(image_info,image,"dpx:film.format",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.film.format,value,sizeof(cin.film.format)); offset+=WriteBlob(image,sizeof(cin.film.format),(unsigned char *) cin.film.format); cin.film.frame_position=0UL; - value=GetCINProperty(image_info,image,"dpx:film.frame_position"); + value=GetCINProperty(image_info,image,"dpx:film.frame_position",exception); if (value != (const char *) NULL) cin.film.frame_position=StringToUnsignedLong(value); offset+=WriteBlobLong(image,(unsigned int) cin.film.frame_position); cin.film.frame_rate=0.0f; - value=GetCINProperty(image_info,image,"dpx:film.frame_rate"); + value=GetCINProperty(image_info,image,"dpx:film.frame_rate",exception); if (value != (const char *) NULL) - cin.film.frame_rate=InterpretLocaleValue(value,(char **) NULL); + cin.film.frame_rate=StringToDouble(value,(char **) NULL); offset+=WriteBlobFloat(image,cin.film.frame_rate); - value=GetCINProperty(image_info,image,"dpx:film.frame_id"); + value=GetCINProperty(image_info,image,"dpx:film.frame_id",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.film.frame_id,value,sizeof(cin.film.frame_id)); offset+=WriteBlob(image,sizeof(cin.film.frame_id),(unsigned char *) cin.film.frame_id); - value=GetCINProperty(image_info,image,"dpx:film.slate_info"); + value=GetCINProperty(image_info,image,"dpx:film.slate_info",exception); if (value != (const char *) NULL) (void) CopyMagickString(cin.film.slate_info,value, sizeof(cin.film.slate_info)); @@ -1147,12 +1201,14 @@ static MagickBooleanType WriteCINImage(const ImageInfo *image_info,Image *image, quantum_info->quantum=32; quantum_info->pack=MagickFalse; quantum_type=RGBQuantum; - pixels=GetQuantumPixels(quantum_info); + pixels=(unsigned char *) GetQuantumPixels(quantum_info); length=GetBytesPerRow(image->columns,3,image->depth,MagickTrue); +DisableMSCWarning(4127) if (0) +RestoreMSCWarning { quantum_type=GrayQuantum; - length=GetBytesPerRow(image->columns,3,image->depth,MagickTrue); + length=GetBytesPerRow(image->columns,1,image->depth,MagickTrue); } for (y=0; y < (ssize_t) image->rows; y++) {