日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

freetype

更正文檔

概述

對于嵌入式系統應用中,盡管點陣字體在時間和空間性能上都有較佳的表現,但是由于缺乏靈活性,無法改變字體的大小、字形和風格,為解決這些問題,引入freetype2.5.3,FreeType庫是一個開源的、可移植的字體引擎,它功能強大,簡單說就是支持字體的花樣顯示。 組件支持以下功能:

  • 支持多種字體格式文件,并提供了統一的訪問接口;

  • 支持單色位圖、反走樣位圖渲染;

  • 采用面向對象思想設計,用戶可以靈活的根據需要裁剪。

版權信息

FTL 一個類似BSD風格的license

目錄結構

.
├── FTL.TXT                              # license描述文件
├── devel                                  # DEBUG級別配置文件
├── src                                     # freetype實現文件
├── include                               # freetype頭文件
├── package.yaml                      # ymal編譯環境配置文件
├── README.md                       # 說明文檔

依賴組件

  • vfs

常用配置

系統中相關配置已有默認值,如需修改配置,統一在YAML中def_config節點修改,具體如下:

編譯時允許引用內部頭文件:必須允許, 如果不允許會導致編譯不過,在YAML中修改FT2_BUILD_LIBRARY配置

def_config:
  FT2_BUILD_LIBRARY: y

API說明

freetype API用法與開源版本一致,最重要最常用的API如下,其他API可以在網上搜索其用法。

FT_Init_FreeType初始化

FT_Library pFTLib;
//  Init FreeType Lib to manage memory
error = FT_Init_FreeType(&pFTLib);
if (error)
{
    pFTLib = 0;
    printf("There is some error when Init Library");
    return -1;
}

FT_New_Face裝載一個字體

FT_Face pFTFace;
//  create font face from font file
error = FT_New_Face(pFTLib, "arialuni.ttf", 0, &pFTFace);

FT_Set_Char_Size和FT_Set_Pixel_Sizes設置當前字體大小跟像素尺寸

當一個新的face對象建立時,所有成員都在初始化階段設為0。調用FT_Set_Char_Size和FT_Set_Pixel_Sizes對這個結構進行賦值。

FT_Set_Char_Size(face, /* handle to face object */ 
                         0, /* char_width in 1/64th of points */
                         16*64, /* char_height in 1/64th of points */
                         300, /* horizontal device resolution */
                         300 ); /* vertical device resolution */
 
FT_Set_Pixel_Sizes(face, /* handle to face object */
                   0, /* pixel_width */
                   16 ); /* pixel_height */

FT_Load_Glyph加載字符的glyph

glyph_index = FT_Get_Char_Index(face, charcode);
FT_Load_Glyph(face, /* handle to face object */
              glyph_index, /* glyph index */
              load_flags ); /* load flags, see below */

FT_Set_Transform字體變換(旋轉跟縮放)

FT_Set_Transform(face, /* target face object */
                  &matrix, /* pointer to 2x2 matrix */
                  &delta); /* pointer to 2d vector */

使用示例

用freetype顯示一個字符的主要步驟: 0.初始化FT_Init_Freetype() 1.給定一個文字的ASCII碼(例如‘A’是0x41) 2.提供一個字體文件 3.根據編碼值到字體文件加載對應的glyph(glyph含有關鍵點,相對位置。實際上是根據字符的編碼類型和編碼值找到glyph,不同的編碼類型的字符,要用不同的charmap來尋找其glyph,一個charmap支持一種編碼,即有多個charmap以支持多種編碼)可理解為字體文件含有charmap和字的對應glyph 4.設置字體大小 5.用某些函數把glyph里的關鍵點縮放為這個字體大小 6.轉換為位圖點陣(最終還是點陣) 7.在LCD上顯示出來

由于freetype是對矢量字體做顯示,需要顯示設備的配合,目前已經在SDL2中調用了freetype的接口去鏈接ttf字庫,然后在屏幕上顯示中英文字符,具體使用情況可以查看components/SDL2/src/ttf/SDL_TTF.c

FAQ

Q1: 什么是charmap?

答:字符影射表(charmap)。字符對應的字體數據稱為glyph,字體文件中通常帶有一個字符映射表,用來把字符映射到對應glyph的索引值。因為字符集的編碼方式有多種,所以可以存在多個子映射表,以支持從不同編碼的字符到glyph索引的映射。如果某個字符沒有對應的glyph,返回索引 0 ,glyph 0 通常顯示一個方塊或者空格。

Q2: freetype支持哪些字體格式?

答:freetype提供統一的接口來訪問多種字體格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。