GameServer
Bitmap.h
[詳解]
1 #ifndef __BITMAP_H__
2 #define __BITMAP_H__
3 
4 #include <fstream>
5 #include "EndianConverter.h"
6 
7 // ストリームから読み込み。
8 template <typename T>
9 static void ReadFromStream(std::ifstream &FileStream, T *pData)
10 {
11  FileStream.read((char *)pData, sizeof(T));
13  {
14  // リトルエンディアン→ビックエンディアン
15  *pData = EndianConverter::Convert(*pData, true);
16  }
17 }
18 
19 // ビットマップファイルヘッダ
21 {
22  // ファイルタイプ
24 
25  // ファイルサイズ
27 
28  // 予約領域.
31 
32  // ファイル先頭から画像データまでのオフセット
34 
35 
36  // 読み込み
37  bool Read(std::ifstream &FileStream)
38  {
39  ReadFromStream(FileStream, &FileType);
40  ReadFromStream(FileStream, &FileSize);
41  ReadFromStream(FileStream, &Reserved1);
42  ReadFromStream(FileStream, &Reserved2);
43  ReadFromStream(FileStream, &Offset);
44 
45  return !FileStream.eof();
46  }
47 };
48 
49 // ビットマップ情報ヘッダ
51 {
52  // 情報ヘッダサイズ
54 
55  // 画像の幅.
57 
58  // 画像の高さ
60 
61  // プレーン数.
63 
64  // 色ビット数.
66 
67  // 圧縮形式.
69 
70  // 画像データサイズ
72 
73  // 水平解像度.
75 
76  // 垂直解像度.
78 
79  // 格納パレット数.
81 
82  // 重要色数.
84 
85 
86  // 読み込み
87  bool Read(std::ifstream &FileStream)
88  {
89  ReadFromStream(FileStream, &Size);
90  ReadFromStream(FileStream, &Width);
91  ReadFromStream(FileStream, &Height);
92  ReadFromStream(FileStream, &Planes);
93  ReadFromStream(FileStream, &BitCount);
94  ReadFromStream(FileStream, &Compression);
95  ReadFromStream(FileStream, &ImageSize);
96  ReadFromStream(FileStream, &XPixelPerMeter);
97  ReadFromStream(FileStream, &YPixelPerMeter);
98  ReadFromStream(FileStream, &UsedColors);
99  ReadFromStream(FileStream, &ImportantColors);
100 
101  return !FileStream.eof();
102  }
103 
104 };
105 
106 // 24bitカラーデータ
107 struct Color24
108 {
109 
110  // 赤.
111  u8 R;
112 
113  // 緑.
114  u8 G;
115 
116  // 青.
117  u8 B;
118 
119  // コンストラクタ
121  : R(0)
122  , G(0)
123  , B(0) {}
124 
125  Color24(u8 InR, u8 InG, u8 InB)
126  : R(InR)
127  , G(InG)
128  , B(InB) {}
129 
130 
131  // 黒.
132  static const Color24 Black;
133 
134 };
135 
139 class Bitmap
140 {
141 
142 public:
143 
144  // コンストラクタ
145  Bitmap();
146 
147  // デストラクタ
148  ~Bitmap();
149 
150  // ロード
151  bool Load(const std::string &FilePath);
152 
153  // ピクセルを取得.
154  Color24 GetPixel(int X, int Y) const;
155 
156  // 幅を取得.
157  s32 GetWidth() const { return InfoData.Width; }
158 
159  // 高さを取得.
160  s32 GetHeight() const { return InfoData.Height; }
161 
162 private:
163 
164  // 赤のカラーマスク
165  static const u32 RColorMask;
166 
167  // 緑のカラーマスク
168  static const u32 GColorMask;
169 
170  // 青のカラーマスク
171  static const u32 BColorMask;
172 
173  // ファイルヘッダ
174  BitmapFileHeader FileHeader;
175 
176  // 情報ヘッダ
177  BitmapInfoData InfoData;
178 
179  // カラーデータ
180  Color24 *pColorData;
181 
182 };
183 
184 #endif // #ifndef __BITMAP_H__
unsigned char u8
Definition: TypeDefs.h:6
Definition: Bitmap.h:139
u32 Compression
Definition: Bitmap.h:68
Color24 GetPixel(int X, int Y) const
Definition: Bitmap.cpp:59
bool Load(const std::string &FilePath)
Definition: Bitmap.cpp:24
Definition: Bitmap.h:20
u8 R
Definition: Bitmap.h:111
s32 GetHeight() const
Definition: Bitmap.h:160
Bitmap()
Definition: Bitmap.cpp:11
エンディアン変換
u32 FileSize
Definition: Bitmap.h:26
u16 FileType
Definition: Bitmap.h:23
s32 XPixelPerMeter
Definition: Bitmap.h:74
Definition: Bitmap.h:107
Color24(u8 InR, u8 InG, u8 InB)
Definition: Bitmap.h:125
static bool IsLittleEndian()
リトルエンディアン?
Definition: EndianConverter.h:23
u32 Offset
Definition: Bitmap.h:33
u32 ImportantColors
Definition: Bitmap.h:83
s32 GetWidth() const
Definition: Bitmap.h:157
int s32
Definition: TypeDefs.h:9
u32 Size
Definition: Bitmap.h:53
unsigned int u32
Definition: TypeDefs.h:10
static const Color24 Black
Definition: Bitmap.h:132
s32 YPixelPerMeter
Definition: Bitmap.h:77
s32 Height
Definition: Bitmap.h:59
u16 BitCount
Definition: Bitmap.h:65
u8 G
Definition: Bitmap.h:114
unsigned short u16
Definition: TypeDefs.h:8
u8 B
Definition: Bitmap.h:117
u16 Reserved1
Definition: Bitmap.h:29
bool Read(std::ifstream &FileStream)
Definition: Bitmap.h:37
static s16 Convert(s16 Value, bool bForce=false)
符号付き16ビット変換
Definition: EndianConverter.h:37
s32 Width
Definition: Bitmap.h:56
bool Read(std::ifstream &FileStream)
Definition: Bitmap.h:87
u32 ImageSize
Definition: Bitmap.h:71
u16 Reserved2
Definition: Bitmap.h:30
u16 Planes
Definition: Bitmap.h:62
u32 UsedColors
Definition: Bitmap.h:80
~Bitmap()
Definition: Bitmap.cpp:17
Definition: Bitmap.h:50
Color24()
Definition: Bitmap.h:120