当前位置: 首页 > news >正文

js网站统计代码青海公路建设信用信息服务网站

js网站统计代码,青海公路建设信用信息服务网站,wordpress 语言选择,品牌建设的五个阶段目录 前言 一、文字数据结构抽象 1.描述一个文字的位图 2.描述一个字库操作 3.font_manager.h 二、实现Freetype封装 1.freetype.c 三、实现文字管理 1.font_manager.c 四、单元测试 1.font_test.c 2.disp_manager.c 3.disp_manager.h 4.上机测试 前言 前面我们…目录 前言 一、文字数据结构抽象 1.描述一个文字的位图 2.描述一个字库操作 3.font_manager.h 二、实现Freetype封装 1.freetype.c 三、实现文字管理 1.font_manager.c 四、单元测试 1.font_test.c 2.disp_manager.c 3.disp_manager.h  4.上机测试 前言 前面我们实现了显示系统框架和输入系统框架链接 量产工具一一显示系统一-CSDN博客量产工具一一输入系统二-CSDN博客 接下来我们来实现文字系统框架。 一、文字数据结构抽象 描述字符的方式 1.位置、大小   2.点阵 点阵可以从固定大小的点阵字体文件中获得也可以从Freetype的矢量字体文件中获得所以我们需要抽象出一个结构体用来描述这些字符一个结构体描述一个文字的位图一个结构体描述一个字库操作。 1.描述一个文字的位图 2.描述一个字库操作 使用点阵绘制文字时每个文字的大小一样前后文件互不影响使用Freetype绘制文字时大小可能不同前面文字会影响后面文字例如 对于单个Freetype字符格式如下 所以我们要抽象出一个结构体FontBitMap能描述一个“字符”位置、大小、位图我们还要抽象出一个结构体FontOpr能描述字体的操作比如Freetype的操作、固定点阵字体的操作。 3.font_manager.h #ifndef _FONT_MANAGER_H #define _FONT_MANAGER_H#include common.htypedef struct FontBitMap {Region tRegion;int iCurOriginX;int iCurOriginY;int iNextOriginX;int iNextOriginY;unsigned char *pucBuffer; }FontBitMap,*PFontBitMap;typedef struct FontOpr {char *name;int (*FontInit)(char *aFineName);int (*SetFontSize)(int iFontSize);int (*GetFontBitMap)(unsigned int dwCode, PFontBitMap ptFontBitMap);int (*GetStringRegionCar)(char *str, PRegionCartesian ptRegionCar);struct FontOpr *ptNext; }FontOpr,*PFontOpr;void RegisterFont(PFontOpr ptFontOpr);void FontSystemRegister(void);int SelectAndInitFont(char *aFontOprName, char *aFontFileName); int SetFontSize(int iFontSize); int GetFontBitMap(unsigned int dwCode, PFontBitMap ptFontBitMap);#endif二、实现Freetype封装 首先我们需要安装和交叉编译工具链 freetype编译时链接到 freetype 库Freetype详细介绍可看 交叉编译freetype-CSDN博客Freetype 介绍和使用_freetype库简介和使用方式-CSDN博客 位图推导 1.freetype.c #include sys/mman.h #include sys/types.h #include sys/stat.h #include unistd.h #include linux/fb.h #include fcntl.h #include stdio.h #include string.h #include math.h #include wchar.h #include sys/ioctl.h #include font_manager.h#include ft2build.h #include FT_FREETYPE_H #include FT_GLYPH_Hstatic FT_Face g_tFace; static int g_iDefaultFontSize 12;static int FreeTypeFontInit(char *aFineName) {FT_Library library;int error;error FT_Init_FreeType( library ); /* initialize library */ if (error){printf(FT_Init_FreeType err\n);return -1;}error FT_New_Face(library, aFineName, 0, g_tFace ); /* create face object */if (error){printf(FT_New_Face err\n);return -1;}FT_Set_Pixel_Sizes(g_tFace, g_iDefaultFontSize, 0);return 0; }static int FreeTypeSetFontSize(int iFontSize) {FT_Set_Pixel_Sizes(g_tFace, iFontSize, 0);return 0; }static int FreeTypeGetFontBitMap(unsigned int dwCode, PFontBitMap ptFontBitMap) {int error;FT_Vector pen;FT_GlyphSlot slot g_tFace-glyph;pen.x ptFontBitMap-iCurOriginX * 64; /* 单位: 1/64像素 */pen.y ptFontBitMap-iCurOriginY * 64; /* 单位: 1/64像素 *//* 转换transformation */FT_Set_Transform(g_tFace, 0, pen);/* 加载位图: load glyph image into the slot (erase previous one) */error FT_Load_Char(g_tFace, dwCode, FT_LOAD_RENDER);if (error){printf(FT_Load_Char error\n);return -1;}ptFontBitMap-pucBuffer slot-bitmap.buffer;ptFontBitMap-tRegion.iLeftUpX slot-bitmap_left;ptFontBitMap-tRegion.iLeftUpY ptFontBitMap-iCurOriginY*2 - slot-bitmap_top;ptFontBitMap-tRegion.iWidth slot-bitmap.width;ptFontBitMap-tRegion.iHeigh slot-bitmap.rows;ptFontBitMap-iNextOriginX ptFontBitMap-iCurOriginX slot-advance.x / 64;ptFontBitMap-iNextOriginY ptFontBitMap-iCurOriginY;return 0; }static struct FontOpr g_tFreetypeOpr {.name freetype,.FontInit FreeTypeFontInit,.SetFontSize FreeTypeSetFontSize,.GetFontBitMap FreeTypeGetFontBitMap, };void FreetypeRegister(void) {RegisterFont(g_tFreetypeOpr);}三、实现文字管理 我们可能要用到的字体有多种那么怎么选择用哪个字符呢所以我们要编写一个程序管理多种字符。 1.font_manager.c #include font_manager.h #include string.hstatic PFontOpr g_ptFonts NULL; static PFontOpr g_ptDefaulFontOpr NULL;void RegisterFont(PFontOpr ptFontOpr) {ptFontOpr-ptNext g_ptFonts;g_ptFonts ptFontOpr; }void FontSystemRegister(void) {extern void FreetypeRegister(void);FreetypeRegister(); }int SelectAndInitFont(char *aFontOprName, char *aFontFileName) {PFontOpr ptTmp g_ptFonts;while (ptTmp){if (strcmp(ptTmp-name, aFontOprName) 0)break;ptTmp ptTmp-ptNext;}if (!ptTmp)return -1;g_ptDefaulFontOpr ptTmp;return ptTmp-FontInit(aFontFileName); }int SetFontSize(int iFontSize) {return g_ptDefaulFontOpr-SetFontSize(iFontSize); }int GetFontBitMap(unsigned int dwCode, PFontBitMap ptFontBitMap) {return g_ptDefaulFontOpr-GetFontBitMap(dwCode, ptFontBitMap); }四、单元测试 在之前写过的 disp_manager.c 文件代码添加一个绘制函数。 1.font_test.c 2.disp_manager.c 新添加void DrawFontBitMap(PFontBitMap ptFontBitMap, unsigned int dwColor)函数。 void DrawFontBitMap(PFontBitMap ptFontBitMap, unsigned int dwColor) {int i, j, p, q;int x ptFontBitMap-tRegion.iLeftUpX;int y ptFontBitMap-tRegion.iLeftUpY;int x_max x ptFontBitMap-tRegion.iWidth;int y_max y ptFontBitMap-tRegion.iHeigh;int width ptFontBitMap-tRegion.iWidth;unsigned char *buffer ptFontBitMap-pucBuffer;//printf(x %d, y %d\n, x, y);for ( j y, q 0; j y_max; j, q ){for ( i x, p 0; i x_max; i, p ){if ( i 0 || j 0 ||i g_tDispBuff.iXres || j g_tDispBuff.iYres )continue;//image[j][i] | bitmap-buffer[q * bitmap-width p];if (buffer[q * width p])PutPixel(i, j, dwColor);}}} 3.disp_manager.h  新添加声明函数void DrawFontBitMap(PFontBitMap ptFontBitMap, unsigned int dwColor); 新增头文件 #include font_manager.h #ifndef _DISP_MANAGER_H #define _DISP_MANAGER_H#include common.h #include font_manager.htypedef struct DispBuff {int iXres;int iYres;int iBpp;char *buff; }DispBuff, *PDispBuff;typedef struct DispOpr {char *name;int (*DeviceInit)(void);int (*DeviceExit)(void);int (*GetBuffer)(PDispBuff ptPDispBuff);int (*FlushRegion)(PRegion ptRegion, PDispBuff ptPDispBuff);struct DispOpr *ptNext; }DispOpr, *PDispOpr;int PutPixel(int x, int y, unsigned int dwColor); void RegisterDisplay(PDispOpr ptPDispOpr); int SelectDefaultDisplay(char *name); int InitDefaultDisplay(void); PDispBuff GetDisplayBuffer(void); int FlushDisplayRegion(PRegion ptPRegion, PDispBuff ptPDispBuff); void DisplaySystemRegister(void); void DrawFontBitMap(PFontBitMap ptFontBitMap, unsigned int dwColor);#endif4.上机测试 上电开发板挂载 Ubuntu 的 NFS 目录编译测试
http://www.zqtcl.cn/news/48191/

