`
duyouhua1214
  • 浏览: 236175 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

用libfbx开发显示汉字的framebuffer应用程序

 
阅读更多
这个程序使用的字库可以在作者的网站上找到 另外libfbx也是作者开发的一个封装库

使用libfbx开发显示汉字的framebuffer应用程序


云飞扬 http://yfy001.myetang.com
FrameBuffer 就像一张画布,使用什么样子的画笔,如何画画,还需要你自己动手完成。
许多控制台C程序设计中,要用到汉字进行提示或人机交互,而在控制台下显示汉子,曾经是某些中文linux厂商的秘密哦。如何编制不使用外挂中文平台就能显示汉字的C程序呢?主要的原理就是将汉字画到屏幕上,现在控制台下的中文环境zhcon也是使用了这个原理。

下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,一般采用16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)表示,对应在屏幕上显示出来,就是相应的汉字。
  由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,从字库中找到对应的汉字,将其字模显示即可。
  内码转换成区位码方法如下:
   qh=c1-0xa0 wh=c2-0xa0
  其区位码就是:
  qw=qh*0xff+wh
  该汉字在字库中离起点的位置是:
   offset=(94*(qh-1)+(wh-1))*32L
程序例:
/* gbfbx.c -a simple chinese show
*
* By cloudfly<yfy001@etang.com>
*
*/

#include <libfbx/libfbx.h>
#include <libfbx/libfbx-gui.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#define row 2 //纵坐标放大倍数
#define col 3 //横坐标放大倍数
int main()
{
int x,y,i;
char *s="中文汉子显示";
FILE *fp;
char buffer[32];
unsigned char qh,wh;
unsigned long offset;

fb_init(); //图形屏幕初始化
fb_handle_signals();
x=fb_screen->width-300; //设定 x坐标
y=fb_screen->height-300; //y坐标

int n,j,k,m;

if((fp=fopen("St.cfg","rb"))==NULL)//中文字库St.cfg可以从我的主页下载。ucdos也有
{
fb_cleanup();
return 0;
}

while(*s)
{
qh=*(s)-0xa0;
wh=*(s+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32L;//计算该汉字在字库中偏移量
fseek(fp,offset,SEEK_SET);
fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer中(一个汉字)
for(i=0;i<16;i++)
for(n=0;n<row;n++)
for( j=0;j<2;j++)
for( k=0;k<8;k++)
for(m=0;m<row;m++)

if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
fb_putpixel(x+8*j*col+k*col+m,y+i*row+n,0,255,0,fb_screen);
//将32位字节的点阵按位在屏幕上画出来
s+=2;//因为一个汉字内码占用两个字节,所以s必须加2
x+=40;
}
return 1;
}

gcc -o gbfbx gbfbx.c -lfbx -ldl
完成编译。

程序中使用的中文字库St.cfg可以从我的主页下载。

 

分享到:
评论

相关推荐

    framebuffer BMP图像显示

    在嵌入式Linux系统中,framebuffer是一种基本的图形设备驱动程序,它为操作系统提供了一个直接访问硬件显存的接口,使得我们可以在没有图形窗口系统(如X Window System)的情况下进行图形显示。在这个主题中,我们...

    Linux Framebuffer显示demo——jpeg图像显示

    Linux Framebuffer应用编程——jpeg显示在RGB888 Lcd显示屏 包含源代码.c文件,运行在Arm9开发板的可执行文件,一张jpg图像(分辨率800*533) 相关原理详见【正点原子文档】I.MX6U嵌入式Linux C应用编程指南V1.4 ...

    android framebuffer 测试程序

    在Android系统中,Framebuffer是操作系统与硬件图形处理器(GPU)之间的一个接口,它负责将操作系统和应用程序的图形输出渲染到屏幕。Framebuffer测试程序是用于验证和调试这一关键组件的工具,尤其是在开发或优化...

    了解LCD驱动(FrameBuffer)的实例开发

    FrameBuffer是一个抽象层,应用程序只需向FrameBuffer写入颜色值,这些颜色值就会自动显示在屏幕上。开发者不需要关注硬件的具体细节,可以更专注于图形界面的开发。FrameBuffer提供了一种简单直接的方式,通过操作...

    STM32-LCD Framebuffer应用开发

    STM32-LCD Framebuffer应用开发是嵌入式系统中的一种常见技术,它涉及到微控制器(MCU)如STM32与图形用户界面的交互。STM32是意法半导体公司推出的基于ARM Cortex-M内核的微控制器系列,广泛应用于各种嵌入式设备中...

    framebuffer汉字显示原理

    详细的介绍了framebuffer的汉字显示原理。

    framebuffer显示JPEG或BMP图片

    标题中提到的 "framebuffer显示JPEG或BMP图片" 揭示了关于Linux环境下framebuffer设备的使用方法,特别是如何在没有X Window系统的环境下直接向framebuffer设备写入图像数据,从而实现在屏幕上显示JPEG或BMP格式的...

    基于framebuffer的摄像程序

    在Linux系统中,framebuffer是一种硬件抽象层,允许应用程序直接访问显示硬件的帧缓冲区,进行像素级别的操作。在没有X Window System或其他图形服务器的情况下,framebuffer是实现图形显示的基本方式。对于嵌入式...

    一个完整的android framebuffer截图程序 加强版

    在Android系统中,Framebuffer是一个非常重要的概念,它是操作系统与硬件图形设备之间的一个接口,负责将应用程序的图形渲染结果输出到屏幕。在这个项目中,我们关注的是如何通过编程方式获取Framebuffer的截图,即...

    arm平台framebuffer 显示png图片

    总的来说,要在ARM平台上通过framebuffer显示PNG图片,需要理解PNG文件格式、掌握PNG解析库的使用、熟悉framebuffer接口以及优化显示性能。这个过程涉及多方面的知识,但一旦实现,就能在没有复杂GUI支持的嵌入式...

    一个完整的android framebuffer截图程序 v0.3

    在Android系统中,Framebuffer(帧缓冲)是操作系统用于存储屏幕内容的一个内存区域,...通过理解和使用这样的程序,开发者可以更深入地了解Android系统的显示机制,并在没有图形界面的情况下进行有效的屏幕内容分析。

    framebuffer显示摄像头捕获视频

    在Linux内核中,framebuffer驱动程序提供了一个字符设备接口,应用程序可以通过打开、读写这个设备文件来控制显示内容。通常,设备文件位于`/dev/fbX`,其中`X`是设备编号。通过写入像素数据到framebuffer,可以直接...

    一个完整的android framebuffer截图程序

    在Android系统中,Framebuffer是操作系统用来管理屏幕显示的核心组件,它负责将图形数据转换为屏幕上的像素。Framebuffer截图程序能够捕获设备的屏幕内容,这对于开发者调试、测试或用户分享屏幕快照非常有用。本...

    framebuffer

    使用framebuffer接口,用户可以直接操作屏幕像素,创建自定义的图形用户界面或者实现简单的图形应用。例如,许多嵌入式设备或服务器操作系统会利用framebuffer提供基本的控制台显示。此外,通过framebuffer,开发者...

    s3c2410 framebuffer显示字LCD

    在嵌入式Linux系统开发中,S3C2410是一款常见的ARM9微处理器,广泛应用于各种嵌入式设备,如嵌入式系统、工业控制设备和移动设备等。在这些设备上,通常需要一个用户界面来显示信息,LCD(Liquid Crystal Display)...

    一个采用framebuffer方式显示的例子,最基础的显示点

    在计算机图形学中,Framebuffer(帧缓冲)是一种内存区域,用于存储显示器屏幕上的像素颜色信息。...通过学习和理解这个例子,开发者可以进一步掌握Framebuffer技术,为开发底层图形应用打下基础。

    arm s3c6410 linux系统下的framebuffer显示图片

    在嵌入式Linux系统开发中,使用framebuffer设备驱动进行图形界面的开发是一种常见的方法,尤其是在没有硬件图形加速器或者X Window系统的情况下。S3C6410是一款由Samsung公司设计的高性能ARM Cortex-A8处理器,常...

    图像显示之Linux Framebuffer.pdf

    Linux Framebuffer 在图像显示中的应用 Linux Framebuffer 是 Linux 操作系统中一个重要的...Linux Framebuffer 的架构、重要结构体信息、应用层程序的使用等都可以帮助开发者更好地理解和应用 Linux Framebuffer。

    FrameBuffer 应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

    它通过设备文件(如 /dev/fbX)提供一块显示内存,使应用程序无需关心物理显存的细节。应用程序通过 mmap 将显示缓冲区映射到用户空间,进行绘图和显示操作。FrameBuffer 设备的操作包括获取和设置显示参数、计算...

Global site tag (gtag.js) - Google Analytics