STM32 - fonte EMWIN (20)

EMWI

1. Introdução às fontes

O primeiro método de suporte de fonte é usar um arquivo C com um bitmap de 1 bpp de informações de pixel para cada caractere na definição de fonte. Esse suporte a fontes é limitado a fontes compiladas com o aplicativo. O suporte a fontes melhorou ao longo do tempo em qualidade de fonte, requisitos de ROM, desempenho, escalabilidade e capacidade de adicionar mais fontes em tempo de execução. Ao mesmo tempo, as fontes emWin contêm antialiasing, padrões para caracteres compostos (como exigido em tailandês, por exemplo), fontes em mídia externa não endereçável e suporte a TrueType. Todas as fontes, exceto o formato TrueType (Stroke Font), são fontes bitmap.

2. Tipo de fonte

O emWin suporta fontes autodefinidas com diferentes tipos internos, bem como fontes TrueType comuns . Fontes
bitmap
monoespaçadas Cada tamanho de caractere das fontes bitmap monoespaçadas é o mesmo. Nas fontes proporcionais, cada caractere tem sua própria largura, enquanto nas fontes monoespaçadas a largura só precisa ser definida uma vez. As informações de pixel são salvas em 1 bpp, cobrindo toda a área do personagem.
Fontes de bitmap proporcionais As fontes
de bitmap proporcionais têm cada caractere da mesma altura e podem ter larguras diferentes. As informações de pixel são salvas em 1 bpp, cobrindo toda a área do personagem.
Fonte com suavização de serrilhado com informações de suavização de 2 bpp
Cada caractere tem a mesma altura e pode variar em largura. As informações de pixel são salvas como informações de suavização de 2 bpp cobrindo toda a área do caractere.
Fonte com suavização de serrilhado com informações de suavização de 4 bpp
Cada caractere tem a mesma altura e pode variar em largura. As informações de pixel são salvas como informações de suavização de 4 bpp cobrindo toda a área do caractere.
Fontes de bitmap
de escala estendida As fontes de bitmap de escala estendida têm cada caractere com sua própria altura e largura. As informações de pixel são salvas em 1 bpp e cobrem apenas a área de bitmap de glifo.
Fonte de bitmap de escala estendida com informações de antialiasing de 2 bpp
Cada caractere tem a mesma altura e pode variar em largura. As informações de pixel são salvas como informações de antialiasing de 2 bpp, cobrindo apenas a área de bitmap de glifo.
Fonte de bitmap de escala estendida com informações de antialiasing de 4 bpp
Cada caractere tem a mesma altura e pode variar em largura. As informações de pixel são salvas como informações de antialiasing de 4 bpp, cobrindo apenas a área de bitmap de glifo.
Fonte de bitmap de escala estendida com borda
Em alguns casos (como quando a cor de fundo é desconhecida em tempo de compilação), uma fonte com borda pode ser usada. As fontes com bordas são sempre desenhadas no modo transparente, independentemente da configuração atual. Os pixels de caractere são desenhados na cor de primeiro plano selecionada no momento e as bordas são desenhadas na cor de fundo. Um contraste claro entre as cores do primeiro plano e do plano de fundo garante que o texto possa ser lido independentemente do plano de fundo. Observe que esse tipo de fonte não funcionará com caracteres compostos, como tailandês, e também com fontes arábicas.
Fonte vetorial TrueType
emWin suporta fontes vetoriais.O uso de fontes vetoriais será explicado nos capítulos seguintes.A Figura 19.2.1 lista as diferenças entre as fontes.
insira a descrição da imagem aqui

3. Formato da fonte

1. Formato de arquivo C

Esta é a maneira mais comum de usar fontes. Ao usar fontes no formato de arquivo C, é recomendável compilar todas as fontes disponíveis e vinculá-las como módulos de biblioteca ou colocar todos os arquivos de objeto de fonte em uma biblioteca que possa ser vinculada ao aplicativo. Isso garante que apenas as fontes que seu aplicativo precisa sejam realmente vinculadas.
Quando
usar este formato quando a fonte é conhecida em tempo de compilação e há memória endereçável suficiente para os dados da fonte.
Requisitos
Para poder usar o arquivo de fonte C no aplicativo, os seguintes requisitos devem ser atendidos:
1. O arquivo de fonte é um arquivo C, arquivo objeto ou formato de biblioteca compatível com emWin.
2. O arquivo de fonte está vinculado ao seu aplicativo.
3. O aplicativo contém uma declaração de fonte.
Descrição do formato
O arquivo Font C contém primeiramente informações de pixel de todos os caracteres contidos na fonte e, em seguida, uma tabela de informações de caracteres com informações sobre o tamanho de cada caractere. Essa tabela é seguida por uma estrutura de informações de intervalo para regiões adjacentes de cada caractere contido no arquivo de fonte, com cada estrutura apontando para a próxima estrutura. Observe que essa abordagem pode expandir bastante o arquivo de fonte se muitos caracteres individuais forem usados. Após a estrutura de informações do intervalo, existe a estrutura GUI_FONT, que contém as principais informações como o tipo de fonte, tamanho do pixel, etc.

