VirtualBox

source: vbox/trunk/include/iprt/formats/bmp.h@ 93941

Last change on this file since 93941 was 93115, checked in by vboxsync, 3 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
1/* $Id: bmp.h 93115 2022-01-01 11:31:46Z vboxsync $ */
2/** @file
3 * IPRT - Microsoft Bitmap Formats (BMP).
4 */
5
6/*
7 * Copyright (C) 2006-2022 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27#ifndef IPRT_INCLUDED_formats_bmp_h
28#define IPRT_INCLUDED_formats_bmp_h
29#ifndef RT_WITHOUT_PRAGMA_ONCE
30# pragma once
31#endif
32
33#include <iprt/types.h>
34#include <iprt/assertcompile.h>
35
36
37/** @defgroup grp_rt_fmt_bmp Microsoft Bitmaps Formats (BMP)
38 * @ingroup grp_rt_formats
39 * @{
40 */
41
42/** @name BMP header sizes (in bytes).
43 * @{ */
44#define BMP_HDR_SIZE_FILE 14
45#define BMP_HDR_SIZE_OS21 12
46#define BMP_HDR_SIZE_OS22 64
47#define BMP_HDR_SIZE_WIN3X 40
48/** @} */
49
50
51/** BMP format file header. */
52#pragma pack(1)
53typedef struct BMPFILEHDR
54{
55 /** File type identifier ("magic"). */
56 uint16_t uType;
57 /** Size of file in bytes. */
58 uint32_t cbFileSize;
59 /** Reserved (should be 0). */
60 uint16_t Reserved1;
61 /** Reserved (should be 0). */
62 uint16_t Reserved2;
63 /** Offset (in bytes) to bitmap data. */
64 uint32_t offBits;
65} BMPFILEHDR;
66#pragma pack()
67AssertCompileSize(BMPFILEHDR, BMP_HDR_SIZE_FILE);
68/** Pointer to a BMP format file header. */
69typedef BMPFILEHDR *PBMPFILEHDR;
70
71/** BMP file magic number for BMP / DIB. */
72#define BMP_HDR_MAGIC (RT_H2LE_U16_C(0x4d42))
73
74/** OS/2 1.x BMP core header,
75 * also known as BITMAPCOREHEADER. */
76typedef struct BMPOS2COREHDR
77{
78 /** Size (in bytes) of remaining header. */
79 uint32_t cbSize;
80 /** Width of bitmap in pixels. */
81 uint16_t uWidth;
82 /** Height of bitmap in pixels. */
83 uint16_t uHeight;
84 /** Number of planes. */
85 uint16_t cPlanes;
86 /** Color bits per pixel. */
87 uint16_t cBits;
88} BMPOS2COREHDR;
89AssertCompileSize(BMPOS2COREHDR, BMP_HDR_SIZE_OS21);
90/** Pointer to a OS/2 1.x BMP core header. */
91typedef BMPOS2COREHDR *PBMPOS2COREHDR;
92
93/** OS/2 2.0 BMP core header, version 2,
94 * also known as BITMAPCOREHEADER2. */
95typedef struct BMPOS2COREHDR2
96{
97 /** Size (in bytes) of remaining header. */
98 uint32_t cbSize;
99 /** Width of bitmap in pixels. */
100 uint32_t uWidth;
101 /** Height of bitmap in pixels. */
102 uint32_t uHeight;
103 /** Number of planes. */
104 uint16_t cPlanes;
105 /** Color bits per pixel. */
106 uint16_t cBits;
107 /** Compression scheme of type BMP_COMPRESSION_TYPE. */
108 uint32_t enmCompression;
109 /** Size of bitmap in bytes. */
110 uint32_t cbSizeImage;
111 /** Horz. resolution in pixels/meter. */
112 uint32_t uXPelsPerMeter;
113 /** Vert. resolution in pixels/meter. */
114 uint32_t uYPelsPerMeter;
115 /** Number of colors in color table. */
116 uint32_t cClrUsed;
117 /** Number of important colors. */
118 uint32_t cClrImportant;
119 /** Resolution measurement Used. */
120 uint16_t uUnits;
121 /** Reserved fields (always 0). */
122 uint16_t Reserved;
123 /** Orientation of bitmap. */
124 uint16_t uRecording;
125 /** Halftone algorithm used on image. */
126 uint16_t enmHalftone;
127 /** Halftone algorithm data. */
128 uint32_t uHalftoneParm1;
129 /** Halftone algorithm data. */
130 uint32_t uHalftoneParm2;
131 /** Color table format (always 0). */
132 uint32_t uColorEncoding;
133 /** Misc. field for application use . */
134 uint32_t uIdentifier;
135} BMPOS2COREHDR2;
136AssertCompileSize(BMPOS2COREHDR2, BMP_HDR_SIZE_OS22);
137/** Pointer to an OS/2 2.0 BMP core header version 2. */
138typedef BMPOS2COREHDR2 *PBMPOS2COREHDR2;
139
140/** Windows 3.x BMP information header Format. */
141typedef struct BMPWIN3XINFOHDR
142{
143 /** Size (in bytes) of remaining header. */
144 uint32_t cbSize;
145 /** Width of bitmap in pixels. */
146 uint32_t uWidth;
147 /** Height of bitmap in pixels. */
148 uint32_t uHeight;
149 /** Number of planes. */
150 uint16_t cPlanes;
151 /** Color bits per pixel. */
152 uint16_t cBits;
153 /** Compression scheme of type BMP_COMPRESSION_TYPE. */
154 uint32_t enmCompression;
155 /** Size of bitmap in bytes. */
156 uint32_t cbSizeImage;
157 /** Horz. resolution in pixels/meter. */
158 uint32_t uXPelsPerMeter;
159 /** Vert. resolution in pixels/meter. */
160 uint32_t uYPelsPerMeter;
161 /** Number of colors in color table. */
162 uint32_t cClrUsed;
163 /** Number of important colors. */
164 uint32_t cClrImportant;
165} BMPWIN3XINFOHDR;
166AssertCompileSize(BMPWIN3XINFOHDR, BMP_HDR_SIZE_WIN3X);
167/** Pointer to a Windows 3.x BMP information header. */
168typedef BMPWIN3XINFOHDR *PBMPWIN3XINFOHDR;
169
170
171
172/** @name BMP compression types.
173 * @{ */
174#define BMP_COMPRESSION_TYPE_NONE 0
175#define BMP_COMPRESSION_TYPE_RLE8 1
176#define BMP_COMPRESSION_TYPE_RLE4 2
177/** @} */
178
179/** @} */
180
181#endif /* !IPRT_INCLUDED_formats_bmp_h */
182
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette