// This may look like C code, but it is really -*- C++ -*- // // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002 // // Implementation of ImageRef // // This is an internal implementation class. // #define MAGICKCORE_IMPLEMENTATION 1 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1 #include "Magick++/ImageRef.h" #include "Magick++/Exception.h" #include "Magick++/Options.h" // Construct with an image and default options Magick::ImageRef::ImageRef ( MagickCore::Image * image_ ) : _image(image_), _options(new Options), _id(-1), _refCount(1), _mutexLock() { } // Construct with an image and options // Inserts Image* in image, but copies Options into image. Magick::ImageRef::ImageRef ( MagickCore::Image * image_, const Options * options_ ) : _image(image_), _options(0), _id(-1), _refCount(1), _mutexLock() { _options = new Options( *options_ ); } // Default constructor Magick::ImageRef::ImageRef ( void ) : _image(0), _options(new Options), _id(-1), _refCount(1), _mutexLock() { // Allocate default image ExceptionInfo exceptionInfo; GetExceptionInfo( &exceptionInfo ); _image = AcquireImage( _options->imageInfo(), &exceptionInfo ); throwException( exceptionInfo ); (void) DestroyExceptionInfo( &exceptionInfo ); } // Destructor Magick::ImageRef::~ImageRef( void ) { // Unregister image (if still registered) if( _id > -1 ) { char id[MaxTextExtent]; sprintf(id,"%.20g",(double) _id); DeleteImageRegistry( id ); _id=-1; } // Deallocate image if ( _image ) { DestroyImageList( _image ); _image = 0; } // Deallocate image options delete _options; _options = 0; } // Assign image to reference void Magick::ImageRef::image ( MagickCore::Image * image_ ) { if(_image) DestroyImageList( _image ); _image = image_; } // Assign options to reference void Magick::ImageRef::options ( Magick::Options * options_ ) { delete _options; _options = options_; } // Assign registration id to reference void Magick::ImageRef::id ( const ssize_t id_ ) { if( _id > -1 ) { char id[MaxTextExtent]; sprintf(id,"%.20g",(double) _id); DeleteImageRegistry( id ); } _id = id_; }