相关文章:

  • 广东网站建设微信官网开发仿网站后台怎么做
  • 深圳龙霸网站建设小广告图片素材
  • 网站建设模板后台自学网页设计的网站
  • 建设部职称评审的网站虚拟主机和云虚拟主机区别
  • 各大行业网站伊利网站建设水平评价
  • 镇江网络违法网站阿里云1m 宽带做网站服务器
  • 遵化市城乡建设规划局网站网站建设公司那家好
  • 密云住房和城乡建设部网站首页wordpress转换小程序
  • o2o商城网站系统开发如何优化购物网站建设
  • 如何把网站程序做授权网址访问网站搭建兼职
  • 山西天镇建站哪家好泰安市最新消息今天
  • 好的专题网站虚拟产品货源网站
  • 科技企业网站模板删除织梦综合网站
  • 中国企业信用网站官网软件开发工具03173课后题
  • 饿了么如何做网站推广网上商城采购
  • 电子商务网站建设经费成都文创产品设计公司
  • wordpress文章全部导出品牌seo推广咨询
  • 网站建设理由和目的浅谈高校图书馆网站建设
  • 网站分析总结长沙住建信息中心网站
  • 深圳网站设计九曲网站建设婚庆公司租车
  • 网站图片上传代码徐州免费建站模板
  • wordpress误删太原建站seo
  • 沧州网站营销推广天津最新通告今天最新
  • 建筑公司网站建设方案做收集信息的网站
  • 长沙网站制作关键词推广商业网站建设规划书
  • 优秀集团网站案例网站图片切换怎么做
  • 淘宝客怎么做直播网站吗俄语淘宝网站建设
  • 绵阳个人网站建设网站建设产品中心
  • 表单网站网站 短链接怎么做
  • dedecms网站开发环境九天娱乐代理平台