1. gzyueqian
      13352868059

      嵌入式開(kāi)發(fā):在嵌入式GUI項(xiàng)目中應(yīng)該使用什么字體類型?

      更新時(shí)間: 2022-11-11 15:24:40來(lái)源: 粵嵌教育瀏覽量:8119

        在嵌入式開(kāi)發(fā)中,字體是嵌入式GUI開(kāi)發(fā)的一個(gè)關(guān)鍵組件,在理解字體時(shí),我們看到了很多困惑。位圖圖像和渲染圖形之間有什么區(qū)別?文本渲染如何影響內(nèi)存使用和用戶體驗(yàn)的質(zhì)量?

        字體渲染的工作原理

        如果你考慮一個(gè)呈現(xiàn)在計(jì)算機(jī)屏幕上的字符串,這個(gè)字符串只是代表每個(gè)字符的單個(gè)字形的集合。它們本質(zhì)上是迷你圖像,但它們的編碼方式與在PNG圖像文件中看到的不同。對(duì)于字體文件,只需要在運(yùn)行時(shí)將其渲染為迷你圖像所需的數(shù)據(jù)。

        字體文件格式

        對(duì)于常規(guī)圖像,有多種格式,包括PNG、JPEG和位圖。對(duì)于字體,有一大堆不同的格式。嵌入式系統(tǒng)的兩種主要類型是:由蘋果開(kāi)發(fā)的TrueType和由微軟和Adobe聯(lián)合開(kāi)發(fā)的OpenType。兩種字體文件格式都只包含字體的數(shù)據(jù)-如果文件中也包含字形的圖像,那么字體文件將非常龐大。

        從字體文件到屏幕

        在嵌入式開(kāi)發(fā)中,由于字體文件只包含原始數(shù)據(jù),因此GUI應(yīng)用程序通常需要字體引擎來(lái)呈現(xiàn)字體。字體引擎從文件中提取數(shù)據(jù),并在運(yùn)行時(shí)在內(nèi)存中構(gòu)造字形(迷你圖像),然后將其推送到顯示器。

        當(dāng)字體第一次渲染時(shí),最好將結(jié)果緩存在內(nèi)存中,以便下次需要使用時(shí),應(yīng)用程序可以從內(nèi)存中獲取它,而不必從頭開(kāi)始計(jì)算字形數(shù)據(jù)。

        

        緩存和預(yù)渲染字體

        緩存的使用可以追溯到圖像和字體之間的相似性。以同樣的方式,我們必須解碼壓縮圖像格式,如PNG或JPEG,我們需要一個(gè)本地緩存來(lái)處理字體字形。

        在嵌入式開(kāi)發(fā)中,緩存數(shù)據(jù)使用RAM,但如果你的硬件沒(méi)有足夠的空間,你可以決定在運(yùn)行前預(yù)渲染字形圖像,并將其存儲(chǔ)在應(yīng)用程序中包含的位圖圖像中。通過(guò)這種方式,你的應(yīng)用程序可以直接從Flash或存儲(chǔ)中提取字體,而不會(huì)占用寶貴的RAM周期。換句話說(shuō),字體字形不需要任何內(nèi)存——字體引擎直接從存儲(chǔ)設(shè)備中提取。

        需要注意的是,位圖圖像只是alpha數(shù)據(jù),因此如果你想對(duì)字體進(jìn)行著色,則需要存儲(chǔ)將字形圖像或迷你圖像渲染到屏幕上所需的alpha值。

        預(yù)渲染具有節(jié)省RAM和解壓縮和渲染字體字形的計(jì)算成本的優(yōu)點(diǎn),但缺點(diǎn)是位圖所需的存儲(chǔ)空間。

        涉及字體質(zhì)量時(shí)需要考慮的3個(gè)因素

        1.嵌入式開(kāi)發(fā)團(tuán)隊(duì)正在創(chuàng)建的嵌入式GUI類型

        2.正在使用的字體大小

        3.正在使用的字體類型

        例如,如果你的團(tuán)隊(duì)試圖通過(guò)預(yù)渲染字體來(lái)節(jié)省存儲(chǔ)空間,那么將在質(zhì)量上進(jìn)行權(quán)衡。如果你從8位到4位alpha,你可能不會(huì)看到太多的折衷,但當(dāng)你從2位到1位時(shí),會(huì)有顯著的質(zhì)量折衷。

        預(yù)渲染字體時(shí)節(jié)省空間的技巧

        1.為alpha映射存儲(chǔ)較少的位

        嵌入式開(kāi)發(fā)團(tuán)隊(duì)在預(yù)渲染期間節(jié)省存儲(chǔ)空間的第一種方法是為alpha映射存儲(chǔ)更少的位。你可以嘗試4位、2位和1位alpha級(jí)別,看看節(jié)省了多少空間。然而,較低的級(jí)別會(huì)降低字體的清晰度,所以最好在模擬器或硬件上驗(yàn)證結(jié)果,看看哪種阿爾法最適合你的用戶體驗(yàn)。

        

        不同字體alpha級(jí)別的比較

        我們比較了不同位深度的視覺(jué)效果。左上角是由字體引擎渲染并存儲(chǔ)在內(nèi)存中的TrueType字體,沒(méi)有預(yù)渲染。其他結(jié)果顯示了8位、4位、2位和1位預(yù)渲染位圖場(chǎng)景。

        使用1位深度,你失去了一些清晰度,并在C、O或Q等圓形字符周圍引入字體的鋸齒感。本質(zhì)上,這是1位編碼的結(jié)果,只給你一個(gè)“開(kāi)或關(guān)開(kāi)關(guān)”,你要么畫那個(gè)像素,要么不畫?這使得繪制圓邊或圓變得非常棘手。

        在一個(gè)8位的場(chǎng)景中,你有255個(gè)alpha值,允許在整體結(jié)果中有很好的圓角和平滑度。

        TTF和8位alpha有什么區(qū)別?

        TTF和8位方案之間沒(méi)有區(qū)別。它們是完全等效的,因?yàn)門TF生成8位alpha圖。當(dāng)字體引擎從字體文件中讀取數(shù)據(jù)并創(chuàng)建象形文字圖像,它實(shí)際上是創(chuàng)建一個(gè)特定的8位alpha圖字形,非常類似于預(yù)渲染版本。

        當(dāng)談到較小的字體或文本時(shí),在某些情況下,你會(huì)看到圖像質(zhì)量損失或下降。在嵌入式開(kāi)發(fā)中,質(zhì)量損失取決于你的嵌入式用戶界面、你使用的字體大小以及你使用的字體類型。它根據(jù)你希望在GUI中發(fā)生的事情而變化。

        2.盡量減少字符數(shù)以減少空間

        減少存儲(chǔ)空間的第二種方法是最小化字符數(shù)。字體伴隨著大量的字符,或者大量的占星學(xué)上所用的速記符號(hào)但是你的用戶界面實(shí)際上可能并不需要它們。

        如果你將恒溫器作為嵌入式GUI項(xiàng)目,你不需要使用所有的字符——例如,只需要0到9。這意味著你可以剝離未使用的占星學(xué)上所用的速記符號(hào)只預(yù)先渲染和存儲(chǔ)這十個(gè)字符。

        使用開(kāi)源工具,比如FontForge,允許你瀏覽和修改字體,創(chuàng)建自己的字體,并在字體文件中取出你不需要的內(nèi)容。

        這只有在你事先確切知道哪些字符是必需的情況下才有效。在嵌入式開(kāi)發(fā)中,如果你沒(méi)有知道你在處理什么樣的文本,或者如果你有一個(gè)文本或磅值經(jīng)常變化的動(dòng)態(tài)圖形用戶界面,你必須提前渲染,因?yàn)閼?yīng)用程序在運(yùn)行之前不知道它需要什么。

        嵌入式GUI開(kāi)發(fā)項(xiàng)目的字體優(yōu)化

        在運(yùn)行時(shí)優(yōu)化字體時(shí),位圖字體比通過(guò)引擎渲染要快得多,因?yàn)闆](méi)有預(yù)先計(jì)算的階段。加載時(shí)間和內(nèi)存查找要快得多。

        在運(yùn)行時(shí)字體渲染和預(yù)渲染位圖之間進(jìn)行選擇的快速經(jīng)驗(yàn)法則:你有更多的Flash還是更多的RAM?

        如果你有更多RAM:使用字體引擎渲染場(chǎng)景

        如果你有更多的Flash:使用預(yù)渲染位圖場(chǎng)景

        需要考慮的一個(gè)問(wèn)題是整體的用戶體驗(yàn)設(shè)計(jì)。它需要大量的動(dòng)態(tài)字體和大小嗎?如果是這樣,字體引擎方法可能是你更好的策略。

        如果你的嵌入式GUI項(xiàng)目在整個(gè)用戶界面中使用動(dòng)態(tài)文本,例如使用國(guó)際化語(yǔ)言、各種字體類型或一般動(dòng)態(tài)行為,則無(wú)法對(duì)其進(jìn)行預(yù)渲染。如果是這樣,最好的方法是使用字體引擎。在使用字體引擎時(shí),你將希望使用緩存屬性來(lái)限制RAM的數(shù)量,以便仍然可以容納小型嵌入式設(shè)備。

        結(jié)論

        最終,在嵌入式開(kāi)發(fā)中,用于嵌入式GUI開(kāi)發(fā)的字體是靈活的,并且類似于圖像。字體不僅用于文本,還用于嵌入式GUI中的圖像設(shè)計(jì)元素。

      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩亚洲欧美国产动漫在线观看 | 亚洲欧美国产另类 | 色狠狠一区二区三区香蕉 | 亚洲中文字幕精品 | 日韩精品亚洲国产另类 | 亚洲综合久久久中文字幕 |