-
大小: 25KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-06-13
- 语言: 其他
- 标签: linux frambuffer freetype2 汉字
资源简介
本人在工作实践中写的一个汉字显示程序,在linux平台下,利用frambuffer显示设备来显示。用freetype2库来显示矢量汉字。程序带有汉字对齐、加粗、自动换行等功能。对于freetype2和frambuffer入门很有帮助。本程序已经经过试验验证。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include FT_OUTLINE_H
typedef struct fbdev
{
int fdfd; //open “dev/fb0“
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
long int screensize;
char *map_fb;
}FBDEV;
FBDEV fr_dev;
void init_dev(FBDEV *dev)
{
FBDEV *fr_dev=dev;
fr_dev->fdfd=open(“/dev/fb0“O_RDWR);
printf(“the framebuffer device was opended successfully.\n“);
ioctl(fr_dev->fdfdFBIOGET_FSCREENINFO&(fr_dev->finfo)); //获取 固定参数
ioctl(fr_dev->fdfdFBIOGET_VSCREENINFO&(fr_dev->vinfo)); //获取可变参数
fr_dev->screensize=fr_dev->vinfo.xres*fr_dev->vinfo.yres*fr_dev->vinfo.bits_per_pixel/8;
fr_dev->map_fb=(char *)mmap(NULLfr_dev->screensizePROT_READ|PROT_WRITEMAP_SHAREDfr_dev->fdfd0);
printf(“init_dev successfully.\n“);
}
void clean_lcd()
{
int i;
for(i=0;i *((unsigned short int*)(fr_dev.map_fb+i)) = 255<<11|255<<5|255;
}
void draw_dot(FBDEV *devint xint y) //(x.y) 是坐标
{
FBDEV *fr_dev=dev;
int *xx=&x;
int *yy=&y;
long int location=0;
location=location=(*xx+fr_dev->vinfo.xoffset)*(fr_dev->vinfo.bits_per_pixel/8)+(*yy+fr_dev->vinfo.yoffset)*fr_dev->finfo.line_length;
int b=0;
int g=0;
int r=0;
unsigned short int t=r<<11|g<<5|b;
*((unsigned short int *)(fr_dev->map_fb+location))=t;
}
FT_Face face;
FT_Library library;
int size;
FT_UInt now_index;
FT_UInt old_index;
void freetype_init()
{
//FT_Library library;
//FT_Face face;
int err = FT_Init_FreeType(&library);
if(err)
{
printf(“Init library failed\n“);
return;
}
err = FT_New_Face(library“simsun.ttc“0&face);
if(err == FT_Err_Unknown_File_Format)
{
printf(“the font is not supported\n“);
return;
}
else if(err)
{
printf(“the font file can‘t open\n“);
return;
}
}
void freetype_draw(wchar_t chint xint yint xwidthint xheight)
{
FT_Vector delta;
now_index = FT_Get_Char_Index(facech);
int err = FT_Load_Glyph(faceFT_Get_Char_Index(facech)FT_LOAD_DEFAULT|FT_LOAD_NO_BITMAP);
if(err)
{
printf(“FT_Load_Glyph failed\n“);
return;
}
FT_Outline_EmboldenXY(&face->glyph->outline xwidth*1.50);
FT_Glyph glyph;
err = FT_Get_Glyph(face->glyph&glyph);
if(err)
{
printf(“FT_Get_Glyph failed\n“);
return;
}
FT_Render_Glyph(face->glyph FT_RENDER_MODE_NORMAL);
FT_Glyph_To_Bitmap(&glyphFT_RENDER_MODE_NORMAL01);
FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph;
FT_Bitmap bitmap=bitmap_glyph->bitmap;
FT_BBox bbox;
FT_Glyph_Get_CBox(glyph3&bbox);
FT_Get_Kerning(face old_index now_indexFT_KERNING_DEFAULT&delta);
x += delta.x>>6;
FT_Glyph_Metr
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5115 2012-08-23 18:00 ft_word\freetype_word.c
文件 25700 2012-08-23 18:00 ft_word\main.o
文件 281 2012-08-23 18:00 ft_word\Makefile
文件 27968 2012-08-23 18:00 ft_word\test
I..D... 0 2012-08-23 16:59 ft_word
----------- --------- ---------- ----- ----
59064 5
- 上一篇:《VHDL基础及经典开发》源程序
- 下一篇:基于51单片机的MPU6050程序
相关资源
- lsof-4.82-4.el6.x86_64.rpm
- Linux操作系统设计实践报告一
- 等保主机安全基线合规--配置指导li
- linux ls命令 源代码
- linux 系统调用 实现文件复制
- linux kernel系统函数调用层次图
- linux Ubuntu系统网络调试助手.rar
- LINUX日常代码集锦
- Using 9P2000 Under Linux
- adv7610驱动
- 打造linux下的Source Insight
- iperf-3.3.tar.gz
- Linux 下的exfat文件系统驱动,内核版本
- Linux 个人防火墙的设计与实现课程设
- zmodem协议linux下的源代码
- qt字符设备驱动,简单易学
- 官网JDK1.7.0Linux_32位.txt
- grub4dos-linux
- uclinux详细的中文学习资料
- Qt5.X的linuxfb平台源码补丁包
- LINUX设备驱动开发详解带书签全套资料
- linux下的tftp server端的源码
- 操作系统课程设计-实现系统状态监测
- FTP客户端C源码(Linux版)
- linux入侵检测源代码简单
- PXE网络启动批量安装Linux系统
- Linux_期末考试试题8套(含答案)245
- 在linux中实现一个命令执行程序doit
- cmd命令大全(最全最权威).pdf
- linux下读写ini配置文件(与windows API一
评论
共有 条评论