[ create a new paste ] login | about

Link: http://codepad.org/WD7CpIJ8    [ raw code | fork ]

C++, pasted on Dec 8:
#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();
        // ...
    }
}


Create a new paste based on this one


Comments: