summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/gil/test/legacy/recreate_image.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/gil/test/legacy/recreate_image.cpp')
-rw-r--r--src/boost/libs/gil/test/legacy/recreate_image.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/boost/libs/gil/test/legacy/recreate_image.cpp b/src/boost/libs/gil/test/legacy/recreate_image.cpp
new file mode 100644
index 000000000..7ca616cdb
--- /dev/null
+++ b/src/boost/libs/gil/test/legacy/recreate_image.cpp
@@ -0,0 +1,108 @@
+//
+// Copyright 2005-2007 Adobe Systems Incorporated
+//
+// Distributed under the Boost Software License, Version 1.0
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+//
+#ifdef _MSC_VER
+//#pragma warning(disable : 4244) // conversion from 'gil::image<V,Alloc>::coord_t' to 'int', possible loss of data (visual studio compiler doesn't realize that the two types are the same)
+#pragma warning(disable : 4503) // decorated name length exceeded, name was truncated
+#endif
+
+#include <boost/gil/extension/dynamic_image/dynamic_image_all.hpp>
+
+#include <boost/core/lightweight_test.hpp>
+
+#include <ios>
+#include <iostream>
+#include <fstream>
+#include <map>
+#include <string>
+#include <type_traits>
+#include <vector>
+
+using namespace boost::gil;
+using namespace std;
+using namespace boost;
+
+///////////////////////////////////////////////////////////////
+
+std::size_t is_planar_impl( const std::size_t size_in_units
+ , const std::size_t channels_in_image
+ , std::true_type
+ )
+{
+ return size_in_units * channels_in_image;
+}
+
+std::size_t is_planar_impl( const std::size_t size_in_units
+ , const std::size_t
+ , std::false_type
+ )
+{
+ return size_in_units;
+}
+
+template< typename View >
+std::size_t get_row_size_in_memunits( typename View::x_coord_t width)
+{ // number of units per row
+ std::size_t size_in_memunits = width * memunit_step( typename View::x_iterator() );
+
+ return size_in_memunits;
+}
+
+
+template< typename View
+ , bool IsPlanar
+ >
+std::size_t total_allocated_size_in_bytes( const typename View::point_t& dimensions )
+{
+
+ using x_iterator = typename View::x_iterator;
+
+ // when value_type is a non-pixel, like int or float, num_channels< ... > doesn't work.
+ const std::size_t _channels_in_image = mp11::mp_eval_if< is_pixel< typename View::value_type >
+ , num_channels< View >
+ , std::integral_constant<int, 1>
+ >::type::value;
+
+ std::size_t size_in_units = is_planar_impl( get_row_size_in_memunits< View >( dimensions.x ) * dimensions.y
+ , _channels_in_image
+ , typename std::conditional< IsPlanar, std::true_type, std::false_type >::type()
+ );
+
+ // return the size rounded up to the nearest byte
+ std::size_t btm = byte_to_memunit< typename View::x_iterator >::value;
+
+
+ return ( size_in_units + btm - 1 )
+ / btm;
+}
+
+
+void test_recreate_image()
+{
+ auto tasib_1 = total_allocated_size_in_bytes<rgb8_view_t, false>({640, 480});
+ auto tasib_2 = total_allocated_size_in_bytes<rgb8_view_t, false>({320, 200});
+
+ rgb8_image_t img( 640, 480 );
+ img.recreate( 320, 200 );
+}
+
+int main()
+{
+ test_recreate_image();
+
+ return ::boost::report_errors();
+}
+
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4127) //conditional expression is constant
+#endif
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif