VirtualBox

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

Last change on this file since 104212 was 98103, checked in by vboxsync, 23 months ago

Copyright year updates by scm.

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