diff options
Diffstat (limited to 'boost/gil/extension/io/targa/tags.hpp')
-rw-r--r-- | boost/gil/extension/io/targa/tags.hpp | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/boost/gil/extension/io/targa/tags.hpp b/boost/gil/extension/io/targa/tags.hpp new file mode 100644 index 0000000000..dce128b32c --- /dev/null +++ b/boost/gil/extension/io/targa/tags.hpp @@ -0,0 +1,177 @@ +/* + Copyright 2010 Kenneth Riddile + Use, modification and distribution are subject to 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_EXTENSION_IO_TARGA_TAGS_HPP +#define BOOST_GIL_EXTENSION_IO_TARGA_TAGS_HPP + +//////////////////////////////////////////////////////////////////////////////////////// +/// \file +/// \brief +/// \author Kenneth Riddile \n +/// +/// \date 2010 \n +/// +//////////////////////////////////////////////////////////////////////////////////////// + +#include <boost/gil/io/base.hpp> + +namespace boost { namespace gil { + +/// Defines targa tag. +struct targa_tag : format_tag {}; + +/// See http://en.wikipedia.org/wiki/Truevision_TGA#Header for reference. +/// http://local.wasp.uwa.edu.au/~pbourke/dataformats/tga/ + + +/// Defines type for header sizes. +struct targa_header_size : property_base< uint8_t > +{ + static const type _size = 18; /// Constant size for targa file header size. +}; + +/// Defines type for offset value. +struct targa_offset : property_base< uint8_t > {}; + +/// Defines type for color map type property. +struct targa_color_map_type : property_base< uint8_t > +{ + static const type _rgb = 0; + static const type _indexed = 1; +}; + +/// Defines type for image type property. +struct targa_image_type : property_base< uint8_t > +{ + static const type _none = 0; /// no image data + static const type _indexed = 1; /// indexed + static const type _rgb = 2; /// RGB + static const type _greyscale = 3; /// greyscale + static const type _rle_indexed = 9; /// indexed with RLE compression + static const type _rle_rgb = 10; /// RGB with RLE compression + static const type _rle_greyscale = 11; /// greyscale with RLE compression +}; + +/// Defines type for color map start property. +struct targa_color_map_start : property_base< uint16_t > {}; + +/// Defines type for color map length property. +struct targa_color_map_length : property_base< uint16_t > {}; + +/// Defines type for color map bit depth property. +struct targa_color_map_depth : property_base< uint8_t > {}; + +/// Defines type for origin x and y value properties. +struct targa_origin_element : property_base< uint16_t > {}; + +/// Defines type for image dimension properties. +struct targa_dimension : property_base< uint16_t > {}; + +/// Defines type for image bit depth property. +struct targa_depth : property_base< uint8_t > {}; + +/// Defines type for image descriptor property. +struct targa_descriptor : property_base< uint8_t > {}; + +struct targa_screen_origin_bit : property_base< bool > {}; + +/// Read information for targa images. +/// +/// The structure is returned when using read_image_info. +template<> +struct image_read_info< targa_tag > +{ + /// Default contructor. + image_read_info< targa_tag >() + : _screen_origin_bit(false) + , _valid( false ) + {} + + /// The size of this header: + targa_header_size::type _header_size; + + /// The offset, i.e. starting address, of the byte where the targa data can be found. + targa_offset::type _offset; + + /// The type of color map used by the image, i.e. RGB or indexed. + targa_color_map_type::type _color_map_type; + + /// The type of image data, i.e compressed, indexed, uncompressed RGB, etc. + targa_image_type::type _image_type; + + /// Index of first entry in the color map table. + targa_color_map_start::type _color_map_start; + + /// Number of entries in the color map table. + targa_color_map_length::type _color_map_length; + + /// Bit depth for each color map entry. + targa_color_map_depth::type _color_map_depth; + + /// X coordinate of the image origin. + targa_origin_element::type _x_origin; + + /// Y coordinate of the image origin. + targa_origin_element::type _y_origin; + + /// Width of the image in pixels. + targa_dimension::type _width; + + /// Height of the image in pixels. + targa_dimension::type _height; + + /// Bit depth of the image. + targa_depth::type _bits_per_pixel; + + /// The targa image descriptor. + targa_descriptor::type _descriptor; + + // false: Origin in lower left-hand corner. + // true: Origin in upper left-hand corner. + targa_screen_origin_bit::type _screen_origin_bit; + + /// Used internally to identify if the header has been read. + bool _valid; +}; + +/// Read settings for targa images. +/// +/// The structure can be used for all read_xxx functions, except read_image_info. +template<> +struct image_read_settings< targa_tag > : public image_read_settings_base +{ + /// Default constructor + image_read_settings() + : image_read_settings_base() + {} + + /// Constructor + /// \param top_left Top left coordinate for reading partial image. + /// \param dim Dimensions for reading partial image. + image_read_settings( const point_t& top_left + , const point_t& dim + ) + : image_read_settings_base( top_left + , dim + ) + {} +}; + +/// Write information for targa images. +/// +/// The structure can be used for write_view() function. +template<> +struct image_write_info< targa_tag > +{ +}; + +} // namespace gil +} // namespace boost + +#endif |