数码相框 在LCD上显示多行文字(6)

数码相框 在LCD上显示多行文字(6)

 

目的:

1、从左边起显示几行文字

2、居中显示几行文字

 

 

在LCD上显示下列两行文字:

我是程序员gif

Hello World

 

 

分析:

1、从左边起显示几行文字

(1)先描画字体

(2)然后算出边框

定义两个标志变量:line_box_ymaxline_box_ymin

通过FT_Glyph_Get_CBox()测量字形图象,获取一行文字的yMax,Min最大值,最小值。

显示第一行时:

pen.x = 0*64; //单位是64分之一像素

显示第2~n行时:

pen.y = (var.yres - 24) * 64; //fb_var.yres:LCD总高度,原点为(0, 24)

 

2、居中显示几行文字

(1)先算出边框(知道起点,长、宽)

(2)再确定坐标并描画

 

 

代码中的一些变量解释:

bbox:是每个字体文件在x和y方向最大值和最小值的结构体

face:字体文件

pen:原点和位置

 

 

从左显示多行24X24文字

内容如下:

定义:某一行的BBox的y最小值line_box_ymin和最大值line_box_ymax

通过函数FT_Glyph_Get_CBox()测量字体图象,从glyph得到BBox,BBox含有每个文字的xMin,xMax,yMin,yMax,获取一行文字的yMax,Min最大值和最小值。

 

从左起显示几行文字代码如下:

#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 <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H

int fd_fb;
struct fb_var_screeninfo var;	/* Current var */
struct fb_fix_screeninfo fix;	/* Current fix */
int screen_size;
unsigned char *fbmem;
unsigned int line_width;
unsigned int pixel_width;

/* color : 0x00RRGGBB */
void lcd_put_pixel(int x, int y, unsigned int color)
{
	unsigned char *pen_8 = fbmem+y*line_width+x*pixel_width;
	unsigned short *pen_16;	
	unsigned int *pen_32;	

	unsigned int red, green, blue;	

	pen_16 = (unsigned short *)pen_8;
	pen_32 = (unsigned int *)pen_8;

	switch (var.bits_per_pixel)
	{
		case 8:
		{
			*pen_8 = color;
			break;
		}
		case 16:
		{
			/* 565 */
			red   = (color >> 16) & 0xff;
			green = (color >> 8) & 0xff;
			blue  = (color >> 0) & 0xff;
			color = ((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3);
			*pen_16 = color;
			break;
		}
		case 32:
		{
			*pen_32 = color;
			break;
		}
		default:
		{
			printf("can't surport %dbpp\n", var.bits_per_pixel
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值