色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機也可以輕松玩轉UTF-8碼和TTF字體了

冬至子 ? 來源:FledgingSu 支離蘇 ? 作者:裸機思維 ? 2023-11-23 17:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【UTF-8碼簡介】

要讓智能設備支持各國不同的文字,首先得有支持全球文字的編碼集,時下最出名的要數UTF-8碼了。它一種可變長度字符編碼,使用1~4字節為每個字符編碼,由此它可以用來表示Unicode標準中的任何字符,而且仍與ASCII碼相兼容。

有了國際范的UTF-8碼,如果我們再有一個支持 UTF-8碼的字庫 ,那顯示各國的文字就很簡單了。接下來就講一下怎么制作一個支持UTF-8碼的字庫(當然這個并不是包含所有的字符,而是只覆蓋所需的就可以了)

【制作UTF-8碼字庫】

要制作字庫,肯定是要找一個現成的取模工具了(這種工具網上有很多),今天我們就使用Arm-2D提供的一個python小工具來制作UTF-8碼的字庫,下載最新的Arm-2D,你就會看到在Acceleration下有一個ttf2c.py文件,如下圖

image.png

有了這個工具,我們就看看怎么使用它來制作字庫文件。

【準備工作】

首先,你的電腦中要安裝了Python3,并且安裝了下面兩個軟件包(freetype-py和numpy)

pip install freetype-py

然后從網上或者電腦C:WindowsFonts文件夾下找到一個后綴名為TTF的字體文件,如下

image.png

【制作字庫】

接下來就用ttf2c.py制作字庫,它的使用在官方文檔中也有,如下

image.png

當然,你也可以用【-h】指令來查看它的使用方法,如下圖

image.png

  • 我們使用的指令為:python3 ttf2c.py -h
  • 【-i】為后綴TTF文件
  • 【-t】為txt文件,里面為我們要生成字庫的所有字符
  • 【-n】為我們生成的字庫起名字,可以不寫(默認為ARM_2D_FONT_UTF8)
  • 【-o】就是輸出的字庫文件
  • 【-p】為字體大?。ū热?0個像素、50個像素)
  • 【-s】可以設置生成的字庫為A1、A2、A4、A8,(默認會生成所有的類型)。其中 A1所占的flash空間是最小的 ,A2、A4、A8還支持字體透明度哦。

好,那我們現在就用這個工具生成一個字庫試試,首先新建一個txt文件,輸入我們要生成字庫的所有字符,如下

image.png

在cc.txt文件中輸入的字符為“ 嵌入式小書蟲 ”,待會就會生成對應的字庫文件。

生成字庫的指令如下

image.png

此時就會生成字庫文件 qrsxsc.c ,如下圖

image.png

有了字庫文件,顯示字符就很簡單了。

【顯示UTF-8碼的文字】

使用Arm-2D來顯示自定義字庫中的文字也很簡單,首先聲明一下我們生成的字庫,以A8為例,如下

