PURIFY
Next-generation radio interferometric imaging
cimg.h
Go to the documentation of this file.
1 #ifndef PURIFY_CIMG_H
2 #define PURIFY_CIMG_H
3 #ifdef PURIFY_CImg
4 #include <CImg.h>
5 #ifdef Success
6 #undef Success
7 #endif
8 #ifdef Complex
9 #undef Complex
10 #endif
11 #ifdef Bool
12 #undef Bool
13 #endif
14 #ifdef None
15 #undef None
16 #endif
17 #ifdef Status
18 #undef Status
19 #endif
20 #endif
21 
22 #include "purify/config.h"
23 #include "purify/types.h"
24 #ifdef PURIFY_CImg
25 
26 namespace purify {
27 #ifdef PURIFY_CImg
29 template <class T = t_real>
30 using CImage = cimg_library::CImg<T>;
31 template <class T = t_real>
32 using CImageList = cimg_library::CImgList<T>;
34 typedef cimg_library::CImgDisplay CDisplay;
35 #endif
36 namespace cimg {
37 
39 template <class T>
40 CImage<typename T::Scalar> make_image(const Eigen::DenseBase<T> &x, const t_uint &rows,
41  const t_uint &cols);
43 template <class T>
44 CImage<typename T::Scalar> make_image(const Eigen::DenseBase<T> &x);
46 template <class T>
47 CDisplay make_display(const Eigen::DenseBase<T> &x, const t_uint &rows, const t_uint &cols,
48  const std::string &name = "");
50 template <class T>
51 CDisplay make_display(const Eigen::DenseBase<T> &x, const std::string &name = "");
52 
53 } // namespace cimg
54 } // namespace purify
55 
56 namespace purify {
57 namespace cimg {
58 
59 template <class T>
60 CImage<typename T::Scalar> make_image(const Eigen::DenseBase<T> &x, const t_uint &rows,
61  const t_uint &cols) {
62  assert(x.size() == rows * cols);
63  auto image = CImage<typename T::Scalar>(rows, cols, 1, 1);
64  Vector<typename T::Scalar>::Map(image.data(), x.size()) =
65  Vector<typename T::Scalar>::Map(x.derived().data(), x.size());
66  return image;
67 };
68 template <class T>
69 CImage<typename T::Scalar> make_image(const Eigen::DenseBase<T> &x) {
70  return make_image<typename T::PlainObject>(x, x.rows(), x.cols());
71 }
72 template <class T>
73 CDisplay make_display(const Eigen::DenseBase<T> &x, const t_uint &rows, const t_uint &cols,
74  const std::string &name) {
75  return CDisplay(cimg::make_image<typename T::PlainObject>(x.eval(), rows, cols), name.c_str());
76 }
77 
78 template <class T>
79 CDisplay make_display(const Eigen::DenseBase<T> &x, const std::string &name) {
80  return make_display<typename T::PlainObject>(x.eval(), x.rows(), x.cols(), name);
81 }
82 
83 } // namespace cimg
84 } // namespace purify
85 
86 #endif
87 
88 #endif