4 #include "vtkImageData.h"
5 #include "clitkCommon.h"
8 //--------------------------------------------------------------------
12 //--------------------------------------------------------------------
15 //--------------------------------------------------------------------
17 for (unsigned int i = 0; i < mVtkImages.size(); i++) {
18 if (mVtkImages[i] != NULL)
19 mVtkImages[i]->Delete();
22 //--------------------------------------------------------------------
25 //--------------------------------------------------------------------
26 void vvImage::SetImage(std::vector<vtkImageData*> images) {
27 for (unsigned int i = 0; i < mVtkImages.size(); i++) {
28 if (mVtkImages[i] != NULL)
29 mVtkImages[i]->Delete();
32 for (unsigned int i = 0; i < images.size(); i++) {
33 mVtkImages.push_back(images[i]);
36 //--------------------------------------------------------------------
38 //--------------------------------------------------------------------
39 void vvImage::AddImage(vtkImageData* image) {
40 mVtkImages.push_back(image);
42 //--------------------------------------------------------------------
44 //--------------------------------------------------------------------
45 void vvImage::Init() {
46 for (unsigned int i = 0; i < mVtkImages.size(); i++) {
47 if (mVtkImages[i] != NULL)
48 mVtkImages[i]->Delete();
52 //--------------------------------------------------------------------
55 //--------------------------------------------------------------------
56 int vvImage::GetNumberOfSpatialDimensions() {
57 int dim=GetNumberOfDimensions();
63 //--------------------------------------------------------------------
66 //--------------------------------------------------------------------
67 int vvImage::GetNumberOfDimensions() const {
68 if (mVtkImages.size())
72 mVtkImages[0]->GetWholeExtent(extent);
73 if (extent[5] - extent[4] >= 1)
75 if (mVtkImages.size() > 1)
81 //--------------------------------------------------------------------
84 //--------------------------------------------------------------------
85 void vvImage::GetScalarRange(double* range)
87 assert(mVtkImages.size());
88 double * temp = mVtkImages[0]->GetScalarRange();
89 range[0]=temp[0];range[1]=temp[1];
90 for (unsigned int i=1;i<mVtkImages.size();i++)
92 temp = mVtkImages[i]->GetScalarRange();
93 if (temp[0] < range[0]) range[0]=temp[0];
94 if (temp[1] > range[1]) range[1]=temp[1];
97 //--------------------------------------------------------------------
100 //--------------------------------------------------------------------
101 std::string vvImage::GetScalarTypeAsString() {
102 // WARNING VTK pixel type different from ITK Pixel type
103 std::string vtktype = mVtkImages[0]->GetScalarTypeAsString();
104 if (vtktype == "unsigned char") return "unsigned_char";
105 if (vtktype == "unsigned short") return "unsigned_short";
106 if (vtktype == "unsigned int") return "unsigned_int";
109 //--------------------------------------------------------------------
112 //--------------------------------------------------------------------
113 int vvImage::GetNumberOfScalarComponents() {
114 return mVtkImages[0]->GetNumberOfScalarComponents();
116 //--------------------------------------------------------------------
119 //--------------------------------------------------------------------
120 int vvImage::GetScalarSize() {
121 return mVtkImages[0]->GetScalarSize();
123 //--------------------------------------------------------------------
126 //--------------------------------------------------------------------
127 std::vector<double> vvImage::GetSpacing() {
128 std::vector<double> spacing;
129 int dim = this->GetNumberOfDimensions();
130 for (int i = 0; i < dim; i++)
133 spacing.push_back(1);
135 spacing.push_back(mVtkImages[0]->GetSpacing()[i]);
139 //--------------------------------------------------------------------
142 //--------------------------------------------------------------------
143 std::vector<double> vvImage::GetOrigin() const {
144 std::vector<double> origin;
145 int dim = this->GetNumberOfDimensions();
146 for (int i = 0; i < dim; i++)
151 origin.push_back(mVtkImages[0]->GetOrigin()[i]);
155 //--------------------------------------------------------------------
158 //--------------------------------------------------------------------
159 std::vector<int> vvImage::GetSize() {
160 std::vector<int> size0;
161 int dim = this->GetNumberOfDimensions();
162 for (int i = 0; i < dim; i++)
165 size0.push_back(mVtkImages.size());
167 size0.push_back(mVtkImages[0]->GetDimensions()[i]);
171 //--------------------------------------------------------------------
174 //--------------------------------------------------------------------
175 unsigned long vvImage::GetActualMemorySize() {
176 unsigned long size = 0;
177 for (unsigned int i = 0; i < mVtkImages.size(); i++) {
178 size += mVtkImages[i]->GetActualMemorySize();
182 //--------------------------------------------------------------------
185 //--------------------------------------------------------------------
186 bool vvImage::IsTimeSequence() {
187 return mVtkImages.size()>1;
189 //--------------------------------------------------------------------
192 //--------------------------------------------------------------------
193 const std::vector<vtkImageData*>& vvImage::GetVTKImages() {
196 //--------------------------------------------------------------------
199 //--------------------------------------------------------------------
200 vtkImageData* vvImage::GetFirstVTKImageData() {
201 return mVtkImages[0];
203 //--------------------------------------------------------------------
206 //--------------------------------------------------------------------
207 bool vvImage::IsScalarTypeInteger() {
208 assert(mVtkImages.size()> 0);
209 int t = mVtkImages[0]->GetScalarType();
210 return IsScalarTypeInteger(t);
212 //--------------------------------------------------------------------
215 //--------------------------------------------------------------------
216 bool vvImage::IsScalarTypeInteger(int t) {
217 if ((t == VTK_BIT) ||
219 (t == VTK_UNSIGNED_CHAR) ||
221 (t == VTK_UNSIGNED_SHORT) ||
223 (t == VTK_UNSIGNED_INT) ||
225 (t == VTK_UNSIGNED_LONG)) {
232 //--------------------------------------------------------------------
235 #endif // VVIMAGE_CXX