// // Copyright 2007-2008 Christian Henning, Andreas Pokorny // // 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 // #ifndef BOOST_GIL_IO_IO_HPP #define BOOST_GIL_IO_IO_HPP /*! * \page iobackend Adding a new io backend * \section Overview of backend requirements * To add support for a new IO backend the following is required: * - a format tag, to identify the image format, derived from boost::gil::format_tag * - boolean meta function is_supported must be implemented for * the new format tag * - explicit specialisation of image_read_info must be provided, containing * runtime information available before/at reading the image * - explicit specialisation of image_write_info must be provided, containing * runtime encoding parameters for writing an image * - An image reader must be specialized: * \code * template * struct boost::gil::reader * { * reader( IODevice & device ) * reader( IODevice & device, typename ConversionPolicy::color_converter_type const& cc ) * image_read_info get_info(); * template * void read_image( Image &, point_t const& top_left ); * template * void read_view( View &, point_t const& top_left ); * }; * \endcode * - An image writer must be specialized: * \code * \template * struct boost::gil::writer * { * writer( IODevice & device ) * template * void apply( View const&, point_t const& top_left ); * template * void apply( View const&, point_t const& top_left, image_write_info const& ); * }; * \endcode * * Or instead of the items above implement overloads of read_view, read_and_convert_view, read_image, * read_and_convert_image, write_view and read_image_info. * * \section ConversionPolicy Interface of the ConversionPolicy * There are two different conversion policies in use, when reading images: * read_and_convert and read_and_no_convert. ColorConverter * can be a user defined color converter. * * \code * struct ConversionPolicy * { * template * void read( InputIterator in_begin, InputIterator in_end, * OutputIterator out_end ); * }; * \endcode * * Methods like read_view and read_image are supposed to bail out with an * exception instead of converting the image * * \section IODevice Concept of IO Device * A Device is simply an object used to read and write data to and from a stream. * The IODevice was added as a template paramter to be able to replace the file_name * access functionality. This is only an interim solution, as soon as boost provides * a good IO library, interfaces/constraints provided by that library could be used. * * \code * concept IODevice * { * void IODevice::read( unsigned char* data, int count ); * void IODevice::write( unsigned char* data, int count ); * void IODevice::seek(long count, int whence); * void IODevice::flush(); * }; * \endcode * * For the time being a boolean meta function must be specialized: * \code * namespace boost{namespace gil{namespace detail{ * template * struct detail::is_input_device; * }}} * \endcode * */ #endif