1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
/*=========================================================================
*
* Copyright Insight Software Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
#ifndef QuickView_h
#define QuickView_h
#include <vector>
#include <algorithm>
#include <string>
#include <itkImage.h>
#include <itkRGBPixel.h>
#include <itkIntTypes.h>
#include "ITKVtkGlueExport.h"
/** \class ImageInfo
* \brief A container for an image and its descriptiom
* \ingroup ITKVtkGlue
*/
class ITKVtkGlue_EXPORT ImageInfo
{
public:
typedef itk::Image<unsigned char, 2> ImageType;
ImageInfo(ImageType *image, std::string description="")
{
m_Image = image;
m_Description = description;
}
ImageType::Pointer m_Image;
std::string m_Description;
};
/** \class RGBImageInfo
* \brief A container for an rgb image and its descriptiom
* \ingroup ITKVtkGlue
*/
class ITKVtkGlue_EXPORT RGBImageInfo
{
public:
typedef itk::Image<itk::RGBPixel<unsigned char>, 2> ImageType;
RGBImageInfo(ImageType *image, std::string description="")
{
m_Image = image;
m_Description = description;
}
ImageType::Pointer m_Image;
std::string m_Description;
};
/** \class QuickView
* \brief A convenient class to render itk images with vtk
*
* This class presents a convenient and efficient mechanism to display
* ITK images in VTK render windows.
*
* The AddImage and AddRGBImage methods collect ITK images to be
* rendered in a collection of VTK RenderWindow's. Each image can
* be flipped about the vertical axis. An optional description will be
* displayed at the bottom of each render window.
*
* If m_ShareCamera is true, a single <a href="http://www.vtk.org/doc/nightly/html/classvtkCamera.html">vtkCamera</a>
* will be used for each render window (default is false).
*
* Each image is rescaled to have a range between 0 and 255. Currently, the size
* of each render window is fixed at 300,300 and the text size for descriptions
* is fixed at 10.
*
* The Visualize method displays the render windows and starts a
* <a href="http://www.vtk.org/doc/nightly/html/classvtkInteractorStyleImage.html">vtkInteractorStyleImage</a>.
* The layout and background color of each render window is fixed. The optional
* boolean for the constructor, if false, bypasses the interactor. This is useful
* for running tests.
*
* Typical usage:
*
* \code
* QuickView viewer;
* viewer.AddImage(someFilter->GetOutput().
* true (to flip image) or false.
* "text to display with the image");
*
* viewer.AddRGBImage(someFilter->GetOutput().
* true (to flip image) or false.
* "text to display with the image");
* \endcode
*
* \ingroup ITKVtkGlue
*/
class ITKVtkGlue_EXPORT QuickView
{
public:
QuickView()
{
m_ShareCamera = true;
m_Interpolate = true;
m_Counter = 0;
m_Snapshot = false;
m_SnapshotPath = "";
m_SnapshotPrefix = "snapshot_";
m_SnapshotExtension = "png";
m_NumberOfColumns = 4;
m_ViewPortSize = 300;
}
/** Add an image to be rendered. */
template<typename TImage> void AddImage(
TImage *,
bool FlipVertical=true,
std::string Description="");
/** Add an RGB image to be rendered */
template<typename TImage> void AddRGBImage(
TImage *,
bool FlipVertical=true,
std::string Description="");
/** Render the images. If interact is tru, start a vtk
* Interactor. If false, return after one render.
*/
void Visualize(bool interact=true);
/** Each render window will have its own camera */
void ShareCameraOff()
{
m_ShareCamera = false;
}
/** Each render window will use the same camera */
void ShareCameraOn()
{
m_ShareCamera = true;
}
/** Use pixel replication in rendered image */
void InterpolateOff()
{
m_Interpolate = false;
}
/** Use pixel interpolation in rendered image */
void InterpolateOn()
{
m_Interpolate = true;
}
/** Each render window will take a snaphot */
void SnapshotOn()
{
m_Snapshot = true;
}
/** Each render window will take a snaphot */
void SnapshotOff()
{
m_Snapshot = false;
}
void SetSnapshotPath( const std::string& iPath )
{
m_SnapshotPath = iPath;
}
void SetSnapshotPrefix( const std::string& iPrefix )
{
m_SnapshotPrefix = iPrefix;
}
/** Provide the image format to be used when taking snapshot */
void SetSnapshotExtension( const std::string& iExtension )
{
m_SnapshotExtension = iExtension;
std::transform(
m_SnapshotExtension.begin(),
m_SnapshotExtension.end(),
m_SnapshotExtension.begin(),
::tolower );
}
/** Set the number of columns, default 4.*/
void SetNumberOfColumns (const unsigned int columns)
{
m_NumberOfColumns = columns;
}
/** Set the viewport size, default 300.*/
void SetViewPortSize (const unsigned int size)
{
m_ViewPortSize = size;
}
private:
std::vector<ImageInfo> Images; // Container for images
std::vector<RGBImageInfo> RGBImages; // Container for rgb images
itk::IdentifierType m_Counter;
std::string m_SnapshotPath;
std::string m_SnapshotPrefix;
std::string m_SnapshotExtension;
bool m_ShareCamera;
bool m_Snapshot;
bool m_Interpolate;
unsigned int m_NumberOfColumns;
unsigned int m_ViewPortSize;
};
#endif
|