/**************************************************************************** * * 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 #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 */