diff options
Diffstat (limited to 'boost/gil/extension/io/bmp/tags.hpp')
-rw-r--r-- | boost/gil/extension/io/bmp/tags.hpp | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/boost/gil/extension/io/bmp/tags.hpp b/boost/gil/extension/io/bmp/tags.hpp new file mode 100644 index 0000000000..ec8c4a15f8 --- /dev/null +++ b/boost/gil/extension/io/bmp/tags.hpp @@ -0,0 +1,170 @@ +/* + Copyright 2008 Christian Henning + 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_BMP_TAGS_HPP +#define BOOST_GIL_EXTENSION_IO_BMP_TAGS_HPP + +//////////////////////////////////////////////////////////////////////////////////////// +/// \file +/// \brief +/// \author Christian Henning \n +/// +/// \date 2008 \n +/// +//////////////////////////////////////////////////////////////////////////////////////// + +#include <boost/gil/io/base.hpp> + +namespace boost { namespace gil { + +/// Defines bmp tag. +struct bmp_tag : format_tag {}; + + /// See http://en.wikipedia.org/wiki/BMP_file_format#BMP_File_Header for reference. + +/// Defines type for offset value. +struct bmp_offset : property_base< uint32_t > {}; + +/// Defines type for header sizes. +struct bmp_header_size : property_base< uint32_t > +{ + static const type _size = 14; /// Constant size for bmp file header size. + static const type _win32_info_size = 40; /// Constant size for win32 bmp info header size. + static const type _os2_info_size = 12; /// Constant size for os2 bmp info header size. +}; + +/// Defines type for image width property. +struct bmp_image_width : property_base< int32_t > {}; + +/// Defines type for image height property. +struct bmp_image_height : property_base< int32_t > {}; + +/// Defines type for bits per pixels property. +struct bmp_bits_per_pixel : property_base< uint16_t > {}; + +/// Defines type for compression property. +struct bmp_compression : property_base< uint32_t > +{ + static const type _rgb = 0; /// RGB without compression + static const type _rle8 = 1; /// 8 bit index with RLE compression + static const type _rle4 = 2; /// 4 bit index with RLE compression + static const type _bitfield = 3; /// 16 or 32 bit fields without compression +}; + +/// Defines type for image size property. +struct bmp_image_size : property_base< uint32_t > {}; + +/// Defines type for horizontal resolution property. +struct bmp_horizontal_resolution : property_base< int32_t > {}; + +/// Defines type for vertical resolution property. +struct bmp_vertical_resolution : property_base< int32_t > {}; + +/// Defines type for number of colors property. +struct bmp_num_colors : property_base< uint32_t > {}; + +/// Defines type for important number of colors property. +struct bmp_num_important_colors : property_base< uint32_t > {}; + +/// if height is negative then image is stored top-down instead of bottom-up. +struct bmp_top_down : property_base< bool > {}; + +static const uint32_t bmp_signature = 0x4D42; /// Constant signature for bmp file format. + +/// Read information for bmp images. +/// +/// The structure is returned when using read_image_info. +template<> +struct image_read_info< bmp_tag > +{ + /// Default contructor. + image_read_info< bmp_tag >() + : _top_down(false) + , _valid( false ) + {} + + /// The offset, i.e. starting address, of the byte where the bitmap data can be found. + bmp_offset::type _offset; + + /// The size of this header: + /// - 40 bytes for Windows V3 header + /// - 12 bytes for OS/2 V1 header + bmp_header_size::type _header_size; + + /// The bitmap width in pixels ( signed integer ). + bmp_image_width::type _width; + + /// The bitmap height in pixels ( signed integer ). + bmp_image_height::type _height; + + /// The number of bits per pixel, which is the color depth of the image. + /// Typical values are 1, 4, 8, 16, 24 and 32. + bmp_bits_per_pixel::type _bits_per_pixel; + + /// The compression method being used. See above for a list of possible values. + bmp_compression::type _compression; + + /// The image size. This is the size of the raw bitmap data (see below), + /// and should not be confused with the file size. + bmp_image_size::type _image_size; + + /// The horizontal resolution of the image. (pixel per meter, signed integer) + bmp_horizontal_resolution::type _horizontal_resolution; + + /// The vertical resolution of the image. (pixel per meter, signed integer) + bmp_vertical_resolution::type _vertical_resolution; + + /// The number of colors in the color palette, or 0 to default to 2^n - 1. + bmp_num_colors::type _num_colors; + + /// The number of important colors used, or 0 when every color is important; + /// generally ignored. + bmp_num_important_colors::type _num_important_colors; + + bmp_top_down::type _top_down; + + /// Used internaly to identify is the header has been read. + bool _valid; +}; + +/// Read settings for bmp images. +/// +/// The structure can be used for all read_xxx functions, except read_image_info. +template<> +struct image_read_settings< bmp_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 bmp images. +/// +/// The structure can be used for write_view() function. +template<> +struct image_write_info< bmp_tag > +{ +}; + +} // namespace gil +} // namespace boost + +#endif |