ImageRef.cpp revision e31feb8a39ea937a6328da579085cd2ee66ab4c0
1// This may look like C code, but it is really -*- C++ -*- 2// 3// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002 4// 5// Implementation of ImageRef 6// 7// This is an internal implementation class. 8// 9 10#define MAGICKCORE_IMPLEMENTATION 1 11#define MAGICK_PLUSPLUS_IMPLEMENTATION 1 12 13#include "Magick++/ImageRef.h" 14#include "Magick++/Exception.h" 15#include "Magick++/Options.h" 16 17Magick::ImageRef::ImageRef(void) 18 : _image(0), 19 _options(new Options), 20 _id(-1), 21 _refCount(1), 22 _mutexLock() 23{ 24 GetPPException; 25 _image=AcquireImage(_options->imageInfo(),exceptionInfo); 26 ThrowPPException; 27} 28 29Magick::ImageRef::ImageRef(MagickCore::Image *image_) 30 : _image(image_), 31 _options(new Options), 32 _id(-1), 33 _refCount(1), 34 _mutexLock() 35{ 36} 37 38Magick::ImageRef::ImageRef(MagickCore::Image *image_,const Options *options_) 39 : _image(image_), 40 _options(0), 41 _id(-1), 42 _refCount(1), 43 _mutexLock() 44{ 45 _options=new Options(*options_); 46} 47 48Magick::ImageRef::~ImageRef(void) 49{ 50 // Unregister image (if still registered) 51 if (_id > -1) 52 { 53 char 54 id[MaxTextExtent]; 55 56 sprintf(id,"%.20g",(double) _id); 57 DeleteImageRegistry(id); 58 _id=-1; 59 } 60 61 // Deallocate image 62 if (_image != (MagickCore::Image*) NULL) 63 { 64 DestroyImageList(_image); 65 _image=(MagickCore::Image*) NULL; 66 } 67 68 // Deallocate image options 69 delete _options; 70 _options=(Options *) NULL; 71} 72 73void Magick::ImageRef::id(const ssize_t id_) 74{ 75 if (_id > -1) 76 { 77 char 78 id[MaxTextExtent]; 79 sprintf(id,"%.20g",(double) _id); 80 DeleteImageRegistry(id); 81 } 82 _id=id_; 83} 84 85::ssize_t Magick::ImageRef::id(void) const 86{ 87 return(_id); 88} 89 90MagickCore::Image *&Magick::ImageRef::image(void) 91{ 92 return(_image); 93} 94 95void Magick::ImageRef::image(MagickCore::Image * image_) 96{ 97 if (_image != (MagickCore::Image*) NULL) 98 DestroyImageList(_image); 99 _image=image_; 100} 101 102void Magick::ImageRef::options(Magick::Options *options_) 103{ 104 delete _options; 105 _options=options_; 106} 107 108Magick::Options *Magick::ImageRef::options(void) 109{ 110 return(_options); 111} 112