2. Formato de fonte independente do sistema (SIF)

Fontes independentes do sistema são blocos de dados binários que contêm informações de fonte, e um conversor de fontes pode ser usado para criar fontes independentes do sistema.
Quando
usar Este formato pode ser usado quando a fonte for desconhecida em tempo de compilação e quando houver memória endereçável suficiente para os dados da fonte.
Requisitos
Para poder usar um arquivo de fonte SIF em um aplicativo, o arquivo inteiro precisa ser armazenado na memória endereçável (ROM ou RAM).
Descrição do formato Um
arquivo SIF tem aproximadamente a mesma estrutura de um arquivo C e contém as mesmas informações em formato binário. A ordem dos elementos do arquivo é invertida: informações gerais de fonte, seguidas pela estrutura de informações de intervalo, tabela de informações de caracteres e informações mínimas de pixel para todos os caracteres.

3. Formato de fonte de bitmap externa (XBF)

Assim como as fontes SIF, as fontes XBF são blocos binários de dados que contêm informações de fontes, e um conversor de fontes pode ser usado para criar arquivos XBF. Ao contrário de outras fontes, as fontes XBF não precisam estar na memória para serem usadas, enquanto todas as outras fontes do emWin precisam estar totalmente residentes na memória. Os arquivos de fonte XBF podem ser armazenados em qualquer meio externo quando em uso, o acesso a dados é possível através da função de retorno de chamada "GetData", enquanto todas as outras fontes precisam residir na memória endereçável (RAM ou ROM). A vantagem das fontes XBF é que fontes muito grandes podem ser usadas em sistemas com muito pouca memória.
Quando
usar Este formato pode ser usado se não houver memória endereçável suficiente para os dados da fonte e qualquer outro tipo de mídia externa puder ser usado para armazenar a fonte.
Requisitos
Para poder usar fontes XBF em um aplicativo, a função de retorno de chamada "GetData" é necessária para ser responsável por obter os dados da fonte.
Descrição
do formato Este formato difere dos formatos de arquivo SIF e C em geral. Primeiro, ele contém pequenos blocos de informações gerais de fonte com os códigos de caracteres mais baixos e mais altos. Depois disso, é uma tabela de acesso que contém as informações de deslocamento e tamanho dos dados para cada caractere entre os códigos de caractere mais baixo e mais alto. Se nenhum caractere estiver presente, essa informação para o caractere correspondente será zero. Após a tabela de acesso estão as informações de caracteres para todos os caracteres, incluindo dados de pixel e informações de tamanho de caractere.

4. Formato de fonte TrueType (TTF)

