]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/CImageLoaderBMP.h
Merge branch 'opengl3' of https://github.com/numberZero/irrlicht
[irrlicht.git] / source / Irrlicht / CImageLoaderBMP.h
1 // Copyright (C) 2002-2012 Nikolaus Gebhardt\r
2 // This file is part of the "Irrlicht Engine".\r
3 // For conditions of distribution and use, see copyright notice in irrlicht.h\r
4 \r
5 #ifndef __C_IMAGE_LOADER_BMP_H_INCLUDED__\r
6 #define __C_IMAGE_LOADER_BMP_H_INCLUDED__\r
7 \r
8 \r
9 #include "IImageLoader.h"\r
10 \r
11 \r
12 namespace irr\r
13 {\r
14 namespace video\r
15 {\r
16 \r
17 // byte-align structures\r
18 #include "irrpack.h"\r
19 \r
20         struct SBMPHeader\r
21         {\r
22                 u16     Id;                                     //      BM - Windows 3.1x, 95, NT, 98, 2000, ME, XP\r
23                                                                                         //      BA - OS/2 Bitmap Array\r
24                                                                                         //      CI - OS/2 Color Icon\r
25                                                                                         //      CP - OS/2 Color Pointer\r
26                                                                                         //      IC - OS/2 Icon\r
27                                                                                         //      PT - OS/2 Pointer\r
28                 u32     FileSize;\r
29                 u32     Reserved;\r
30                 u32     BitmapDataOffset;\r
31                 u32     BitmapHeaderSize;       // should be 28h for windows bitmaps or\r
32                                                                                         // 0Ch for OS/2 1.x or F0h for OS/2 2.x\r
33                 u32 Width;\r
34                 u32 Height;\r
35                 u16 Planes;\r
36                 u16 BPP;                                        // 1: Monochrome bitmap\r
37                                                                                         // 4: 16 color bitmap\r
38                                                                                         // 8: 256 color bitmap\r
39                                                                                         // 16: 16bit (high color) bitmap\r
40                                                                                         // 24: 24bit (true color) bitmap\r
41                                                                                         // 32: 32bit (true color) bitmap\r
42 \r
43                 u32  Compression;                       // 0: none (Also identified by BI_RGB)\r
44                                                                                         // 1: RLE 8-bit / pixel (Also identified by BI_RLE4)\r
45                                                                                         // 2: RLE 4-bit / pixel (Also identified by BI_RLE8)\r
46                                                                                         // 3: Bitfields  (Also identified by BI_BITFIELDS)\r
47 \r
48                 u32  BitmapDataSize;            // Size of the bitmap data in bytes. This number must be rounded to the next 4 byte boundary.\r
49                 u32  PixelPerMeterX;\r
50                 u32  PixelPerMeterY;\r
51                 u32  Colors;\r
52                 u32  ImportantColors;\r
53         } PACK_STRUCT;\r
54 \r
55 // Default alignment\r
56 #include "irrunpack.h"\r
57 \r
58 /*!\r
59         Surface Loader for Windows bitmaps\r
60 */\r
61 class CImageLoaderBMP : public IImageLoader\r
62 {\r
63 public:\r
64 \r
65         //! constructor\r
66         CImageLoaderBMP();\r
67 \r
68         //! returns true if the file maybe is able to be loaded by this class\r
69         //! based on the file extension (e.g. ".tga")\r
70         bool isALoadableFileExtension(const io::path& filename) const override;\r
71 \r
72         //! returns true if the file maybe is able to be loaded by this class\r
73         bool isALoadableFileFormat(io::IReadFile* file) const override;\r
74 \r
75         //! creates a surface from the file\r
76         IImage* loadImage(io::IReadFile* file) const override;\r
77 \r
78 private:\r
79 \r
80         void decompress8BitRLE(u8*& BmpData, s32 size, s32 width, s32 height, s32 pitch) const;\r
81 \r
82         void decompress4BitRLE(u8*& BmpData, s32 size, s32 width, s32 height, s32 pitch) const;\r
83 };\r
84 \r
85 \r
86 } // end namespace video\r
87 } // end namespace irr\r
88 \r
89 #endif\r