last-svn-commit-14-g304dee0 Cleanup to_qimage convertion routines.

* mln/convert/to_qimage.hh: Remove useless comments and move a specific implementation... * mln/convert/to_qimage_nocopy.hh: ... in this new file. --- milena/ChangeLog | 9 ++ milena/mln/convert/to_qimage.hh | 145 +------------------------------- milena/mln/convert/to_qimage_nocopy.hh | 139 ++++++++++++++++++++++++++++++ 3 files changed, 149 insertions(+), 144 deletions(-) create mode 100644 milena/mln/convert/to_qimage_nocopy.hh diff --git a/milena/ChangeLog b/milena/ChangeLog index 4164689..9a870bf 100644 --- a/milena/ChangeLog +++ b/milena/ChangeLog @@ -1,5 +1,14 @@ 2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + Cleanup to_qimage convertion routines. + + * mln/convert/to_qimage.hh: Remove useless comments and move a + specific implementation... + + * mln/convert/to_qimage_nocopy.hh: ... in this new file. + +2010-02-16 Guillaume Lazzara <z@lrde.epita.fr> + Add a routine to convert to a QImage. * mln/convert/to_qimage.hh: New. diff --git a/milena/mln/convert/to_qimage.hh b/milena/mln/convert/to_qimage.hh index 9b2f31c..b51de25 100644 --- a/milena/mln/convert/to_qimage.hh +++ b/milena/mln/convert/to_qimage.hh @@ -1,4 +1,4 @@ -// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE) +// Copyright (C) 2010 EPITA Research and Development Laboratory (LRDE) // // This file is part of Olena. // @@ -42,11 +42,6 @@ # include <mln/value/rgb8.hh> - -// # undef QT_VERSION -// # define QT_VERSION 0x040000 - - # if QT_VERSION < 0x040000 # error "Your version of Qt is too old and is not supported." # endif @@ -108,45 +103,6 @@ namespace mln - -// template <typename I> -// inline -// QImage to_qimage_scalar(const Image<I>& ima_) -// { -// const I& ima = exact(ima_); -// mln_precondition(ima.is_valid()); - -// const int -// nrows = geom::nrows(ima), -// ncols = geom::ncols(ima); - -// // Required by a one-shot data copy: -// mln::border::resize(ima, 0); - -// QImage qima(ncols, nrows, QImage::Format_RGB888); -// uchar * ptr_qima = qima.scanLine(0); -// const mln_value(I)* ptr_ima = &ima(ima.domain().pmin()); -// unsigned row_offset = ima.delta_index(dpoint2d(+1, - ncols)); - -// for (unsigned row = 0; row < nrows; ++row, ptr_ima += row_offset) -// for (unsigned col = 0; col < ncols; ++col) -// { -// const mln_value(I)& v = *ptr_ima++; - - - -// std::memcpy(qima.scanLine(0), -// ima.buffer(), -// ima.nelements() * sizeof(mln_value(I))); - -// return qima; -// } - -// # endif // ! QT_VERSION - - - - # if QT_VERSION >= 0x040000 && QT_VERSION < 0x040400 template <typename I> @@ -237,105 +193,6 @@ namespace mln } - // Not used by default since it does not create a deep copy. - template <typename I> - inline - QImage to_qimage_qt_rgb32_nocopy(const Image<I>& ima_) - { - const I& ima = exact(ima_); - mln_precondition(ima.is_valid()); - - const int - nrows = geom::nrows(ima), - ncols = geom::ncols(ima); - - - // Required by a one-shot data copy: - mln::border::resize(ima, 0); - - QImage qima((uchar *)(ima.buffer()), ncols, nrows, - QImage::Format_RGB32); - - return qima; - } - - -// template <typename I> -// inline -// QImage to_qimage_rgb8_3(const Image<I>& ima_) -// { -// const I& ima = exact(ima_); -// mln_precondition(ima.is_valid()); - -// const int -// nrows = geom::nrows(ima), -// ncols = geom::ncols(ima); - -// QImage qima(ncols, nrows, QImage::Format_RGB888); -// uchar * ptr_qima = qima.scanLine(0); -// const mln_value(I)* ptr_ima = &ima(ima.domain().pmin()); -// unsigned row_offset = ima.delta_index(dpoint2d(+1, - ncols)); - -// for (unsigned row = 0; row < nrows; ++row, ptr_ima += row_offset) -// for (unsigned col = 0; col < ncols; ++col) -// { -// const value::rgb8& v = *ptr_ima++; -// *ptr_qima++ = v.red(); -// *ptr_qima++ = v.green(); -// *ptr_qima++ = v.blue(); -// } - -// return qima; -// } - - -// template <typename I> -// inline -// QImage to_qimage_rgb8_4(const Image<I>& ima_) -// { -// const I& ima = exact(ima_); -// mln_precondition(ima.is_valid()); - -// const int -// nrows = geom::nrows(ima), -// ncols = geom::ncols(ima); - - -// // Required by a one-shot data copy: -// mln::border::resize(ima, 0); - -// QImage qima(ncols, nrows, QImage::Format_RGB32); -// std::memcpy(qima.scanLine(0), -// ima.buffer(), -// ima.nelements() * 4); - -// return qima; -// } - - -// template <typename I> -// inline -// QImage to_qimage_rgb8_5(const Image<I>& ima_) -// { -// const I& ima = exact(ima_); -// mln_precondition(ima.is_valid()); - -// const int -// nrows = geom::nrows(ima), -// ncols = geom::ncols(ima); - -// QImage qima(ncols + 2 * ima.border(), -// nrows + 2 * ima.border(), -// QImage::Format_RGB32); -// std::memcpy(qima.scanLine(0), -// ima.buffer(), -// ima.nelements() * 3); - -// return qima; -// } - - - } // end of namespace mln::convert::implementation diff --git a/milena/mln/convert/to_qimage_nocopy.hh b/milena/mln/convert/to_qimage_nocopy.hh new file mode 100644 index 0000000..9ddf5f4 --- /dev/null +++ b/milena/mln/convert/to_qimage_nocopy.hh @@ -0,0 +1,139 @@ +// Copyright (C) 2010 EPITA Research and Development Laboratory (LRDE) +// +// This file is part of Olena. +// +// Olena is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation, version 2 of the License. +// +// Olena is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Olena. If not, see <http://www.gnu.org/licenses/>. +// +// As a special exception, you may use this file as part of a free +// software project without restriction. Specifically, if other files +// instantiate templates or use macros or inline functions from this +// file, or you compile this file and link it with other files to produce +// an executable, this file does not by itself cause the resulting +// executable to be covered by the GNU General Public License. This +// exception does not however invalidate any other reasons why the +// executable file might be covered by the GNU General Public License. + +/// \file +/// +/// Convert a Milena image to a Qimage. + + +#ifndef MLN_CONVERT_TO_QIMAGE_NOCOPY_HH +# define MLN_CONVERT_TO_QIMAGE_NOCOPY_HH + +# include <QtGui/QImage> + +# include <mln/core/concept/image.hh> +# include <mln/geom/nrows.hh> +# include <mln/geom/ncols.hh> +# include <mln/border/resize.hh> + + +# include <mln/value/qt/rgb32.hh> +# include <mln/value/rgb8.hh> + +# if QT_VERSION < 0x040000 +# error "Your version of Qt is too old and is not supported." +# endif + + +namespace mln +{ + + namespace convert + { + + // Implementation + + namespace implementation + { + + template <typename I> + inline + QImage to_qimage_nocopy_qt_rgb32(const Image<I>& ima_) + { + const I& ima = exact(ima_); + mln_precondition(ima.is_valid()); + + const int + nrows = geom::nrows(ima), + ncols = geom::ncols(ima); + + mln::border::resize(ima, 0); + + QImage qima((uchar *)(ima.buffer()), ncols, nrows, + QImage::Format_RGB32); + + return qima; + } + + + } // end of namespace mln::convert::implementation + + + + // Dispatch + + namespace internal + { + + template <typename I> + inline + QImage to_qimage_nocopy_dispatch(const Image<I>& ima, const value::qt::rgb32&) + { + return implementation::to_qimage_nocopy_qt_rgb32(ima); + } + + + template <typename I, typename V> + inline + QImage to_qimage_nocopy_dispatch(const Image<I>& ima, V&) + { + // Not supported yet! + mlc_abort(I)::check(); + return QImage(); + } + + + template <typename I> + inline + QImage to_qimage_nocopy_dispatch(const Image<I>& ima) + { + typedef mln_value(I) V; + return to_qimage_nocopy_dispatch(ima, V()); + } + + } // end of namespace mln::convert::internal + + + + // Facade + + template <typename I> + inline + QImage to_qimage_nocopy_nocopy(const Image<I>& ima_) + { + const I& ima = exact(ima_); + mln_precondition(ima.is_valid()); + + QImage output = internal::to_qimage_nocopy_dispatch(ima); + + return output; + } + + + } // end of namespace mln::convert + +} // end of namespace mln + +#endif // ! MLN_CONVERT_TO_QIMAGE_NOCOPY_HH -- 1.5.6.5
participants (1)
-
Guillaume Lazzara