summaryrefslogtreecommitdiff
path: root/boost/gil/extension/io/targa/tags.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/gil/extension/io/targa/tags.hpp')
-rw-r--r--boost/gil/extension/io/targa/tags.hpp177
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