基于QNX7.0 矢量字体FreeType中英文渲染

本文介绍了如何在QNX7.0系统上使用FreeType库实现中英文的矢量字体渲染,以解决基础字库点阵放大的美观问题。文中给出了英文渲染的测试样例,并特别提示在QNX环境下需确保freetype动态库为arm指令集,以确保正确识别。
摘要由CSDN通过智能技术生成

第一篇用QNX SCREEN 渲染文字使用基础字库加上点阵放大实现的,放大后字体会很难看,于是考虑使用FreeTpye矢量字体实现。代码实现如下

1、英文矢量字体渲染

#pragma once
#include "libmessage.h"
#include "bagad_module.h"
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <screen/screen.h>
#include <iostream>
#include <ctype.h>
#include <fcntl.h>
#include <string.h>
#include <img/img.h>
#include <math.h>
#include <ft2build.h>
#include FT_FREETYPE_H

#define WIDTH   1920
#define HEIGHT  720

unsigned char image[HEIGHT][WIDTH];

//渲染
void draw_pix(int x, int y,char *ptr,int stride,int color){
   
	ptr += (stride*y);
	ptr[x*4] = ((0xff000000&color)>>24);
	ptr[x*4+1] = ((0x00ff0000&color)>>16);
	ptr[x*4+2] = ((0x0000ff00&color)>>8);
	ptr[x*4+3] = (0x000000ff&color);

}


//获取二维坐标数组
void draw_bitmap( FT_Bitmap*  bitmap, FT_Int  x, FT_Int y)
{
  printf("start draw_bitmap");
  FT_Int  i, j, p, q;
  FT_Int  x_max = x + bitmap->width;
  FT_Int  y_max = y + bitmap->rows;
 
  for ( i = x, p = 0; i < x_max; i++, p++ )
  {
    for ( j = y, q = 0; j < y_max; j++, q++ )
    {
      if ( i < 0      || j < 0       ||
           i >= WIDTH || j >= HEIGHT )
        continue;
 
      image[j][i] |= bitmap->buffer[q * bitmap->width + p];
    }
  }
}

//filename 字体文件 str 字符串文字 text_size 文字大小

int en_draw(const char * filename ,const char * str, int text_size){
  printf("start freetype_draw\n");
  printf("filename=%s  str=%s  text_size=%d \n",filename,str,text_size);

  FT_Library    library;
  FT_Face       face;
 
  FT_GlyphSlot  slot;
  FT_Matrix     matrix;                
  FT_Vector     pen;                  
  FT_Error      error;
 
 
  double        angle;
  int           target_height;
  int           n, num_chars;
                                               
  num_chars     = strlen( str );
  angle         = ( 0.0 / 360 ) * 3.14159 * 2;     
  target_height = HEIGHT;
   printf("start freetype_draw 1\n");
  error = FT_Init_FreeType( &library );   
  printf("start freetype_draw 2 error=%d \n",error);
  error = FT_New_Face( library, filename, 0, &face ); 
  printf("start freetype_draw 3 error=%d \n",error);
  FT_Set_Pixel_Sizes(face, text_size, text_size);
 
  slot = face->glyph;
 
  matrix.xx = (FT_Fixed)( cos( angle ) * 0x10000L );
  matrix.xy = (FT_Fixed)(-sin( angle ) * 0x10000L );
  matrix.yx = (FT_Fixed)( sin( angle ) * 0x10000L );
  matrix.yy = (FT_Fixed)( cos( angle ) * 0x10000L 
QNX 7.0中,开启QNX Trusted Disk需要进行以下配置: 1. 配置策略文件。可以使用tcsadmin工具创建和修改策略文件。策略文件包括定义哪些进程可以访问Trusted Disk,以及哪些操作需要进行身份验证等配置。在QNX 7.0中,策略文件存储在“/etc/tcs”目录下。 2. 加载TPM驱动程序和TPM2软件栈。在QNX 7.0中,TPM驱动程序和TPM2软件栈已经预先安装在系统中,不需要再手动加载。 3. 生成密钥并将其存储在TPM中。可以使用tpmtool工具来生成和管理密钥。在QNX 7.0中,tpmtool工具已经预先安装在系统中。 4. 创建和格式化Trusted Disk。可以使用mktrd工具来创建和格式化Trusted Disk。在QNX 7.0中,mktrd工具已经预先安装在系统中。 5. 将Trusted Disk挂载到文件系统中。可以使用mount工具将Trusted Disk挂载到文件系统中。 具体的配置步骤如下: 1. 使用tcsadmin工具创建策略文件。打开QNX Momentics控制台,进入命令行界面,使用以下命令创建名为“my_policy”的策略文件: ``` tcsadmin -p my_policy -n "My Policy" ``` 然后,使用以下命令将策略文件的访问控制设置为允许所有进程访问: ``` tcsadmin -p my_policy -a allow -t process ``` 2. 生成密钥并将其存储在TPM中。使用以下命令生成一个名为“my_key”的密钥: ``` tpmtool createkey -o my_key ``` 然后,将密钥存储在TPM中: ``` tpmtool storekey -u my_key ``` 3. 创建和格式化Trusted Disk。使用以下命令创建名为“my_trd”的Trusted Disk: ``` mktrd -t crypto -s 1M -p my_policy -k my_key my_trd ``` 然后,使用以下命令格式化Trusted Disk: ``` fdisk -c -t crypto my_trd ``` 4. 将Trusted Disk挂载到文件系统中。使用以下命令将Trusted Disk挂载到名为“/trd”目录: ``` mount -T io-blk crypto my_trd /trd ``` 完成上述步骤后,您就可以在QNX 7.0操作系统中使用QNX Trusted Disk了。请注意,这里的示例仅供参考,具体的操作步骤可能会因您使用的QNX版本和硬件而有所不同。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值