// Write image to file
void Magick::Image::write( const std::string &imageSpec_ )
{
+ ExceptionInfo exceptionInfo;
+ GetExceptionInfo( &exceptionInfo );
modifyImage();
fileName( imageSpec_ );
- WriteImage( imageInfo(), image() );
- throwImageException();
+ WriteImage( imageInfo(), image(), &exceptionInfo );
+ throwException( exceptionInfo );
+ (void) DestroyExceptionInfo( &exceptionInfo );
}
// Write image to in-memory BLOB
(void) CloseBlob(image);
image->blob->exempt=MagickTrue;
*image->filename='\0';
- status=WriteImage(blob_info,image);
- if ((status == MagickFalse) || (image->blob->length == 0))
- InheritException(exception,&image->exception);
- else
+ status=WriteImage(blob_info,image,exception);
+ if ((status != MagickFalse) && (image->blob->length != 0))
{
*length=image->blob->length;
blob=DetachBlob(image->blob);
{
(void) FormatLocaleString(image->filename,MaxTextExtent,"%s:%s",
image->magick,unique);
- status=WriteImage(blob_info,image);
+ status=WriteImage(blob_info,image,exception);
(void) fclose(blob_info->file);
- if (status == MagickFalse)
- InheritException(exception,&image->exception);
- else
+ if (status != MagickFalse)
blob=FileToBlob(image->filename,~0UL,length,exception);
}
(void) RelinquishUniqueFileResource(unique);
byte_image->blob=CloneBlobInfo((BlobInfo *) NULL);
write_info=CloneImageInfo(image_info);
SetImageInfoFile(write_info,unique_file);
- status=WriteImage(write_info,byte_image);
+ status=WriteImage(write_info,byte_image,exception);
write_info=DestroyImageInfo(write_info);
byte_image=DestroyImage(byte_image);
(void) fclose(unique_file);
%
% The format of the WriteImage method is:
%
-% MagickBooleanType WriteImage(const ImageInfo *image_info,Image *image)
+% MagickBooleanType WriteImage(const ImageInfo *image_info,Image *image,
+% ExceptionInfo *exception)
%
% A description of each parameter follows:
%
%
% o image: the image.
%
+% o exception: return any errors or warnings in this structure.
+%
*/
MagickExport MagickBooleanType WriteImage(const ImageInfo *image_info,
- Image *image)
+ Image *image,ExceptionInfo *exception)
{
char
filename[MaxTextExtent];
image_info->filename);
assert(image != (Image *) NULL);
assert(image->signature == MagickSignature);
+ assert(exception != (ExceptionInfo *) NULL);
sans_exception=AcquireExceptionInfo();
write_info=CloneImageInfo(image_info);
(void) CopyMagickString(write_info->filename,image->filename,MaxTextExtent);
{
if (image->clip_mask == (Image *) NULL)
{
- (void) ThrowMagickException(&image->exception,GetMagickModule(),
+ (void) ThrowMagickException(exception,GetMagickModule(),
OptionError,"NoClipPathDefined","`%s'",image->filename);
return(MagickFalse);
}
(GetNextImageInList(image) == (Image *) NULL) &&
(IsTaintImage(image) == MagickFalse))
{
- delegate_info=GetDelegateInfo(image->magick,write_info->magick,
- &image->exception);
+ delegate_info=GetDelegateInfo(image->magick,write_info->magick,exception);
if ((delegate_info != (const DelegateInfo *) NULL) &&
(GetDelegateMode(delegate_info) == 0) &&
(IsPathAccessible(image->magick_filename) != MagickFalse))
(void) CopyMagickString(image->filename,image->magick_filename,
MaxTextExtent);
status=InvokeDelegate(write_info,image,image->magick,
- write_info->magick,&image->exception);
+ write_info->magick,exception);
write_info=DestroyImageInfo(write_info);
(void) CopyMagickString(image->filename,filename,MaxTextExtent);
return(status);
filename[MaxTextExtent];
(void) CopyMagickString(filename,image->filename,MaxTextExtent);
- status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
+ status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
(void) CopyMagickString(image->filename,filename,MaxTextExtent);
if (status != MagickFalse)
{
}
else
{
- delegate_info=GetDelegateInfo((char *) NULL,write_info->magick,
- &image->exception);
+ delegate_info=GetDelegateInfo((char *) NULL,write_info->magick,exception);
if (delegate_info != (DelegateInfo *) NULL)
{
/*
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
LockSemaphoreInfo(constitute_semaphore);
status=InvokeDelegate(write_info,image,(char *) NULL,
- write_info->magick,&image->exception);
+ write_info->magick,exception);
if (GetDelegateThreadSupport(delegate_info) == MagickFalse)
UnlockSemaphoreInfo(constitute_semaphore);
(void) CopyMagickString(image->filename,filename,MaxTextExtent);
{
(void) CopyMagickString(write_info->magick,image->magick,
MaxTextExtent);
- magick_info=GetMagickInfo(write_info->magick,&image->exception);
+ magick_info=GetMagickInfo(write_info->magick,exception);
}
if ((magick_info == (const MagickInfo *) NULL) ||
(GetImageEncoder(magick_info) == (EncodeImageHandler *) NULL))
GetPathComponent(image->filename,ExtensionPath,extension);
if (*extension != '\0')
- magick_info=GetMagickInfo(extension,&image->exception);
+ magick_info=GetMagickInfo(extension,exception);
else
- magick_info=GetMagickInfo(image->magick,&image->exception);
+ magick_info=GetMagickInfo(image->magick,exception);
(void) CopyMagickString(image->filename,filename,MaxTextExtent);
}
if ((magick_info == (const MagickInfo *) NULL) ||
(GetImageEncoder(magick_info) == (EncodeImageHandler *) NULL))
- (void) ThrowMagickException(&image->exception,GetMagickModule(),
+ (void) ThrowMagickException(exception,GetMagickModule(),
MissingDelegateError,"NoEncodeDelegateForThisImageFormat","`%s'",
image->filename);
else
}
}
if (GetBlobError(image) != MagickFalse)
- ThrowFileException(&image->exception,FileOpenError,
+ ThrowFileException(exception,FileOpenError,
"AnErrorHasOccurredWritingToFile",image->filename);
if (temporary == MagickTrue)
{
/*
Copy temporary image file to permanent.
*/
- status=OpenBlob(write_info,image,ReadBinaryBlobMode,&image->exception);
+ status=OpenBlob(write_info,image,ReadBinaryBlobMode,exception);
if (status != MagickFalse)
- status=ImageToFile(image,write_info->filename,&image->exception);
+ status=ImageToFile(image,write_info->filename,exception);
(void) CloseBlob(image);
(void) RelinquishUniqueFileResource(image->filename);
(void) CopyMagickString(image->filename,write_info->filename,
}
if ((LocaleCompare(write_info->magick,"info") != 0) &&
(write_info->verbose != MagickFalse))
- (void) IdentifyImage(image,stdout,MagickFalse,&image->exception);
+ (void) IdentifyImage(image,stdout,MagickFalse,exception);
write_info=DestroyImageInfo(write_info);
return(status);
}
if (number_images != 1)
progress_monitor=SetImageProgressMonitor(p,(MagickProgressMonitor) NULL,
p->client_data);
- status&=WriteImage(write_info,p);
+ status&=WriteImage(write_info,p,exception);
GetImageException(p,exception);
if (number_images != 1)
(void) SetImageProgressMonitor(p,progress_monitor,p->client_data);
extern MagickExport MagickBooleanType
ConstituteComponentGenesis(void),
- WriteImage(const ImageInfo *,Image *),
+ WriteImage(const ImageInfo *,Image *,ExceptionInfo *),
WriteImages(const ImageInfo *,Image *,const char *,ExceptionInfo *);
extern MagickExport void
{
(void) FormatLocaleString(p->filename,MaxTextExtent,"%s:%s",
delegate_info->decode,clone_info->filename);
- status=WriteImage(clone_info,p);
+ status=WriteImage(clone_info,p,exception);
if (status == MagickFalse)
{
(void) RelinquishUniqueFileResource(image_info->unique);
(void) AcquireUniqueFileResource(filename);
(void) FormatLocaleString(stipple_image->filename,MaxTextExtent,
"xbm:%s",filename);
- (void) WriteImage(image_info,stipple_image);
+ (void) WriteImage(image_info,stipple_image,&(*image)->exception);
stipple_image=DestroyImage(stipple_image);
image_info=DestroyImageInfo(image_info);
status=XReadBitmapFile(display,root_window,filename,&width,
(void) AcquireUniqueFilename(filename);
(void) FormatLocaleString((*image)->filename,MaxTextExtent,"launch:%s",
filename);
- status=WriteImage(image_info,*image);
+ status=WriteImage(image_info,*image,&(*image)->exception);
if (status == MagickFalse)
XNoticeWidget(display,windows,"Unable to launch image editor",
(char *) NULL);
(void) AcquireUniqueFilename(filename);
(void) FormatLocaleString((*image)->filename,MaxTextExtent,"preview:%s",
filename);
- status=WriteImage(image_info,*image);
+ status=WriteImage(image_info,*image,&(*image)->exception);
(void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
preview_image=ReadImage(image_info,&(*image)->exception);
(void) RelinquishUniqueFileResource(filename);
break;
(void) FormatLocaleString(preview_image->filename,MaxTextExtent,"show:%s",
filename);
- status=WriteImage(image_info,preview_image);
+ status=WriteImage(image_info,preview_image,&(*image)->exception);
preview_image=DestroyImage(preview_image);
if (status == MagickFalse)
XNoticeWidget(display,windows,"Unable to show image preview",
(void) AcquireUniqueFilename(filename);
(void) FormatLocaleString((*image)->filename,MaxTextExtent,"histogram:%s",
filename);
- status=WriteImage(image_info,*image);
+ status=WriteImage(image_info,*image,&(*image)->exception);
(void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
histogram_image=ReadImage(image_info,&(*image)->exception);
(void) RelinquishUniqueFileResource(filename);
break;
(void) FormatLocaleString(histogram_image->filename,MaxTextExtent,
"show:%s",filename);
- status=WriteImage(image_info,histogram_image);
+ status=WriteImage(image_info,histogram_image,&(*image)->exception);
histogram_image=DestroyImage(histogram_image);
if (status == MagickFalse)
XNoticeWidget(display,windows,"Unable to show histogram",
(void) AcquireUniqueFilename(filename);
(void) FormatLocaleString((*image)->filename,MaxTextExtent,"matte:%s",
filename);
- status=WriteImage(image_info,*image);
+ status=WriteImage(image_info,*image,&(*image)->exception);
(void) CopyMagickString(image_info->filename,filename,MaxTextExtent);
matte_image=ReadImage(image_info,&(*image)->exception);
(void) RelinquishUniqueFileResource(filename);
break;
(void) FormatLocaleString(matte_image->filename,MaxTextExtent,"show:%s",
filename);
- status=WriteImage(image_info,matte_image);
+ status=WriteImage(image_info,matte_image,&(*image)->exception);
matte_image=DestroyImage(matte_image);
if (status == MagickFalse)
XNoticeWidget(display,windows,"Unable to show matte",
(void) AcquireUniqueFilename(filename);
(void) FormatLocaleString(print_image->filename,MaxTextExtent,"print:%s",
filename);
- status=WriteImage(image_info,print_image);
+ status=WriteImage(image_info,print_image,&image->exception);
(void) RelinquishUniqueFileResource(filename);
print_image=DestroyImage(print_image);
image_info=DestroyImageInfo(image_info);
Write image.
*/
(void) CopyMagickString(save_image->filename,filename,MaxTextExtent);
- status=WriteImage(image_info,save_image);
+ status=WriteImage(image_info,save_image,&image->exception);
if (status != MagickFalse)
image->taint=MagickFalse;
save_image=DestroyImage(save_image);
file=close(file)-1;
(void) FormatLocaleString(preview_image->filename,MaxTextExtent,
"jpeg:%s",filename);
- status=WriteImage(preview_info,preview_image);
+ status=WriteImage(preview_info,preview_image,exception);
if (status != MagickFalse)
{
Image
*/
for (x=0; x < (ssize_t) scale_image->columns; x++)
{
- for (i=0; i < (ssize_t) GetPixelChannels(image); i++)
+ for (i=0; i < (ssize_t) GetPixelChannels(scale_image); i++)
{
traits=GetPixelChannelMapTraits(image,(PixelChannel) i);
if (traits == UndefinedPixelTrait)
GetPixelChannelMapChannel(image,AlphaPixelChannel)];
gamma=1.0/(fabs((double) alpha) <= MagickEpsilon ? 1.0 : alpha);
q[channel]=ClampToQuantum(gamma*scale_scanline[
- GetPixelChannels(scale_image)+channel]);
+ x*GetPixelChannels(scale_image)+channel]);
}
q+=GetPixelChannels(scale_image);
}
assert(image->signature == MagickSignature);
write_info=CloneImageInfo(image_info);
write_info->stream=stream;
- status=WriteImage(write_info,image);
+ status=WriteImage(write_info,image,&image->exception);
write_info=DestroyImageInfo(write_info);
return(status);
}
(void) CopyMagickString(display_image->filename,
resource_info.write_filename,MaxTextExtent);
(void) SetImageInfo(image_info,1,&display_image->exception);
- status&=WriteImage(image_info,display_image);
+ status&=WriteImage(image_info,display_image,
+ &display_image->exception);
GetImageException(display_image,exception);
}
/*
return(MagickFalse);
write_info=CloneImageInfo(wand->image_info);
write_info->adjoin=MagickTrue;
- status=WriteImage(write_info,image);
- if (status == MagickFalse)
- InheritException(wand->exception,&image->exception);
+ status=WriteImage(write_info,image,&image->exception);
image=DestroyImage(image);
write_info=DestroyImageInfo(write_info);
return(status);
write_info=CloneImageInfo(wand->image_info);
SetImageInfoFile(write_info,file);
write_info->adjoin=MagickTrue;
- status=WriteImage(write_info,image);
+ status=WriteImage(write_info,image,&image->exception);
write_info=DestroyImageInfo(write_info);
- if (status == MagickFalse)
- InheritException(wand->exception,&image->exception);
image=DestroyImage(image);
return(status);
}
(argument_list[2].integer_reference != 0))
(void) SetImageArtifact(image,"identify:unique","true");
(void) IdentifyImage(image,argument_list[0].file_reference,
- MagickTrue);
+ MagickTrue,exception);
break;
}
case 91: /* SepiaTone */
GetImageListLength(image),&image->exception);
for (next=image; next; next=next->next)
{
- (void) WriteImage(package_info->image_info,next);
- if (next->exception.severity >= ErrorException)
- InheritException(exception,&next->exception);
- GetImageException(next,exception);
+ (void) WriteImage(package_info->image_info,next,exception);
number_images++;
if (package_info->image_info->adjoin)
break;
if (LocaleCompare(write_info->magick,"CLIP") == 0)
(void) FormatLocaleString(clip_image->filename,MaxTextExtent,"miff:%s",
write_info->filename);
- status=WriteImage(write_info,clip_image);
+ status=WriteImage(write_info,clip_image,&image->exception);
clip_image=DestroyImage(clip_image);
write_info=DestroyImageInfo(write_info);
return(status);
if (LocaleCompare(write_info->magick,"HISTOGRAM") == 0)
(void) FormatLocaleString(histogram_image->filename,MaxTextExtent,
"miff:%s",write_info->filename);
- status=WriteImage(write_info,histogram_image);
+ status=WriteImage(write_info,histogram_image,&image->exception);
histogram_image=DestroyImage(histogram_image);
write_info=DestroyImageInfo(write_info);
return(status);
next=GetNextImageInList(image);
image->next=NewImageList();
(void) CopyMagickString(image->magick,"PNG",MaxTextExtent);
- (void) WriteImage(write_info,image);
+ (void) WriteImage(write_info,image,&image->exception);
image->next=next;
/*
Determine image map filename.
}
(void) FormatLocaleString(matte_image->filename,MaxTextExtent,
"MIFF:%s",image->filename);
- status=WriteImage(image_info,matte_image);
+ status=WriteImage(image_info,matte_image,exception);
matte_image=DestroyImage(matte_image);
return(status);
}
frame=CloneImage(p,0,0,MagickTrue,&p->exception);
if (frame == (Image *) NULL)
break;
- status=WriteImage(write_info,frame);
+ status=WriteImage(write_info,frame,&image->exception);
frame=DestroyImage(frame);
break;
}
/* process */
{
- (void) WriteImage(msl_info->image_info[n], msl_info->image[n]);
+ (void) WriteImage(msl_info->image_info[n], msl_info->image[n],
+ &msl_info->image[n]->exception);
break;
}
}
if (LocaleCompare(write_info->magick,"PREVIEW") == 0)
(void) FormatLocaleString(preview_image->filename,MaxTextExtent,
"miff:%s",image_info->filename);
- status=WriteImage(write_info,preview_image);
+ status=WriteImage(write_info,preview_image,&image->exception);
preview_image=DestroyImage(preview_image);
write_info=DestroyImageInfo(write_info);
return(status);
if (LocaleCompare(write_info->magick,"THUMBNAIL") == 0)
(void) FormatLocaleString(thumbnail_image->filename,MaxTextExtent,
"miff:%s",write_info->filename);
- status=WriteImage(write_info,thumbnail_image);
+ status=WriteImage(write_info,thumbnail_image,&image->exception);
thumbnail_image=DestroyImage(thumbnail_image);
write_info=DestroyImageInfo(write_info);
return(status);
if (LocaleCompare(write_info->magick,"VID") == 0)
(void) FormatLocaleString(montage_image->filename,MaxTextExtent,
"miff:%s",write_info->filename);
- status=WriteImage(write_info,montage_image);
+ status=WriteImage(write_info,montage_image,&image->exception);
montage_image=DestroyImage(montage_image);
write_info=DestroyImageInfo(write_info);
return(status);
continue;
}
reference_image->compression=reference_formats[i].compression;
- status=WriteImage(image_info,reference_image);
- InheritException(exception,&reference_image->exception);
+ status=WriteImage(image_info,reference_image,exception);
reference_image=DestroyImage(reference_image);
if (status == MagickFalse)
{
continue;
}
reference_image->compression=reference_formats[i].compression;
- status=WriteImage(image_info,reference_image);
- InheritException(exception,&reference_image->exception);
+ status=WriteImage(image_info,reference_image,exception);
reference_image=DestroyImage(reference_image);
if (status == MagickFalse)
{
reference_formats[i].magick,output_filename);
reference_image->depth=reference_types[j].depth;
reference_image->compression=reference_formats[i].compression;
- status=WriteImage(image_info,reference_image);
- InheritException(exception,&reference_image->exception);
+ status=WriteImage(image_info,reference_image,exception);
if (status == MagickFalse)
{
(void) FormatLocaleFile(stdout,"... fail @ %s/%s/%lu.\n",
(void) AcquireUniqueFilename(output_filename);
(void) CopyMagickString(reference_image->filename,reference_filename,
MaxTextExtent);
- status=WriteImage(image_info,reference_image);
- InheritException(exception,&reference_image->exception);
+ status=WriteImage(image_info,reference_image,exception);
reference_image=DestroyImage(reference_image);
if (status == MagickFalse)
fail++;