一、從左上角顯示
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...