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