1/****************************************************************************
2 *
3 * ftbitmap.h
4 *
5 * FreeType utility functions for bitmaps (specification).
6 *
7 * Copyright (C) 2004-2023 by
8 * David Turner, Robert Wilhelm, and Werner Lemberg.
9 *
10 * This file is part of the FreeType project, and may only be used,
11 * modified, and distributed under the terms of the FreeType project
12 * license, LICENSE.TXT. By continuing to use, modify, or distribute
13 * this file you indicate that you have read the license and
14 * understand and accept it fully.
15 *
16 */
17
18
19#ifndef FTBITMAP_H_
20#define FTBITMAP_H_
21
22
23#include <freetype/freetype.h>
24#include <freetype/ftcolor.h>
25
26#ifdef FREETYPE_H
27#error "freetype.h of FreeType 1 has been loaded!"
28#error "Please fix the directory search order for header files"
29#error "so that freetype.h of FreeType 2 is found first."
30#endif
31
32
33FT_BEGIN_HEADER
34
35
36 /**************************************************************************
37 *
38 * @section:
39 * bitmap_handling
40 *
41 * @title:
42 * Bitmap Handling
43 *
44 * @abstract:
45 * Handling FT_Bitmap objects.
46 *
47 * @description:
48 * This section contains functions for handling @FT_Bitmap objects,
49 * automatically adjusting the target's bitmap buffer size as needed.
50 *
51 * Note that none of the functions changes the bitmap's 'flow' (as
52 * indicated by the sign of the `pitch` field in @FT_Bitmap).
53 *
54 * To set the flow, assign an appropriate positive or negative value to
55 * the `pitch` field of the target @FT_Bitmap object after calling
56 * @FT_Bitmap_Init but before calling any of the other functions
57 * described here.
58 */
59
60
61 /**************************************************************************
62 *
63 * @function:
64 * FT_Bitmap_Init
65 *
66 * @description:
67 * Initialize a pointer to an @FT_Bitmap structure.
68 *
69 * @inout:
70 * abitmap ::
71 * A pointer to the bitmap structure.
72 *
73 * @note:
74 * A deprecated name for the same function is `FT_Bitmap_New`.
75 */
76 FT_EXPORT( void )
77 FT_Bitmap_Init( FT_Bitmap *abitmap );
78
79
80 /* deprecated */
81 FT_EXPORT( void )
82 FT_Bitmap_New( FT_Bitmap *abitmap );
83
84
85 /**************************************************************************
86 *
87 * @function:
88 * FT_Bitmap_Copy
89 *
90 * @description:
91 * Copy a bitmap into another one.
92 *
93 * @input:
94 * library ::
95 * A handle to a library object.
96 *
97 * source ::
98 * A handle to the source bitmap.
99 *
100 * @output:
101 * target ::
102 * A handle to the target bitmap.
103 *
104 * @return:
105 * FreeType error code. 0~means success.
106 *
107 * @note:
108 * `source->buffer` and `target->buffer` must neither be equal nor
109 * overlap.
110 */
111 FT_EXPORT( FT_Error )
112 FT_Bitmap_Copy( FT_Library library,
113 const FT_Bitmap *source,
114 FT_Bitmap *target );
115
116
117 /**************************************************************************
118 *
119 * @function:
120 * FT_Bitmap_Embolden
121 *
122 * @description:
123 * Embolden a bitmap. The new bitmap will be about `xStrength` pixels
124 * wider and `yStrength` pixels higher. The left and bottom borders are
125 * kept unchanged.
126 *
127 * @input:
128 * library ::
129 * A handle to a library object.
130 *
131 * xStrength ::
132 * How strong the glyph is emboldened horizontally. Expressed in 26.6
133 * pixel format.
134 *
135 * yStrength ::
136 * How strong the glyph is emboldened vertically. Expressed in 26.6
137 * pixel format.
138 *
139 * @inout:
140 * bitmap ::
141 * A handle to the target bitmap.
142 *
143 * @return:
144 * FreeType error code. 0~means success.
145 *
146 * @note:
147 * The current implementation restricts `xStrength` to be less than or
148 * equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO.
149 *
150 * If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, you
151 * should call @FT_GlyphSlot_Own_Bitmap on the slot first.
152 *
153 * Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format are
154 * converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp).
155 */
156 FT_EXPORT( FT_Error )
157 FT_Bitmap_Embolden( FT_Library library,
158 FT_Bitmap* bitmap,
159 FT_Pos xStrength,
160 FT_Pos yStrength );
161
162
163 /**************************************************************************
164 *
165 * @function:
166 * FT_Bitmap_Convert
167 *
168 * @description:
169 * Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to
170 * a bitmap object with depth 8bpp, making the number of used bytes per
171 * line (a.k.a. the 'pitch') a multiple of `alignment`.
172 *
173 * @input:
174 * library ::
175 * A handle to a library object.
176 *
177 * source ::
178 * The source bitmap.
179 *
180 * alignment ::
181 * The pitch of the bitmap is a multiple of this argument. Common
182 * values are 1, 2, or 4.
183 *
184 * @output:
185 * target ::
186 * The target bitmap.
187 *
188 * @return:
189 * FreeType error code. 0~means success.
190 *
191 * @note:
192 * It is possible to call @FT_Bitmap_Convert multiple times without
193 * calling @FT_Bitmap_Done (the memory is simply reallocated).
194 *
195 * Use @FT_Bitmap_Done to finally remove the bitmap object.
196 *
197 * The `library` argument is taken to have access to FreeType's memory
198 * handling functions.
199 *
200 * `source->buffer` and `target->buffer` must neither be equal nor
201 * overlap.
202 */
203 FT_EXPORT( FT_Error )
204 FT_Bitmap_Convert( FT_Library library,
205 const FT_Bitmap *source,
206 FT_Bitmap *target,
207 FT_Int alignment );
208
209
210 /**************************************************************************
211 *
212 * @function:
213 * FT_Bitmap_Blend
214 *
215 * @description:
216 * Blend a bitmap onto another bitmap, using a given color.
217 *
218 * @input:
219 * library ::
220 * A handle to a library object.
221 *
222 * source ::
223 * The source bitmap, which can have any @FT_Pixel_Mode format.
224 *
225 * source_offset ::
226 * The offset vector to the upper left corner of the source bitmap in
227 * 26.6 pixel format. It should represent an integer offset; the
228 * function will set the lowest six bits to zero to enforce that.
229 *
230 * color ::
231 * The color used to draw `source` onto `target`.
232 *
233 * @inout:
234 * target ::
235 * A handle to an `FT_Bitmap` object. It should be either initialized
236 * as empty with a call to @FT_Bitmap_Init, or it should be of type
237 * @FT_PIXEL_MODE_BGRA.
238 *
239 * atarget_offset ::
240 * The offset vector to the upper left corner of the target bitmap in
241 * 26.6 pixel format. It should represent an integer offset; the
242 * function will set the lowest six bits to zero to enforce that.
243 *
244 * @return:
245 * FreeType error code. 0~means success.
246 *
247 * @note:
248 * This function doesn't perform clipping.
249 *
250 * The bitmap in `target` gets allocated or reallocated as needed; the
251 * vector `atarget_offset` is updated accordingly.
252 *
253 * In case of allocation or reallocation, the bitmap's pitch is set to
254 * `4 * width`. Both `source` and `target` must have the same bitmap
255 * flow (as indicated by the sign of the `pitch` field).
256 *
257 * `source->buffer` and `target->buffer` must neither be equal nor
258 * overlap.
259 *
260 * @since:
261 * 2.10
262 */
263 FT_EXPORT( FT_Error )
264 FT_Bitmap_Blend( FT_Library library,
265 const FT_Bitmap* source,
266 const FT_Vector source_offset,
267 FT_Bitmap* target,
268 FT_Vector *atarget_offset,
269 FT_Color color );
270
271
272 /**************************************************************************
273 *
274 * @function:
275 * FT_GlyphSlot_Own_Bitmap
276 *
277 * @description:
278 * Make sure that a glyph slot owns `slot->bitmap`.
279 *
280 * @input:
281 * slot ::
282 * The glyph slot.
283 *
284 * @return:
285 * FreeType error code. 0~means success.
286 *
287 * @note:
288 * This function is to be used in combination with @FT_Bitmap_Embolden.
289 */
290 FT_EXPORT( FT_Error )
291 FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot );
292
293
294 /**************************************************************************
295 *
296 * @function:
297 * FT_Bitmap_Done
298 *
299 * @description:
300 * Destroy a bitmap object initialized with @FT_Bitmap_Init.
301 *
302 * @input:
303 * library ::
304 * A handle to a library object.
305 *
306 * bitmap ::
307 * The bitmap object to be freed.
308 *
309 * @return:
310 * FreeType error code. 0~means success.
311 *
312 * @note:
313 * The `library` argument is taken to have access to FreeType's memory
314 * handling functions.
315 */
316 FT_EXPORT( FT_Error )
317 FT_Bitmap_Done( FT_Library library,
318 FT_Bitmap *bitmap );
319
320
321 /* */
322
323
324FT_END_HEADER
325
326#endif /* FTBITMAP_H_ */
327
328
329/* END */
330