1. 程式人生 > >基於framebuffer顯示圖片(bmp && png)和漢字

基於framebuffer顯示圖片(bmp && png)和漢字

章節

  • 1 功能描述
  • 2 圖片顯示,字型顯示介面
  • 3 使用例項

功能描述

圖片顯示: 支援位置設定,支援BMP && PNG格式的圖片,程式通過讀取bmp&&PNG圖片的路徑,解析圖片的點陣掩碼mask,再把mask寫入framebuffer
漢字顯示: 支援字型大小設定(修改程式碼),可以位置設定,字串輸入
ascii顯示: 支援字型大小設定(需要修改程式碼),可以位置設定,ascii輸入

字型顯示分為漢字顯示和ascii(字母、數字、可見符號), 漢字是點陣檔案HZK16, 大小為262k,比之前的向量檔案小1.73M - 262k,引擎程式碼不依賴libz.so, libfreetype.so 大小為19k,比之前的向量引擎小278k - 19k,依賴libpng.so

定義介面

圖片顯示介面: picture_write(x, y, picture_path);
引數
xy: 顯示圖片位置
picture_path: BMP圖片的路徑
漢字顯示介面: void print_chinese(ft, chinese_str, x, y)
ascii顯示介面 void print_ascii(ft, ascii_str, x, x)
引數:
ft: 漢字顯示所需的上下文
chinese_str: 顯示的字串,格式"北京銳和信"
ascii_str: 顯示的ascii,格式"1234asdf"
xy: 設定顯示的位置
注意
如果定義的x,y使圖片或漢字超出邊界,使圖片漢字未能完全顯示,忽略出界的部分。

使用例項

圖片

int main(int argc, char ** argv)
{
    picture_write(0, 0, argv[1]);

    return 0;
}

漢字

int main(int argc, char **argv)
{
    struct ft f;
    ft_init(&f);
    print_chinese(&f, "北京銳和信", 0, 0);
    return 0; 
}  

ascii

int main(int argc, char **argv)
{
    struct ft f;
    ft_init(&f);
    print_ascii(&f, "1234567adsfsdf", 0, 0);  
    return 0; 
} 

特點

相對於向量字型,點陣字型靈活性比較差,漢字和字母、數字、可見符號需要不同的輸出顯示介面,字型大小變化需要修改顯示演算法,字型形式單一,但是點陣字型的優點在於佔用足夠小,總共不超過200k。

作者