315 lines
8.2 KiB
C
315 lines
8.2 KiB
C
/****************************************************************************
|
|
*
|
|
* ftbitmap.h
|
|
*
|
|
* FreeType utility functions for bitmaps (specification).
|
|
*
|
|
* Copyright 2004-2018 by
|
|
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
|
*
|
|
* This file is part of the FreeType project, and may only be used,
|
|
* modified, and distributed under the terms of the FreeType project
|
|
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
|
* this file you indicate that you have read the license and
|
|
* understand and accept it fully.
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef FTBITMAP_H_
|
|
#define FTBITMAP_H_
|
|
|
|
|
|
#include <ft2build.h>
|
|
#include FT_FREETYPE_H
|
|
#include FT_COLOR_H
|
|
|
|
#ifdef FREETYPE_H
|
|
#error "freetype.h of FreeType 1 has been loaded!"
|
|
#error "Please fix the directory search order for header files"
|
|
#error "so that freetype.h of FreeType 2 is found first."
|
|
#endif
|
|
|
|
|
|
FT_BEGIN_HEADER
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* @section:
|
|
* bitmap_handling
|
|
*
|
|
* @title:
|
|
* Bitmap Handling
|
|
*
|
|
* @abstract:
|
|
* Handling FT_Bitmap objects.
|
|
*
|
|
* @description:
|
|
* This section contains functions for handling @FT_Bitmap objects.
|
|
* Note that none of the functions changes the bitmap's `flow' (as
|
|
* indicated by the sign of the `pitch' field in `FT_Bitmap').
|
|
*
|
|
*/
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* @function:
|
|
* FT_Bitmap_Init
|
|
*
|
|
* @description:
|
|
* Initialize a pointer to an @FT_Bitmap structure.
|
|
*
|
|
* @inout:
|
|
* abitmap ::
|
|
* A pointer to the bitmap structure.
|
|
*
|
|
* @note:
|
|
* A deprecated name for the same function is `FT_Bitmap_New'.
|
|
*/
|
|
FT_EXPORT( void )
|
|
FT_Bitmap_Init( FT_Bitmap *abitmap );
|
|
|
|
|
|
/* deprecated */
|
|
FT_EXPORT( void )
|
|
FT_Bitmap_New( FT_Bitmap *abitmap );
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* @function:
|
|
* FT_Bitmap_Copy
|
|
*
|
|
* @description:
|
|
* Copy a bitmap into another one.
|
|
*
|
|
* @input:
|
|
* library ::
|
|
* A handle to a library object.
|
|
*
|
|
* source ::
|
|
* A handle to the source bitmap.
|
|
*
|
|
* @output:
|
|
* target ::
|
|
* A handle to the target bitmap.
|
|
*
|
|
* @return:
|
|
* FreeType error code. 0~means success.
|
|
*/
|
|
FT_EXPORT( FT_Error )
|
|
FT_Bitmap_Copy( FT_Library library,
|
|
const FT_Bitmap *source,
|
|
FT_Bitmap *target );
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* @function:
|
|
* FT_Bitmap_Embolden
|
|
*
|
|
* @description:
|
|
* Embolden a bitmap. The new bitmap will be about `xStrength'
|
|
* pixels wider and `yStrength' pixels higher. The left and bottom
|
|
* borders are kept unchanged.
|
|
*
|
|
* @input:
|
|
* library ::
|
|
* A handle to a library object.
|
|
*
|
|
* xStrength ::
|
|
* How strong the glyph is emboldened horizontally.
|
|
* Expressed in 26.6 pixel format.
|
|
*
|
|
* yStrength ::
|
|
* How strong the glyph is emboldened vertically.
|
|
* Expressed in 26.6 pixel format.
|
|
*
|
|
* @inout:
|
|
* bitmap ::
|
|
* A handle to the target bitmap.
|
|
*
|
|
* @return:
|
|
* FreeType error code. 0~means success.
|
|
*
|
|
* @note:
|
|
* The current implementation restricts `xStrength' to be less than
|
|
* or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO.
|
|
*
|
|
* If you want to embolden the bitmap owned by a @FT_GlyphSlotRec,
|
|
* you should call @FT_GlyphSlot_Own_Bitmap on the slot first.
|
|
*
|
|
* Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format
|
|
* are converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp).
|
|
*/
|
|
FT_EXPORT( FT_Error )
|
|
FT_Bitmap_Embolden( FT_Library library,
|
|
FT_Bitmap* bitmap,
|
|
FT_Pos xStrength,
|
|
FT_Pos yStrength );
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* @function:
|
|
* FT_Bitmap_Convert
|
|
*
|
|
* @description:
|
|
* Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp
|
|
* to a bitmap object with depth 8bpp, making the number of used
|
|
* bytes per line (a.k.a. the `pitch') a multiple of `alignment'.
|
|
*
|
|
* @input:
|
|
* library ::
|
|
* A handle to a library object.
|
|
*
|
|
* source ::
|
|
* The source bitmap.
|
|
*
|
|
* alignment ::
|
|
* The pitch of the bitmap is a multiple of this
|
|
* argument. Common values are 1, 2, or 4.
|
|
*
|
|
* @output:
|
|
* target ::
|
|
* The target bitmap.
|
|
*
|
|
* @return:
|
|
* FreeType error code. 0~means success.
|
|
*
|
|
* @note:
|
|
* It is possible to call @FT_Bitmap_Convert multiple times without
|
|
* calling @FT_Bitmap_Done (the memory is simply reallocated).
|
|
*
|
|
* Use @FT_Bitmap_Done to finally remove the bitmap object.
|
|
*
|
|
* The `library' argument is taken to have access to FreeType's
|
|
* memory handling functions.
|
|
*/
|
|
FT_EXPORT( FT_Error )
|
|
FT_Bitmap_Convert( FT_Library library,
|
|
const FT_Bitmap *source,
|
|
FT_Bitmap *target,
|
|
FT_Int alignment );
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* @function:
|
|
* FT_Bitmap_Blend
|
|
*
|
|
* @description:
|
|
* Blend a bitmap onto another bitmap, using a given color.
|
|
*
|
|
* @input:
|
|
* library ::
|
|
* A handle to a library object.
|
|
*
|
|
* source ::
|
|
* The source bitmap, which can have any @FT_Pixel_Mode format.
|
|
*
|
|
* source_offset ::
|
|
* The offset vector to the upper left corner of the source bitmap in
|
|
* 26.6 pixel format. This can be a fractional pixel value.
|
|
*
|
|
* color ::
|
|
* The color used to draw `source' onto `target'.
|
|
*
|
|
* @inout:
|
|
* target ::
|
|
* A handle to an `FT_Bitmap' object. It should be either initialized
|
|
* as empty with a call to @FT_Bitmap_Init, or it should be of type
|
|
* @FT_PIXEL_MODE_BGRA.
|
|
*
|
|
* atarget_offset ::
|
|
* The offset vector to the upper left corner of the target bitmap in
|
|
* 26.6 pixel format. It should represent an integer offset; the
|
|
* function will set the lowest six bits to zero to enforce that.
|
|
*
|
|
* @return:
|
|
* FreeType error code. 0~means success.
|
|
*
|
|
* @note:
|
|
* This function doesn't perform clipping.
|
|
*
|
|
* The bitmap in `target' gets allocated or reallocated as needed; the
|
|
* vector `atarget_offset' is updated accordingly.
|
|
*
|
|
* In case of allocation or reallocation, the bitmap's pitch is set to
|
|
* `4~*~width'. Both `source' and `target' must have the same bitmap
|
|
* flow (as indicated by the sign of the `pitch' field).
|
|
*
|
|
* @since:
|
|
* 2.10
|
|
*/
|
|
FT_EXPORT( FT_Error )
|
|
FT_Bitmap_Blend( FT_Library library,
|
|
const FT_Bitmap* source,
|
|
const FT_Vector source_offset,
|
|
FT_Bitmap* target,
|
|
FT_Vector *atarget_offset,
|
|
FT_Color color );
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* @function:
|
|
* FT_GlyphSlot_Own_Bitmap
|
|
*
|
|
* @description:
|
|
* Make sure that a glyph slot owns `slot->bitmap'.
|
|
*
|
|
* @input:
|
|
* slot ::
|
|
* The glyph slot.
|
|
*
|
|
* @return:
|
|
* FreeType error code. 0~means success.
|
|
*
|
|
* @note:
|
|
* This function is to be used in combination with
|
|
* @FT_Bitmap_Embolden.
|
|
*/
|
|
FT_EXPORT( FT_Error )
|
|
FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot );
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* @function:
|
|
* FT_Bitmap_Done
|
|
*
|
|
* @description:
|
|
* Destroy a bitmap object initialized with @FT_Bitmap_Init.
|
|
*
|
|
* @input:
|
|
* library ::
|
|
* A handle to a library object.
|
|
*
|
|
* bitmap ::
|
|
* The bitmap object to be freed.
|
|
*
|
|
* @return:
|
|
* FreeType error code. 0~means success.
|
|
*
|
|
* @note:
|
|
* The `library' argument is taken to have access to FreeType's
|
|
* memory handling functions.
|
|
*/
|
|
FT_EXPORT( FT_Error )
|
|
FT_Bitmap_Done( FT_Library library,
|
|
FT_Bitmap *bitmap );
|
|
|
|
|
|
/* */
|
|
|
|
|
|
FT_END_HEADER
|
|
|
|
#endif /* FTBITMAP_H_ */
|
|
|
|
|
|
/* END */
|