国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

Xft字體庫:體系結(jié)構(gòu)及用戶指南

2024-07-21 02:36:59
字體:
供稿:網(wǎng)友

  摘要
  
  X渲染擴展(X Render Extension)提供了一個新的基于客戶方字形(glyph)和字體治理的字形渲染體系結(jié)構(gòu)。這個擴展設(shè)計在解決了許多相關(guān)技術(shù)難題的同時,也把光柵化字體、配置字體以及定制字體使用的責(zé)任交給了每一個X客戶程序。
  
  編寫Xft庫是為了給X應(yīng)用程序提供一個能訪問FreeType字體光柵化引擎和X渲染擴展的、便于使用的接口,鑒于FreeType沒有提供配置和定制字體的功能,Xft也擔(dān)負了這一任務(wù)。Xft提供了新的字體命名約定、復(fù)雜而精密的字體匹配和選擇機制,并對相關(guān)功能進行充分的抽象,從而使得一般應(yīng)用程序既能夠從使用X渲染擴展的文本輸出獲得益處,又能在不支持這一擴展的X服務(wù)器上正常工作。
  
  
  
  1 引言
  
  X渲染擴展[Pac01]把訪問字體文件和生成字形圖像的功能從X服務(wù)器移到了X客戶一方。采用客戶方字形治理的X應(yīng)用程序在以下幾個方面有優(yōu)勢:可以訪問字體文件的所有細節(jié),應(yīng)用程序可以指定特有字體,漸增的光柵化處理(incremental rasterization),并且有可能與其他部件共享字體,例如打印機。此外,鑒于底層的渲染機制基于圖像而非字形,字形的光柵化技術(shù)、乃至字體文件格式本身都不再依靠于X服務(wù)器的能力,所以現(xiàn)在新字體技術(shù)的集成速度可以跟得上獨立應(yīng)用程序的開發(fā),而不必遙遙無期地等待新的X服務(wù)器增強技術(shù)。
  
  當(dāng)X服務(wù)器不再負責(zé)治理字體文件的訪問和字形生成,就需要一個新的函數(shù)庫在客戶方完成相應(yīng)的任務(wù)。由于X渲染擴展在設(shè)計上支持消鋸齒(anti-aliased)圖形,這個新的函數(shù)庫需要支持高質(zhì)量的消鋸齒字形光柵化。
  
  FreeType項目[TT00]開發(fā)了一個完整的字體光柵化引擎,不僅支持大多數(shù)輪廓字體格式,還支持標(biāo)準(zhǔn)的X PCF位圖字體,X渲染擴展接收字形圖像并使之在屏幕上顯現(xiàn)。為了讓應(yīng)用程序能在屏幕上顯現(xiàn)高質(zhì)量的文本,所需要做的就是在FreeType和X渲染擴展之間放置一層薄薄的“粘合”代碼。
  
  對于不支持渲染擴展的X服務(wù)器,這個函數(shù)庫還需要提供訪問“核心”字體(使用原始X核心協(xié)議訪問的字體)的能力,這就使得應(yīng)用程序能在轉(zhuǎn)向新函數(shù)庫時仍然支持老式X服務(wù)器。
  
  FreeType庫沒有指定如何定位字體文件,而是需要應(yīng)用程序提供字體文件名,這就把配置和定制可用字體集合的負擔(dān)放在了FreeType庫以外,因此,這個新的“粘合”層也需要提供一些配置功能以便在桌面環(huán)境中應(yīng)用。
  
  
  
  2 X渲染擴展字形治理
  
  X渲染擴展提出了幾個簡單抽象供給用程序治理字形。每個Glyph結(jié)構(gòu)包括一個覆蓋字形外形的alpha掩碼(一個描述不透明值的矩形映象)、從alpha掩碼原點到名義字符原點的偏移量、到下一字形的位移(包括垂直和水平的偏移量),GlyphSet結(jié)構(gòu)則包含了一個字形結(jié)構(gòu)的集合,應(yīng)用程序使用一個32位的索引對字形集進行編號。
  
  應(yīng)用程序繪制文本時,把一個GlyphSet標(biāo)識符以及一系列針對該GlyphSet的索引發(fā)送到X服務(wù)器,X服務(wù)器通過對指定位置使用字形結(jié)構(gòu)中的偏移量調(diào)整確定繪制位置,并渲染alpha掩碼來完成對每個字形的處理,后續(xù)字形的繪制位置則是通過在當(dāng)前原點加上位移向量實現(xiàn)。正如X核心協(xié)議中的PolyText請求,在同一個請求中可以對字形序列作出調(diào)整位置、改變GlyphSet等變動,從而使得一個復(fù)雜的字符串在一次操作中完成渲染。
  
  為了覆蓋世界上更多的民族,操作系統(tǒng)支持的語言和區(qū)域集合不斷擴展,伴隨這種擴展,大多數(shù)字體中包含的字形數(shù)也大大增加,當(dāng)今流行的輪廓字體中會包含幾千個字形。十多年前,漸增式渲染字形被看作一種合理的優(yōu)化,現(xiàn)在已成為各種字體機制中的基本組成部分,以盡可能減少每種字體占用的內(nèi)存,并縮短訪問一種新字體時所需的時間。X渲染擴展通過答應(yīng)在需要時把一個Glyph加入已存在的GlyphSet,提供了這種漸增式渲染支持。由于在添加Glyph的過程中沒有任何從X服務(wù)器到X客戶的信息流,這一過程可以完全異步進行。這種異步性保證了即使面對一個高網(wǎng)絡(luò)延遲的環(huán)境,仍有可接受的性能表現(xiàn)。
  
  當(dāng)應(yīng)用程序傳送它們需要顯示的字形圖像時,X服務(wù)器通過在任何可能情況下共享相同字形來節(jié)省內(nèi)存。
  
  
  
  3 FreeType庫
  
  FreeType項目的初衷是要構(gòu)建一個自由的TrueType字體光柵化器。FreeType的第一版提供了與現(xiàn)有系統(tǒng)相當(dāng)?shù)母哔|(zhì)量TrueType光柵化器,F(xiàn)reeType的第二版對內(nèi)部結(jié)構(gòu)進行了一般化以支持更多字體格式,除了支持Type-1、OpenType和CID等眾多輪廓字體格式,F(xiàn)reeType現(xiàn)在還支持X的標(biāo)準(zhǔn)PCF格式(可移植編譯格式)的位圖字體。
  
  FreeType不僅提供光柵化以及度量字形的接口,還提供存取字體文件內(nèi)各種形式的字距調(diào)整和字形替換等表格的機制。這就在基礎(chǔ)字體含有相應(yīng)表格的前提下,使應(yīng)用程序能夠獲得在各種區(qū)域中定位字形所必需的數(shù)據(jù)。
  
  既然FreeType項目明確地要構(gòu)建一個通用的字體函數(shù)庫,在XFree86開發(fā)一個新函數(shù)庫的負擔(dān)就可以大大減輕,因為可以直接采用現(xiàn)有系統(tǒng),并提供“粘合代碼”改變FreeType數(shù)據(jù)結(jié)構(gòu)使之使用X渲染擴展的要求。這固然使得應(yīng)用程序需要面對FreeType函數(shù)庫可能的變化,但考慮到FreeType是一個成熟的項目,相對于完全由XFree86開發(fā)一個新函數(shù)庫的情形,這種變化的嚴重性大概會輕很多。
  
  字體命名和配置不屬于FreeType函數(shù)庫,這些“雜務(wù)”交給了應(yīng)用程序??紤]到FreeType應(yīng)用于各種環(huán)境,有些甚至沒有文件系統(tǒng),為保證FreeType得到最大程度應(yīng)用并獨立于系統(tǒng)策略,這種設(shè)計思想是適當(dāng)?shù)摹?br> 提供這些支持成為Xft實現(xiàn)中最困難的部分,并且其中一部分可能很快就被替換。
  
  
  
  4 XLFD命名
  
  X核心協(xié)議規(guī)定了用非結(jié)構(gòu)化字符串命名字體的方法,X邏輯字體描述(XLFD)[SG92]用于在字符串名格式中加入結(jié)構(gòu)信息。在開發(fā)X時,用于桌面計算的輪廓字體還是一個相對新奇的事務(wù),所以X核心協(xié)議和XLFD都是基于位圖字體設(shè)計的,當(dāng)圍繞縮放字體命名的語法和語義加入XLFD時,基于XLFD的開發(fā)已經(jīng)進行了相當(dāng)長的時期。
  
  XLFD中字體命名語法的意圖在于僅通過名字就可以向應(yīng)用程序提供足夠的字體信息,這樣就可以在不訪問字體數(shù)據(jù)情況下,進行字體選擇和字體列表表示。
  
  XLFD還提供了使用包含“?”和“*”的名字打開字體的標(biāo)準(zhǔn)策略,使用這類名字時,選中的字體將是第一個匹配的字體,即使用相同模式請求列出字體時返回的第一個。不幸的是,X服務(wù)器保存字體名時為了高效搜索,會在各字體目錄中進行內(nèi)部排序,所以不能保證“*”的默認值是合理的。例如,當(dāng)在字體名的weight字段使用“*”時,X服務(wù)器會把bold字體列在normal字體之前。
  
  這個策略真正失敗之處在從point(點值)尺寸到pixel(像素)尺寸的映射。XLFD在字體名中分別提供了兩個軸向上的pixel尺寸、point尺寸和resolution(解析度),標(biāo)準(zhǔn)的X字體按照解析度分別存放,“75dpi”和“100dpi”下各自存放著與該解析度匹配的各種點值尺寸的字體,其他字體目錄下一般是為了在75dpi屏幕光柵化。
  
  協(xié)議指導(dǎo)X服務(wù)器按照在字體路徑(譯注:font path,應(yīng)指配置文件中相應(yīng)節(jié))中出現(xiàn)的順序去搜索字體目錄,這就使字體路徑?jīng)Q定了對解析度的傾向性。假如100dpi的目錄列在前面,當(dāng)應(yīng)用程序在字體名的resolution字段用“*”時,只要在100dpi目錄下存在匹配字體就會使用該字體,否則才去嘗試75dpi的字體。
  
  應(yīng)用程序假如在字體名中僅指定point尺寸,而在resolution字段使用“*”,那么最終將會得到一組隨即尺寸的字體:那些在100dpi目錄下發(fā)現(xiàn)的字體按照100dpi屏幕光柵化,其他字體則按照75dpi屏幕光柵化從而會顯得小一些。
  
  最終的結(jié)果是XLFD的字體匹配布滿了危險,應(yīng)用程序經(jīng)常列出所有可用字體(作出選擇)然后提交完整XLFD字體名(譯注:不含“?”和“*”)給X服務(wù)器。
  
  XLFD的另一個問題是在字體名中包含了字形的平均寬度字段。對于需要在不同總體寬度的字體中進行選擇的應(yīng)用程序而言,這是個非常有用的信息,而且對位圖字體也很輕易計算。但是對輪廓字體,除非在指定尺寸下對每個字形進行光柵化計算,該字段值不能算出。僅僅列出一個特定尺寸下所有的可用字體就會導(dǎo)致光柵化每一個字體的每一個字形。
  
  XLFD提供了關(guān)于可用字體的有用信息,出列平均寬度,這些信息都是輕易計算并交付應(yīng)用程序的。使用XLFD的應(yīng)用程序應(yīng)該在本地治理XLFD字體名,而不要依靠服務(wù)器方字體匹配,也就是通過列出可用字體收集信息,再利用這些信息構(gòu)造完整字體名。
  
  鑒于XLFD沒有提供一種按照語義匹配的合理方案,需要有新方案答應(yīng)在應(yīng)用程序給定一組約束情況下,基礎(chǔ)的字體系統(tǒng)能夠定位一個適當(dāng)?shù)淖煮w。這樣的系統(tǒng)需要有足夠的靈活性以便能夠包含現(xiàn)在不能預(yù)料的新字體特性,也不需要應(yīng)用程序完全指定字體的方方面面。
  
  
  
  5 設(shè)計一個新函數(shù)庫
  
  Xft在三個方面與環(huán)境交互:通過編程接口與應(yīng)用程序交互,通過配置文件與系統(tǒng)交互,通過讓用戶指定字體名與用戶交互。雖然這三方面在函數(shù)庫中緊密相關(guān),但從設(shè)計角度來說,它們是分離的。
  
  5.1 應(yīng)用程序接口設(shè)計
  
  Xft的首要目標(biāo)是把FreeType的輸出和X渲染擴展結(jié)合起來,但是,為了Xft能作為現(xiàn)有的Xlib文本輸出例程的替代物而被人接受,其次要目標(biāo)包括支持核心X字體,盡管這樣做可能以損失應(yīng)用程序功能為代價。
  
  由于FreeType不提供字體選擇功能,所以Xft的一部分要進行字體匹配。采用現(xiàn)有的XLFD機制會極大地限制字體匹配地能力,所以Xft提出了一種新格式。這種選擇機制被設(shè)計為總能匹配某種字體,答應(yīng)應(yīng)用程序假設(shè)適當(dāng)?shù)刈煮w存在,避免在每個級別上都要考慮失敗回落。
  
  另一個要求是函數(shù)庫要提供

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 通道| 安平县| 临沂市| 莱西市| 德庆县| 万州区| 昌黎县| 奇台县| 遂宁市| 广安市| 奈曼旗| 哈巴河县| 巫山县| 高淳县| 申扎县| 左云县| 嘉荫县| 章丘市| 咸宁市| 青神县| 武功县| 汉源县| 兴化市| 儋州市| 通海县| 叙永县| 四平市| 玉林市| 梅河口市| 二连浩特市| 墨竹工卡县| 莲花县| 西安市| 墨玉县| 宜兴市| 若羌县| 平和县| 息烽县| 太原市| 涟源市| 德惠市|