30 #ifndef _D_IMAGE_IO_HXX
31 #define _D_IMAGE_IO_HXX
33 #if __cplusplus >= 201103L
35 #define auto_ptr unique_ptr
39 #include "IO/include/DCommonIO.h"
40 #include "DImageIO.hpp"
41 #include "Base/include/private/DImageArith.hpp"
43 #include "DImageIO_BMP.hpp"
44 #include "DImageIO_VTK.hpp"
45 #include "DImageIO_PBM.hpp"
48 #include "DImageIO_PNG.hpp"
51 #include "DImageIO_JPG.hpp"
54 #include "DImageIO_TIFF.hpp"
66 ImageFileHandler<T> *getHandlerForFile(
const char *filename)
68 string fileExt = getFileExtension(filename);
71 return new BMPImageFileHandler<T>();
74 else if (fileExt ==
"PNG")
75 return new PNGImageFileHandler<T>();
79 else if (fileExt ==
"JPG" || fileExt ==
"JPEG")
80 return new JPGImageFileHandler<T>();
84 else if (fileExt ==
"TIF" || fileExt ==
"TIFF")
85 return new TIFFImageFileHandler<T>();
88 else if (fileExt ==
"VTK")
89 return new VTKImageFileHandler<T>();
91 else if (fileExt ==
"PGM")
92 return new PGMImageFileHandler<T>();
94 else if (fileExt ==
"PBM")
95 return new PBMImageFileHandler<T>();
98 cout <<
"No reader/writer available for " << fileExt <<
" files." << endl;
111 string fileExt = getFileExtension(filename);
112 string filePrefix = (string(filename).substr(0, 7));
113 string prefix = string(filename);
115 if (prefix.find(
"http://") == 0 || prefix.find(
"https://") == 0) {
117 string tmpFileName =
"_smilTmpIO." + fileExt;
118 if (
getHttpFile(filename, tmpFileName.c_str()) != RES_OK) {
119 ERR_MSG(
string(
"Error downloading file ") + filename);
122 res =
read(tmpFileName.c_str(), image);
123 remove(tmpFileName.c_str());
126 ERR_MSG(
"Error: to use this functionality you must compile SMIL with the "
133 if (prefix.find(
"file://") == 0) {
134 string fName = filename;
135 string buf = fName.substr(7, fName.length() - 7);
136 return read(buf.c_str(), image);
139 auto_ptr<ImageFileHandler<T>> fHandler(getHandlerForFile<T>(filename));
142 return fHandler->read(filename, image);
151 template <
class T> RES_T
read(
const vector<string> fileList,
Image<T> &image)
153 size_t nFiles = fileList.size();
157 vector<string>::const_iterator it = fileList.begin();
160 ASSERT((
read((*it++).c_str(), tmpIm) == RES_OK));
165 ASSERT((image.
setSize(w, h, nFiles) == RES_OK));
166 ASSERT((
fill(image, T(0)) == RES_OK));
167 ASSERT((
copy(tmpIm, 0, 0, 0, image, 0, 0, 0) == RES_OK));
171 while (it != fileList.end()) {
172 ASSERT((
read((*it).c_str(), tmpIm) == RES_OK));
173 ASSERT((
copy(tmpIm, 0, 0, 0, image, 0, 0, z) == RES_OK));
186 string fileExt = getFileExtension(filename);
188 auto_ptr<ImageFileHandler<T>> fHandler(getHandlerForFile<T>(filename));
191 return fHandler->write(image, filename);
202 UINT nFiles = fileList.size();
204 ERR_MSG(
"The fileList must contain the same number of filename as the "
212 for (
size_t z = 0; z < nFiles; z++) {
213 ASSERT((
copy(image, 0, 0, z, tmpIm) == RES_OK));
214 ASSERT((
write(tmpIm, fileList[z].c_str()) == RES_OK));
224 RES_T
getFileInfo(
const char *filename, ImageFileInfo &fInfo);
size_t getDepth() const
Get image depth (Z)
Definition: DBaseImage.h:90
size_t getWidth() const
Get image width.
Definition: DBaseImage.h:80
size_t getHeight() const
Get image height.
Definition: DBaseImage.h:85
Definition: DBaseImage.h:386
Main Image class.
Definition: DImage.hpp:57
virtual RES_T setSize(size_t w, size_t h, size_t d=1, bool doAllocate=true)
Set the size of image.
RES_T fill(Image< T > &imOut, const T &value)
fill() - Fill an image with a given value.
Definition: DImageArith.hpp:1456
RES_T write(const Image< T > &image, const char *filename)
Write image into file.
Definition: DImageIO.hxx:184
RES_T read(const char *filename, Image< T > &image)
Read image file.
Definition: DImageIO.hxx:107
RES_T getFileInfo(const char *filename, ImageFileInfo &fInfo)
Get information about an image file.
Definition: DImageIO.cpp:51
RES_T getHttpFile(const char *url, const char *outfilename)
Get a file from an URL.
Definition: DCommonIO.cpp:136
BaseImage * createFromFile(const char *filename)
createFromFile TBD
Definition: DImageIO.cpp:62