LCD上顯示幾行向量文字

2021-09-25 19:33:29 字數 4047 閱讀 1177

一、從左上角顯示

1)先描畫第一行

2)算出邊框

下面在lcd左上角上顯示兩行字元

/* 清屏: 全部設為黑色 */

memset(fbmem, 0, screen_size);

/* 顯示向量字型 */

error = ft_init_freetype( &library );

error = ft_new_face( library, ar**[1], 0, &face );

slot = face->glyph;

ft_set_pixel_sizes(face, 24, 0);

/* 確定座標:

* lcd_x = 0

* lcd_y = 24

* 笛卡爾座標系:

* x = lcd_x = 0

* y = var.yres - lcd_y = var.yres - 24

*/pen.x = 0 * 64; //設定原點座標,這個座標是笛卡爾的座標,

pen.y = (var.yres - 24) * 64;

for(i = 0; i < wcslen(wstr1); i++) //在for迴圈中一次取出要顯示的字元的點陣圖

error = ft_get_glyph( face->glyph, &glyph ); //獲取得到的當前的glpyh點陣圖

if (error)

ft_glyph_get_cbox(glyph, ft_glyph_bbox_truncate, &bbox );//得到glpyh變數裡的bbox引數,這個引數記錄了點陣圖的xmin,

//ymin等引數資訊,獲取它可以判定下一行的原點位置

if (line_box_ymin > bbox.ymin)

line_box_ymin = bbox.ymin;

if (line_box_ymax < bbox.ymax)

line_box_ymax = bbox.ymax;

draw_bitmap( &slot->bitmap,

slot->bitmap_left,

var.yres - slot->bitmap_top);

pen.x += slot->advance.x;

}/* 確定座標: 下面顯示的是第二行的資料,第二行的x座標還是0,

* lcd_x = 0 y座標是根據bbox確定的,這裡假設加上24

* lcd_y = line_box_ymax - line_box_ymin + 24

* 笛卡爾座標系:

* x = lcd_x = 0

* y = var.yres - lcd_y = var.yres - (line_box_ymax - line_box_ymin + 24)

*/pen.x = 0 * 64; //重新設定第二行的資料座標

二、居中顯示1)先算出邊框

2)再確定**並描畫

main.c

/* 清屏: 全部設為黑色 */

memset(fbmem, 0, screen_size);

/* 顯示向量字型 */

error = ft_init_freetype( &library );

error = ft_new_face( library, ar**[1], 0, &face );

slot = face->glyph;

ft_set_pixel_sizes(face, 24, 0);

/* 顯示第一行字元 */

//glyphs是乙個tglyph型別的陣列,用來存放需要顯示的字元的glyph

//get_glyphs_frm_wstr這個函式是自己實現的,從face檔案中根據wstr1的unicode碼找到glyph,

//並儲存到glyphs陣列中,此函式的返回值是陣列中的glyph的個數,也就是要顯示的字元的個數

num_glyphs = get_glyphs_frm_wstr(face, wstr1, glyphs);

//此函式自己實現,用來算出第一行顯示的字元的邊框,方便計算下一行的原點位置

compute_string_bbox(glyphs, num_glyphs, &bbox);

line_box_width = bbox.xmax - bbox.xmin;

line_box_height = bbox.ymax - bbox.ymin;

pen.x = (var.xres - line_box_width)/2 * 64; //設定要顯示的位置,這裡子顯示到螢幕的中間

pen.y = (var.yres - line_box_height)/2 * 64;

//顯示第一行字元,此函式自己實現

draw_glyphs(glyphs, num_glyphs, pen);

/* 顯示第二行字元 */

num_glyphs = get_glyphs_frm_wstr(face, wstr2, glyphs);

compute_string_bbox(glyphs, num_glyphs, &bbox);

line_box_width = bbox.xmax - bbox.xmin;

line_box_height = bbox.ymax - bbox.ymin;

pen.x = (var.xres - line_box_width)/2 * 64;

pen.y = pen.y - 24 * 64;

draw_glyphs(glyphs, num_glyphs, pen);

return 0;

get_glyphs_frm_wstr函式實現

int get_glyphs_frm_wstr(ft_face face, wchar_t * wstr, tglyph glyphs)

}

compute_string_bbox函式實現計算出邊框

void compute_string_bbox(tglyph glyphs, ft_uint num_glyphs, ft_bbox *abbox )

*abbox = bbox;

}

draw_glyphs函式實現

在LCD上顯示英文和漢字

lcd工作時會在記憶體中的視訊記憶體 framebuffer 中取出若干個位元組來表示乙個畫素點,如此迴圈的把視訊記憶體中的點陣顯示出來 下面直接貼出 在 中有詳細的注釋 int main int argc,char ar if ioctl fd fb,fbioget vscreeninfo,var...

ios Label上顯示不同顏色文字

直接貼上 即可用,這個是封裝好的乙個方法 str是不需要改變的顏色,這個是自己設定lable的字型顏色 string傳的是需要改變字型顏色的字串,這個是需要改變字串的顏色 color是需要改變的顏色 nsmutableattributedstring stringcolorstr nsstring ...

使用stm32在lcd上隨意顯示漢字

怎樣在lcd彩屏上顯示漢字,我們習慣使用漢字型檔,也有很多自己做乙個漢字型檔,我就習慣這一種。介紹一下 我做的顯示 同乙個世界!同乙個夢想!首先 在網上下乙個提取點陣的的軟體生成自己的字型檔,const struct typfont16 font16lib 漢字的點陣結構體格式為 typedef s...