1 /**
2  * Windows Bitmap definitions.
3  *
4  * License:
5  *   This Source Code Form is subject to the terms of
6  *   the Mozilla Public License, v. 2.0. If a copy of
7  *   the MPL was not distributed with this file, You
8  *   can obtain one at http://mozilla.org/MPL/2.0/.
9  *
10  * Authors:
11  *   Vladimir Panteleev <ae@cy.md>
12  */
13 
14 module ae.utils.graphics.bitmap;
15 
16 /// Additional definitions for types used in the BMP header.
17 version (all)
18 {
19 	alias int FXPT2DOT30;
20 	struct CIEXYZ { FXPT2DOT30 ciexyzX, /***/ ciexyzY, /***/ ciexyzZ; /***/ } 
21 	struct CIEXYZTRIPLE { CIEXYZ ciexyzRed,  /***/ciexyzGreen,  /***/ciexyzBlue; /***/ } 
22 	enum { BI_BITFIELDS = 3 /***/ }
23 }
24 
25 /// Instantiates to a struct representing
26 /// a BMP header at the given version.
27 align(1)
28 struct BitmapHeader(uint V)
29 {
30 	enum VERSION = V; ///
31 
32 align(1):
33 	/// BITMAPFILEHEADER
34 	version (all)
35 	{
36 		char[2] bfType = "BM";
37 		uint    bfSize;
38 		ushort  bfReserved1;
39 		ushort  bfReserved2;
40 		uint    bfOffBits;
41 	}
42 
43 	/// BITMAPCOREINFO
44 	version (all)
45 	{
46 		uint   bcSize = this.sizeof - bcSize.offsetof;
47 		int    bcWidth;
48 		int    bcHeight;
49 		ushort bcPlanes;
50 		ushort bcBitCount;
51 		uint   biCompression;
52 		uint   biSizeImage;
53 		uint   biXPelsPerMeter;
54 		uint   biYPelsPerMeter;
55 		uint   biClrUsed;
56 		uint   biClrImportant;
57 	}
58 
59 	/// BITMAPV4HEADER
60 	static if (V>=4)
61 	{
62 		uint         bV4RedMask;
63 		uint         bV4GreenMask;
64 		uint         bV4BlueMask;
65 		uint         bV4AlphaMask;
66 		uint         bV4CSType;
67 		CIEXYZTRIPLE bV4Endpoints;
68 		uint         bV4GammaRed;
69 		uint         bV4GammaGreen;
70 		uint         bV4GammaBlue;
71 	}
72 
73 	/// BITMAPV5HEADER
74 	static if (V>=5)
75 	{
76 		uint        bV5Intent;
77 		uint        bV5ProfileData;
78 		uint        bV5ProfileSize;
79 		uint        bV5Reserved;
80 	}
81 }