#define BOOST_GIL_EXTERNAL_LIB ( BOOST_LIB_LINK_LOADTIME_OR_STATIC, BOOST_LIB_LOADING_STATIC, BOOST_LIB_INIT_ASSUME )
#include "boost/gil/extension/io2/wic_image.hpp"
void my_reader_function()
{
using namespace boost;
using namespace boost::gil;
wic_image::guard const wic_guard;
typedef image<bgr8_pixel_t, false> tile_holder_t;
std::size_t const input_tile_size( 5000 );
tile_holder_t input_tile_holder( input_tile_size, input_tile_size );
typedef wic_image::reader_for<char const *>::type reader_t;
reader_t reader( "my_big_image.tiff" );
point2<std::ptrdiff_t> const input_dimensions( reader.dimensions() );
BOOST_ASSERT( input_dimensions.x >= input_tile_size );
BOOST_ASSERT( input_dimensions.y >= input_tile_size );
std::size_t const output_tile_size( 256 );
tile_holder_t output_tile_holder( output_tile_size, output_tile_size );
typedef wic_image::writer_for<char const *>::type writer_t;
for
(
std::size_t offset( 0 );
( offset < input_dimensions.x ) && ( offset < input_dimensions.y );
offset += input_tile_size
)
{
reader.copy_to
(
reader.offset_view
(
view( input_tile_holder ),
reader_t::offset_t( offset, offset )
),
assert_dimensions_match(),
assert_formats_match ()
//...or...ensure_formats_match ()
//...or...synchronize_formats ()
);
/* ...torture the input data... */
// store individual output tiles in output_tile_holder and write
// them out in a loop
// ...
writer_t( "my_output_tile.png", view( output_tile_holder ), png ).write_default();
// ...
}
}