1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
|
=encoding UTF-8
=head1 НАИМЕНОВАНИЕ
BH_Bitmap - доступ к растровому изображению/картинке с изображением
=head1 СИНТАКСИС
#include <BH/Bitmap.h>
cc prog.c -o prog -lbh
=head1 ОПИСАНИЕ
Модуль BH_Bitmap предоставляет методы для доступа к пиксельным данным растрового
изображения и для преобразования между различными пиксельными форматами.
=head1 ФОРМАТЫ
В настоящее время поддерживаются следующие пиксельные форматы:
=over
=item B<BH_BITMAP_INDEX8>
8-разрядный индексированный/палитрированный
=item B<BH_BITMAP_GRAY8>
8-разрядные оттенки серого
=item B<BH_BITMAP_GRAY16>
16-битные оттенки серого
=item B<BH_BITMAP_RGBA32>
32-разрядный RGB с прозрачностью, представленный в виде uint32_t.
Формат: 0xAARRGGBB
=item B<BH_BITMAP_RGBA64>
64-разрядный RGB с прозрачностью, представленный в виде uint64_t.
Формат: 0xAAAARRRRGGGGBBBB
=item B<BH_BITMAP_RGB565>
16-разрядный RGB
=item B<BH_BITMAP_RGB888>
24-разрядный RGB
=item B<BH_BITMAP_RGBA8888>
32-разрядный RGB с прозрачностью
=item B<BH_BITMAP_RGB161616>
48-разрядный RGB
=item B<BH_BITMAP_RGBA16161616>
64-разрядный RGB с прозрачностью
=item B<BH_BITMAP_RGBA1010102>
32-разрядный RGB с прозрачностью
=back
Во всех форматах пикселей используется нативный порядок байт.
Флаг I<BH_BITMAP_BGR> может использоваться для изменения порядка цветовых
каналов (RGB -> BGR). Этот флаг не влияет на следующие пиксельные форматы:
I<BH_BITMAP_INDEX8>, I<BH_BITMAP_GRAY8>, I<BH_BITMAP_GRAY16>,
I<BH_BITMAP_RGBA32> и I<BH_BITMAP_RGBA64>.
Флаг I<BH_BITMAP_NOALPHA> может использоваться для указания того,
что альфа-канал не используется и всегда должен быть установлен в максимальное
значение (255 для 8-разрядных и 65535 для 16-разрядных).
Флаг I<BH_BITMAP_PREMULT> может использоваться для указания того, что значения
цвета представлены в предварительно умноженном виде.
Предполагается, что цветовая палитра содержит ровно 256 цветов и хранится в
пиксельном формате I<BH_BITMAP_RGBA32>.
=head1 ВЫЗОВЫ API
=head2 BH_BitmapNew
BH_Bitmap *BH_BitmapNew(int width,
int height,
int format,
int flags,
void *data,
void *palette);
Создает растровое изображение с указанной шириной, высотой и пиксельным
форматом.
Параметры I<width> и I<height> указывают размеры изображения.
Параметр I<format> указывает используемый пиксельный формат изображения.
Параметр I<flags> может принимать комбинацию из следующих значений:
=over
=item B<BH_BITMAP_FLAG_ALIGN32>
Строки выравниваются по 32-разрядной границе
=back
Необязательный параметр I<data> указывает на существующие данные.
Необязательный параметр I<palette> указывает на существующую палитру.
Эта функция возвращает указатель на новый объект BH_Bitmap или значение NULL.
=head2 BH_BitmapFree
void BH_BitmapFree(BH_Bitmap *bitmap);
Уничтожает растровый объект.
=head2 BH_BitmapColor
void BH_BitmapColor(const BH_Bitmap *bitmap,
int x,
int y,
BH_Color *value);
Считывает значение цвета пикселя в указанной позиции.
Параметры I<x> и I<y> определяют положение на растровом изображении.
=head2 BH_BitmapSetColor
void BH_BitmapSetColor(BH_Bitmap *bitmap,
int x,
int y,
const BH_Color *value);
Записывает значение цвета пикселя в указанной позиции.
Параметры I<x> и I<y> определяют положение на растровой карте.
=head2 BH_BitmapCopy
BH_Bitmap *BH_BitmapCopy(BH_Bitmap *bitmap,
int x,
int y,
int width,
int height,
int shallow);
Создает копию области растрового изображения с заданным положением и размером.
Параметры I<x> и I<y> задают положение на растровом изображении.
Параметры I<width> и I<height> задают размер нового растрового изображения.
Параметр I<shallow> указывает, является ли новое растровое изображение
поверхностной копией (или отображением) существующего растрового изображения или
его глубокой копией. Для работы с поверхностной копией область должна находиться
в пределах существующего растрового изображения.
Эта функция возвращает указатель на новый объект BH_Bitmap или NULL.
=head2 BH_BitmapScanline
void *BH_BitmapScanline(const BH_Bitmap *bitmap,
int y);
Возвращает адрес строки сканирования в растровом изображении.
=head2 BH_BitmapAt
void *BH_BitmapAt(const BH_Bitmap *bitmap,
int x,
int y);
Возвращает адрес пикселя в растровом изображении.
=head2 BH_BitmapWidth
int BH_BitmapWidth(BH_Bitmap *bitmap);
Возвращает ширину растрового изображения.
=head2 BH_BitmapHeight
int BH_BitmapHeight(BH_Bitmap *bitmap);
Возвращает высоту растрового изображения.
=head2 BH_BitmapFormat
int BH_BitmapFormat(BH_Bitmap *bitmap);
Возвращает пиксельный формат растрового изображения.
=head2 BH_BitmapStride
size_t BH_BitmapStride(BH_Bitmap *bitmap);
Возвращает шаг строки растрового изображения.
=head2 BH_BitmapData
void *BH_BitmapData(BH_Bitmap *bitmap);
Возвращает указатель на пиксельные данные растрового изображения.
=head2 BH_BitmapPalette
void *BH_BitmapPalette(BH_Bitmap *bitmap);
Возвращает указатель на палитру растрового изображения.
=head2 BH_BitmapFlags
int BH_BitmapFlags(BH_Bitmap *bitmap);
Возвращает флаги растрового изображения.
Результатом может быть комбинация следующих значений:
=over
=item B<BH_BITMAP_FLAG_ALIGN32>
Строки выравниваются по 32-битной границе
=item B<BH_BITMAP_FLAG_EXT_DATA>
Растровому изображению не принадлежат пиксельные данные
=item B<BH_BITMAP_FLAG_EXT_PALETTE>
Растровому изображению не принадлежат данные палитры
=back
=head2 BH_BitmapConvertRow
void BH_BitmapConvertRow(void *src,
int srcFormat,
void *srcPalette,
void *dest,
int destFormat,
void *destPalette,
size_t count);
Преобразует строку исходных данных из одного пиксельного формата в другой пиксельный формат.
Параметры I<src> и I<srcFormat> указывают источник данных и его
формат в пикселях.
Параметр I<srcPalette> указывает исходную палитру (если это требуется
для формата в пикселях).
Параметры I<dest> и I<destFormat> указывают назначение данных и
их формат в пикселях.
Параметр I<destPalette> определяет целевую палитру (если этого требует формат
пикселя).
Параметр I<count> определяет количество пикселей для преобразования.
=head1 СМ. ТАКЖЕ
L<BH>
|