Alchemy  1.0
A framework to robustly process network messages and structured data
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
bitmap.h
Go to the documentation of this file.
1 /// @file bitmap.h
2 ///
3 /// Data object to manipulate the data of a bitmap image structure.
4 ///
5 /// The MIT License(MIT)
6 /// @copyright 2014 Paul M Watt
7 // ****************************************************************************
8 #ifndef BITMAP_H_INCLUDED
9 #define BITMAP_H_INCLUDED
10 // Includes ********************************************************************
11 #include <Hg.h>
13 #include <string>
14 
15 // ****************************************************************************
16 ALCHEMY_STRUCT(bitmap_file_header_t,
17  ALCHEMY_DATUM(uint16_t, type),
18  ALCHEMY_DATUM(uint32_t, length),
19  ALCHEMY_DATUM(uint16_t, reserved_1),
20  ALCHEMY_DATUM(uint16_t, reserved_2),
21  ALCHEMY_DATUM(uint32_t, offset)
22 )
23 
24 
25 // ****************************************************************************
26 ALCHEMY_STRUCT(bitmap_core_header_t,
27  ALCHEMY_DATUM(uint32_t, size),
28  ALCHEMY_DATUM(uint16_t, width),
29  ALCHEMY_DATUM(uint16_t, height),
30  ALCHEMY_DATUM(uint16_t, planes),
31  ALCHEMY_DATUM(uint16_t, bit_depth)
32 )
33 
34 // ****************************************************************************
35 ALCHEMY_STRUCT(bitmap_info_header_t,
36  ALCHEMY_DATUM(uint32_t, size),
37  ALCHEMY_DATUM(int32_t, width),
38  ALCHEMY_DATUM(int32_t, height),
39  ALCHEMY_DATUM(uint16_t, planes),
40  ALCHEMY_DATUM(uint16_t, bit_depth),
41  ALCHEMY_DATUM(uint32_t, compression),
42  ALCHEMY_DATUM(uint32_t, sizeImage),
43  ALCHEMY_DATUM(int32_t, x_pixels_per_meter),
44  ALCHEMY_DATUM(int32_t, y_pixels_per_meter),
45  ALCHEMY_DATUM(uint32_t, color_count),
46  ALCHEMY_DATUM(uint32_t, important_color)
47 )
48 
49 ALCHEMY_STRUCT(rgba_t,
50  ALCHEMY_DATUM(byte_t, blue),
51  ALCHEMY_DATUM(byte_t, green),
52  ALCHEMY_DATUM(byte_t, red),
53  ALCHEMY_DATUM(byte_t, alpha)
54 )
55 
56 ALCHEMY_STRUCT(bitmap_info_t,
57  ALCHEMY_DATUM(bitmap_core_header_t, header),
58  ALCHEMY_ALLOC(byte_t, header.sizeImage, pixels)
59 )
60 
61 
62 
63 namespace sgraph
64 {
65 
66 namespace detail
67 {
68 typedef Hg::basic_msg<Hg::bitmap_file_header_t,
70 
71 typedef Hg::basic_msg<Hg::bitmap_info_t,
73 }
74 
77 
78 
79 
80 typedef void (*pixel_ftor) ( Hg::rgba_t& pixel,
81  Hg::byte_t& data);
82 
83 
84 class Bitmap
85 {
86 public:
87 
88  bool Load (const std::string &name);
89  bool Store(const std::string &name);
90 
91  void process( std::string &msg,
92  pixel_ftor ftor);
93 
94 private:
95  // Currently assuming the bitmap is of the form
96  // using the bitmap_info format, 40 bytes.
97 
98  std::string m_file_name;
99 
100  file_t m_file_header;
101  info_t m_info;
102 
103 
104 };
105 
106 
107 } // namespace sgraph
108 
109 
110 
111 #endif
112