extern struct {

然后就可以使用這個字庫啦,很簡單,代碼如下

arm_lcd_text_set_font(&ARM_2D_FONT_UTF8_A8);
  • 第1行就是設置我們的字庫
  • 第2行為設置字符顯示的區域,NULL為整個屏幕
  • 第3行為設置字體顏色
  • 第4行為設置在第幾行第幾列進行顯示字符
  • 第5行為設置字體的透明度
  • 最后調用arm_lcd_printf函數就可以了

注意: 此時,把程序下載進去,可能屏幕不會顯示“ 嵌入式小書蟲 ”這幾個字哦!

這是因為我們的字庫是UTF-8編碼的,而你在keil MDK中可能設置的是GB2312編碼集哦,所以當屏幕沒有顯示出我們想要的字符時,要記得修改一下編碼集,如下

image.png

點擊小扳手進行設置,如下

image.png

好了,這樣屏幕中就可以顯示我們的字符了。

值得一說的是我們使用了Arm-2D提供的arm_lcd_print_banner 函數,它可以方便我們 在指定的區域內居中顯示字符串 ,如下圖

image.png

程序如下

arm_2d_region_t myRegions={
  • 第1個參數就是要顯示的字符串
  • 第2個參數為字符串顯示的區域
  • 第3個參數就是要使用的字體

怎么樣,使用還是很簡單吧,O(∩_∩)O哈哈~

其實banner還有2個不同的版本(不同的參數)哦!

如果我們已經設置好了字體,第3個參數是可以省略的,如下

arm_lcd_print_banner("雷陣雨",myRegions);

如此,上面的代碼也可以改寫成這樣,如下

arm_lcd_text_set_font((arm_2d_font_t*)&ARM_2D_FONT_UTF8_A8);

同樣的,第二個參數也可以省略,如下

arm_lcd_print_banner("雷陣雨");

那這個只有一個參數,沒有設置區域,它會在哪里居中呢?

此時如果只傳一個參數,它就會 默認在屏幕中間顯示字符串 。

是不是覺得banner這個函數就是專門為支持各國不同的文字量身定做的,使我們可以輕松實現多國語言的切換

當然,使用很簡單,那是因為Arm-2D都為我們制作好了,其實TTF字體里面還有很多Bearing( 字體大小、水平預留值等 ),如下圖

image.png

這些Arm-2D都為我們做好了,感興趣的可以看源碼哈(* ̄︶ ̄),這里我們就不講了。

不過還有一個關于字符顯示的API函數需要簡單介紹一下,就是提取一行字符串尺寸的函數,如下

arm_2d_size_t StringSize = arm_lcd_get_string_line_box("雷陣雨",&ARM_2D_FONT_UTF8_A8);
  • arm_lcd_get_string_line_box這個函數可以幫我們計算出給定字體給定字符串的一行的尺寸,這樣就可以精確控制字符串位置(方便進行對齊哦),在banner函數中就使用了此函數,它的妙用還期待大家進行開發( *  ̄︶ ̄)

【溫故知新】

對了,大家有沒有發現,視頻中的閃電由明變暗然后又變明(好像在呼吸),這個是怎么實現的呢?

其實這個還是用了上一篇文章講過的知識,使用了arm_2d_helper_time_cos_slider,程序如下

uint8_t opacity = 0;
  • 在frame_start函數中調用,使iResult的取值按照cos函數變化,其取值范圍為0~255,然后賦值給opacity,使閃電圖片的透明度按照cos曲線變化
  • 最后在繪制函數中按照計算出來的透明度進行繪制就可以了,如下
arm_2dp_rgb565_tile_copy_with_colour_keying_and_opacity(NULL,
  • 倒數第2個參數就是透明度哦
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6067

    文章

    44973

    瀏覽量

    649830
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9347

    瀏覽量

    376982
  • LCD顯示
    +關注

    關注

    0

    文章

    132

    瀏覽量

    18926
  • python
    +關注

    關注

    56

    文章

    4826

    瀏覽量

    86621
  • UTF-8
    +關注

    關注

    0

    文章

    13

    瀏覽量

    7967
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

  • jf_645817071

評論

相關推薦
熱點推薦

怎么在MDB中將編碼設置為UTF-8

是否有一種方法將編碼設置為MDB中的UTF-8。我在Ubuntu/PIC18/XC8編譯器上運行我的測試代碼,預處理失敗,在UTF-8中使用了一個無效的字節序列。一些外來字符的存在導
發表于 10-25 16:51

如何將文件編碼更改為UTF-8?

HII正在對我的項目本地化,需要使用UTF-8編碼的字符串。我有一切工作代碼,但在編輯器中,字符串顯示,如果編碼的ANSI拉丁代碼頁。我了解到,在開始新項目時可以選擇UTF-8編碼,關于如何為現有
發表于 07-03 10:30

TTF字體中文顯示問題如何解決

;TTF18_Font);}[C] 純文本查看 復制代碼BUTTON_SetText(WM_GetDialogItem(WM_HBKWIN, 4),"測試ceshi");文件的編碼是utf-8
發表于 05-25 04:04

如何將UTF-8轉換為GBK編碼

概述我們在單片機開發中常會遇到需要將UTF-8轉換為GBK編碼的需求。在我們了解各種編碼格式的情況下可知,UFT-8不能直接轉成GBK,需中轉成unicode再轉換為gbk。而unicode和gbk
發表于 12-09 07:39

請問如何在TouchGFX的TextArea通配符中顯示UTF-8文本?

是“UTF-8”,所以這是文件編碼。我嘗試使用 UART 作為調試控制臺,它可以毫無問題地輸出 UTF-8 文本。我猜 TouchGFX 的 Unicode 函數不希望 char* 字符串是
發表于 12-09 06:11

ascii和utf8的區別_ASCII編碼與UTF-8的關系

UTF-8是一種針對Unicode的可變長度字符編碼,又稱萬國。由Ken Thompson于1992年創建。現在已經標準化為RFC 3629。UTF-8用1到6個字節編碼Unicode字符。ASCII是基于拉丁字母的一套電腦編
的頭像 發表于 01-30 13:34 ?3.1w次閱讀
ascii和<b class='flag-5'>utf8</b>的區別_ASCII編碼與<b class='flag-5'>UTF-8</b>的關系

PHP和UTF-8亂碼問題的解決方法資料分析

PHP亂碼問題,UTF-8亂碼問題比較常見,通過下面的方法基本上就可以解決php亂碼問題了,確實總結的不錯。
發表于 02-28 17:59 ?5次下載
PHP和<b class='flag-5'>UTF-8</b>亂碼問題的解決方法資料分析

從ASCII-&gt;Unicode-&gt; UTF-8歷史變遷,及其差異

從ASCII->Unicode->UTF-8歷史變遷,及其差異
的頭像 發表于 02-27 15:56 ?2945次閱讀

輕松玩轉AVR單片機C語言》2.pfd

輕松玩轉AVR單片機C語言》2.pfd
發表于 09-30 16:49 ?0次下載

輕松玩轉AVR單片機C語言》3.pfd

輕松玩轉AVR單片機C語言》3.pfd
發表于 09-30 16:51 ?0次下載

輕松玩轉AVR單片機C語言》4.pfd

輕松玩轉AVR單片機C語言》4.pfd
發表于 09-30 16:53 ?0次下載

輕松玩轉AVR單片機C語言》5.pfd

輕松玩轉AVR單片機C語言》5.pfd
發表于 09-30 16:54 ?0次下載

單片機UTF-8如何轉換得到GBK編碼

概述 我們在單片機開發中常會遇到需要將UTF-8轉換為GBK編碼的需求。在我們了解各種編碼格式的情況下可知,UFT-8不能直接轉成GBK,需中轉成unicode再轉換為gbk。而unicode
發表于 11-26 10:51 ?19次下載
<b class='flag-5'>單片機</b>中<b class='flag-5'>UTF-8</b>如何轉換得到GBK編碼

"stm32單片機平臺上ASCII(GBK,GB2312)轉unicode轉UTF-8"

ASCII(GBKGB2312)?,F在升級STM32單片機程序,發現需要UTF-8編碼,APP和服務器最好不動,不然修改太大。所以就出現ASCII(GBKGB2312)轉unicode轉UT
發表于 11-30 15:06 ?49次下載
"stm32<b class='flag-5'>單片機</b>平臺上ASCII(GBK,GB2312)轉unicode轉<b class='flag-5'>UTF-8</b>"

輕松玩轉AVR單片機C語言源代碼

輕松玩轉AVR單片機C語言圖書的配套源代碼資料分享。
發表于 04-20 16:17 ?18次下載
主站蜘蛛池模板: 日韩欧美一区二区三区免费观看 | 伊人久久大香线蕉综合bd高清 | 精品亚洲麻豆1区2区3区 | 好男人在线观看免费视频WWW | 亚洲免费无码中文在线亚洲在 | 亚洲精品国偷拍电影自产在线 | 久久久久久88色偷偷 | 亚洲视频精品 | 19十主播福利视频 | 亚洲AV久久无码高潮喷水 | 亚洲熟女乱色一区二区三区 | 97视频免费观看2区 97视频免费观看 | 蜜芽丅v新网站在线观看 | 男女啪啪久久精品亚洲A | 久久青青草原 | 国产蜜臀AV在线一区视频 | 小萝ar视频网站 | 亚洲精品喷白浆在线观看 | 亚洲日韩欧美国产专区 | 不用播放器的黄 | 中文字幕国产视频 | 久久久久综合 | 国模精品一区二区三区视频 | 国产亚洲精品看片在线观看 | 把极品白丝班长啪到腿软 | 极品美女久久久久久久久久久 | 扒开屁股眼往里面夹东西 | 亚洲三级在线观看 | 亚洲色综合中文字幕在线 | 国产精品国产三级国产an | 欧美日韩视频高清一区 | 国产精品久久久久久久久齐齐 | 日本xxxx96| 亚洲欧美日韩高清中文在线 | 99久久精品久久久久久清纯 | 亚洲中文在线精品国产 | 久久久久免费视频 | 久久久久综合一本久道 | 中文字幕午夜乱理片 | 亚洲免费每日在线观看 | 啦啦啦影院视频在线看高清... |

電子發燒友

中國電子工程師最喜歡的網站

  • 2931785位工程師會員交流學習
  • 獲取您個性化的科技前沿技術信息
  • 參加活動獲取豐厚的禮品