TrueType é um padrão de fonte de contorno desenvolvido pela Apple Computer. Ele fornece aos desenvolvedores de fontes um alto grau de controle sobre como as fontes são exibidas em várias alturas de fonte. Ao contrário das fontes bitmap, que são baseadas em um bitmap por caractere, as fontes TrueType são baseadas em gráficos vetoriais. A vantagem da representação vetorial é a escalabilidade sem perdas. Isso significa que cada caractere precisa ser rasterizado para um bitmap antes de ser desenhado. Para evitar a rasterização sempre que um caractere é desenhado, os dados de bitmap geralmente são armazenados em cache com o mecanismo de fonte. Isso requer uma CPU rápida e RAM suficiente. Os pacotes TTF não estão incluídos no código-fonte padrão do emWin. Este conteúdo está disponível gratuitamente em www.segger.com/link/emwin_freetype.zip.
Licença
A implementação do suporte a TTF do emWin é baseada na biblioteca de fontes FreeType de David Turner, Robert Wilhelm e Werner Lembergr, disponível gratuitamente em www.freetype.org. emWin usa esta biblioteca sob a licença FreeType em GUI\TrueType\FTL.txt. O emWin adaptou ligeiramente a biblioteca, adicionando uma camada "colar" com funções GUI.
Quando usar
Use este formato se precisar dimensionar fontes em tempo de execução.
Requisito
1. CPU: O suporte a TTF aplica-se apenas a CPU de 32 bits, emWin define CPU de 32 bits como: sizeof(int) = 4.
2. ROM: O requisito de ROM do mecanismo TTF é de cerca de 250K, e o tamanho exato depende da CPU, do compilador e do nível de otimização do compilador.
3. RAM: O requisito de RAM da biblioteca depende principalmente das fontes usadas, o requisito básico de RAM do mecanismo TTF é de cerca de 50K. Quando GUI_TTF_CreateFont() é usado para criar uma fonte GUI, o mecanismo de fonte carrega todas as tabelas de fontes definidas no arquivo TTF necessárias para gerar caracteres e os tamanhos das tabelas variam entre as fontes. A quantidade de RAM adicional necessária para criar fontes pode variar de alguns KB a mais de 1 MB, com fontes típicas exigindo 80-300 kb. Dependendo da quantidade de RAM necessária para os arquivos de fonte usados, pelo menos, o mecanismo TTF precisa de um cache de bitmap. Por padrão, o mecanismo usa um cache de 200 K, o que é suficiente para a maioria dos aplicativos. O mecanismo TTF aloca memória através das funções não-emWin malloc() e free(). Antes de usar o mecanismo TTF, você deve garantir que essas funções possam ser executadas.

3. Declare fontes personalizadas

A maneira mais recomendada de declarar protótipos de fonte personalizados é colocá-los em um arquivo de cabeçalho definido pelo aplicativo. Isso deve ser incluído em todos os arquivos de origem do aplicativo que usam essas fontes. Conforme mostrado no exemplo a seguir:

#include "GUI.
extern GUI_CONST_STORAGE GUI_FONT GUI_FontApp1;
extern GUI_CONST_STORAGE GUI_FONT GUI_FontApp2;

Observe que esse protótipo declarado não funciona se essas fontes devem ser usadas em BUTTON_FONT_DEFAULT ou macros de configuração emWin semelhantes. Nesse caso, a fonte precisa ser declarada no arquivo de configuração GUIConf.h. A declaração neste caso é mostrada no exemplo a seguir:

typedef struct GUI_FONT GUI_FONT;
extern const GUI_FONT GUI_FontApp1;
#define BUTTON_FONT_DEFAULT &GUI_FontApp1
#define EDIT_FONT_DEFAULT &GUI_FontApp1

Como a estrutura GUI_FONT não está definida onde emWin contém GUIConf.h anteriormente, é necessário um typedef.

Quarto, selecione a fonte

O emWin fornece fontes diferentes, mas sempre escolha uma delas. Essa opção pode ser alterada chamando uma das funções GUI_SetFont() ou GUI_XXX_CreateFont(), que selecionará a fonte usada para toda a saída de texto da tarefa atual. Se a aplicação nunca selecionar nenhuma fonte, será utilizada a fonte padrão, que está configurada em GUIConf.h e pode ser alterada. Portanto, deve-se garantir que a fonte padrão seja a realmente usada no aplicativo.

5. Funções de API de fonte comumente usadas

GUI_SetDefaultFont() 设置默认字体。
GUI_SetFont() 设置当前字体。
GUI_GetCharDistX() 返回当前字体中指定字符的宽度像素(X 大小)GUI_GetFont() 返回当前选择的字体的指针。
GUI_GetFontDistY() 返回当前字体的 Y 间距。
GUI_GetFontInfo() 返回包含字体信息的结构。
GUI_GetFontSizeY() 返回当前字体的高度像素(Y 大小)
GUI_GetLeadingBlankCols() 返回给定字符的前导空格像素列数。
GUI_GetStringDistX() 返回使用当前字体的文本的 X 大小
GUI_GetTextExtend() 评估使用当前字体的文本的大小。
GUI_GetTrailingBlankCols() 返回给定字符的后导空格像素列数。
GUI_GetYDistOfFont() 返回特定字体的 Y 间距。
GUI_GetYSizeOfFont() 返回特定字体的 Y 大小。
GUI_IsInFont() 评估特定字体中是否存在指定的字符。
GUI_SetDefaultFont() 设置 GUI_Init()之后使用的默认字体。

Acho que você gosta

Origin blog.csdn.net/qq_51963216/article/details/124077066
Recomendado
Clasificación