1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the copyright notices for more information.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
21 #include "vtkImageData.h"
22 #include "clitkCommon.h"
25 //--------------------------------------------------------------------
31 //--------------------------------------------------------------------
34 //--------------------------------------------------------------------
36 for (unsigned int i = 0; i < mVtkImages.size(); i++) {
37 if (mVtkImages[i] != NULL)
38 mVtkImages[i]->Delete();
41 //--------------------------------------------------------------------
44 //--------------------------------------------------------------------
45 void vvImage::SetImage(std::vector<vtkImageData*> images) {
46 for (unsigned int i = 0; i < mVtkImages.size(); i++) {
47 if (mVtkImages[i] != NULL)
48 mVtkImages[i]->Delete();
51 for (unsigned int i = 0; i < images.size(); i++) {
52 mVtkImages.push_back(images[i]);
55 //--------------------------------------------------------------------
57 //--------------------------------------------------------------------
58 void vvImage::AddImage(vtkImageData* image) {
59 mVtkImages.push_back(image);
61 //--------------------------------------------------------------------
63 //--------------------------------------------------------------------
64 void vvImage::Init() {
65 for (unsigned int i = 0; i < mVtkImages.size(); i++) {
66 if (mVtkImages[i] != NULL)
67 mVtkImages[i]->Delete();
71 //--------------------------------------------------------------------
74 //--------------------------------------------------------------------
75 int vvImage::GetNumberOfSpatialDimensions() {
76 int dim=GetNumberOfDimensions();
82 //--------------------------------------------------------------------
85 //--------------------------------------------------------------------
86 int vvImage::GetNumberOfDimensions() const {
87 if (mVtkImages.size())
91 mVtkImages[0]->GetWholeExtent(extent);
92 if (extent[5] - extent[4] >= 1)
94 if (mVtkImages.size() > 1)
100 //--------------------------------------------------------------------
103 //--------------------------------------------------------------------
104 void vvImage::GetScalarRange(double* range)
106 assert(mVtkImages.size());
107 double * temp = mVtkImages[0]->GetScalarRange();
108 range[0]=temp[0];range[1]=temp[1];
109 for (unsigned int i=1;i<mVtkImages.size();i++)
111 temp = mVtkImages[i]->GetScalarRange();
112 if (temp[0] < range[0]) range[0]=temp[0];
113 if (temp[1] > range[1]) range[1]=temp[1];
116 //--------------------------------------------------------------------
119 //--------------------------------------------------------------------
120 std::string vvImage::GetScalarTypeAsString() {
121 // WARNING VTK pixel type different from ITK Pixel type
122 std::string vtktype = mVtkImages[0]->GetScalarTypeAsString();
123 if (vtktype == "unsigned char") return "unsigned_char";
124 if (vtktype == "unsigned short") return "unsigned_short";
125 if (vtktype == "unsigned int") return "unsigned_int";
128 //--------------------------------------------------------------------
131 //--------------------------------------------------------------------
132 int vvImage::GetNumberOfScalarComponents() {
133 return mVtkImages[0]->GetNumberOfScalarComponents();
135 //--------------------------------------------------------------------
138 //--------------------------------------------------------------------
139 int vvImage::GetScalarSize() {
140 return mVtkImages[0]->GetScalarSize();
142 //--------------------------------------------------------------------
145 //--------------------------------------------------------------------
146 std::vector<double> vvImage::GetSpacing() {
147 std::vector<double> spacing;
148 int dim = this->GetNumberOfDimensions();
149 for (int i = 0; i < dim; i++)
152 spacing.push_back(mTimeSpacing);
154 spacing.push_back(mVtkImages[0]->GetSpacing()[i]);
158 //--------------------------------------------------------------------
161 //--------------------------------------------------------------------
162 std::vector<double> vvImage::GetOrigin() const {
163 std::vector<double> origin;
164 int dim = this->GetNumberOfDimensions();
165 for (int i = 0; i < dim; i++)
168 origin.push_back(mTimeOrigin);
170 origin.push_back(mVtkImages[0]->GetOrigin()[i]);
174 //--------------------------------------------------------------------
177 //--------------------------------------------------------------------
178 std::vector<int> vvImage::GetSize() {
179 std::vector<int> size0;
180 int dim = this->GetNumberOfDimensions();
181 for (int i = 0; i < dim; i++)
184 size0.push_back(mVtkImages.size());
186 size0.push_back(mVtkImages[0]->GetDimensions()[i]);
190 //--------------------------------------------------------------------
193 //--------------------------------------------------------------------
194 unsigned long vvImage::GetActualMemorySize() {
195 unsigned long size = 0;
196 for (unsigned int i = 0; i < mVtkImages.size(); i++) {
197 size += mVtkImages[i]->GetActualMemorySize();
201 //--------------------------------------------------------------------
204 //--------------------------------------------------------------------
205 bool vvImage::IsTimeSequence() {
206 return mVtkImages.size()>1;
208 //--------------------------------------------------------------------
211 //--------------------------------------------------------------------
212 const std::vector<vtkImageData*>& vvImage::GetVTKImages() {
215 //--------------------------------------------------------------------
218 //--------------------------------------------------------------------
219 vtkImageData* vvImage::GetFirstVTKImageData() {
220 return mVtkImages[0];
222 //--------------------------------------------------------------------
225 //--------------------------------------------------------------------
226 bool vvImage::IsScalarTypeInteger() {
227 assert(mVtkImages.size()> 0);
228 int t = mVtkImages[0]->GetScalarType();
229 return IsScalarTypeInteger(t);
231 //--------------------------------------------------------------------
234 //--------------------------------------------------------------------
235 bool vvImage::IsScalarTypeInteger(int t) {
236 if ((t == VTK_BIT) ||
238 (t == VTK_UNSIGNED_CHAR) ||
240 (t == VTK_UNSIGNED_SHORT) ||
242 (t == VTK_UNSIGNED_INT) ||
244 (t == VTK_UNSIGNED_LONG)) {
251 //--------------------------------------------------------------------
254 #endif // VVIMAGE_CXX