retdec
bitmap_image.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_TYPES_RESOURCE_TABLE_BITMAP_IMAGE_H
8 #define RETDEC_FILEFORMAT_TYPES_RESOURCE_TABLE_BITMAP_IMAGE_H
9 
10 #include <iostream>
12 
13 namespace retdec {
14 namespace fileformat {
15 
20 {
21  std::uint32_t size;
22  std::uint32_t width;
23  std::uint32_t height;
24  std::uint16_t planes;
25  std::uint16_t bitCount;
26  std::uint32_t compression;
27  std::uint32_t bitmapSize;
28  std::uint32_t horizontalRes;
29  std::uint32_t verticalRes;
30  std::uint32_t colorsUsed;
31  std::uint32_t colorImportant;
32 
33  std::size_t headerSize() const
34  {
35  return
36  sizeof(size) + sizeof(width) + sizeof(height) + sizeof(planes) + sizeof(bitCount) +
37  sizeof(compression) + sizeof(bitmapSize) + sizeof(horizontalRes) +
38  sizeof(verticalRes) + sizeof(colorsUsed) + sizeof(colorImportant);
39  }
40 };
41 
43 {
44  std::uint8_t r;
45  std::uint8_t g;
46  std::uint8_t b;
47  std::uint8_t a;
48 
49  BitmapPixel(std::uint8_t r, std::uint8_t g, std::uint8_t b, std::uint8_t a) : r(r), g(g), b(b), a(a)
50  {
51 
52  }
53 
55  {
56 
57  }
58 };
59 
64 {
65  private:
66  std::vector<std::vector<struct BitmapPixel>> image;
67 
68  public:
71  std::size_t getWidth() const;
72  std::size_t getHeight() const;
73  std::size_t getSize() const;
74  const std::vector<std::vector<struct BitmapPixel>> &getImage() const;
76 
79  bool parseDibFormat(const ResourceIcon &icon);
80  bool parseDibHeader(const ResourceIcon &icon, struct BitmapInformationHeader &res) const;
81  bool parseDib1Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr);
82  bool parseDib4Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr);
83  bool parseDib8Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr);
84  bool parseDib24Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr);
85  bool parseDib32Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr);
86  bool parseDibPalette(const ResourceIcon &icon, std::vector<struct BitmapPixel> &palette,
87  std::uint32_t nColors);
88 
89  void invertAxisY();
90  void setAlphaFull();
91  bool reduce8x8();
92  bool averageRowPixels(std::size_t row, std::size_t offset, std::size_t nPixels, struct BitmapPixel &res);
93  bool averageColumnPixels(std::size_t column, std::size_t offset, std::size_t nPixels,
94  struct BitmapPixel &res);
95  void greyScale();
97 };
98 
99 } // namespace fileformat
100 } // namespace retdec
101 
102 #endif
Definition: bitmap_image.h:64
std::vector< std::vector< struct BitmapPixel > > image
bitmap image map row x column
Definition: bitmap_image.h:66
bool parseDib8Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr)
Definition: bitmap_image.cpp:321
bool averageColumnPixels(std::size_t column, std::size_t offset, std::size_t nPixels, struct BitmapPixel &res)
Definition: bitmap_image.cpp:691
bool parseDib24Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr)
Definition: bitmap_image.cpp:390
bool parseDib32Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr)
Definition: bitmap_image.cpp:444
std::size_t getWidth() const
Definition: bitmap_image.cpp:22
bool parseDibPalette(const ResourceIcon &icon, std::vector< struct BitmapPixel > &palette, std::uint32_t nColors)
Definition: bitmap_image.cpp:497
bool parseDibHeader(const ResourceIcon &icon, struct BitmapInformationHeader &res) const
Definition: bitmap_image.cpp:94
bool parseDibFormat(const ResourceIcon &icon)
Definition: bitmap_image.cpp:55
std::size_t getSize() const
bool averageRowPixels(std::size_t row, std::size_t offset, std::size_t nPixels, struct BitmapPixel &res)
Definition: bitmap_image.cpp:653
void invertAxisY()
Definition: bitmap_image.cpp:525
bool parseDib1Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr)
Definition: bitmap_image.cpp:149
void setAlphaFull()
Definition: bitmap_image.cpp:538
bool parseDib4Data(const ResourceIcon &icon, const struct BitmapInformationHeader &hdr)
Definition: bitmap_image.cpp:241
void greyScale()
Definition: bitmap_image.cpp:725
bool reduce8x8()
Definition: bitmap_image.cpp:553
const std::vector< std::vector< struct BitmapPixel > > & getImage() const
Definition: bitmap_image.cpp:45
std::size_t getHeight() const
Definition: bitmap_image.cpp:36
Definition: resource_icon.h:18
Definition: archive_wrapper.h:19
Class for one resource icon.
Definition: bitmap_image.h:20
std::uint16_t planes
color planes (must be 1)
Definition: bitmap_image.h:24
std::uint32_t compression
compression
Definition: bitmap_image.h:26
std::uint32_t colorImportant
minimal number of important colors (generaly ignored)
Definition: bitmap_image.h:31
std::uint32_t width
width
Definition: bitmap_image.h:22
std::uint32_t height
height
Definition: bitmap_image.h:23
std::uint16_t bitCount
bpp color depth
Definition: bitmap_image.h:25
std::uint32_t verticalRes
vertical resolution (hint for BMP reader)
Definition: bitmap_image.h:29
std::uint32_t horizontalRes
horizontal resolution (hint for BMP reader)
Definition: bitmap_image.h:28
std::uint32_t bitmapSize
size of bitmap
Definition: bitmap_image.h:27
std::uint32_t colorsUsed
number of colors in the image
Definition: bitmap_image.h:30
std::uint32_t size
size of header (must be 40)
Definition: bitmap_image.h:21
std::size_t headerSize() const
Definition: bitmap_image.h:33
Definition: bitmap_image.h:43
BitmapPixel()
Definition: bitmap_image.h:54
std::uint8_t r
Definition: bitmap_image.h:44
std::uint8_t g
Definition: bitmap_image.h:45
BitmapPixel(std::uint8_t r, std::uint8_t g, std::uint8_t b, std::uint8_t a)
Definition: bitmap_image.h:49
std::uint8_t b
Definition: bitmap_image.h:46
std::uint8_t a
Definition: bitmap_image.h:47