999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FLTK多種編碼字體的量寬式分行顯示研究

2018-12-13 09:08:36饒?zhí)熨F胡士杰
計算機應用與軟件 2018年12期
關鍵詞:文本故障方法

李 凱 饒?zhí)熨F 胡士杰 曾 升

1(株洲中車時代電氣股份有限公司軌道交通技術中心 湖南 株洲 412001)2(株洲中車時代電氣股份有限公司數(shù)據(jù)與智能技術中心 湖南 株洲 412001)

0 引 言

目前基于Linux系統(tǒng)的FLTK工具廣泛應用于國內外機車、地鐵等車輛顯示器UI軟件開發(fā)。FLTK為Linux系統(tǒng)下輕量級的圖形數(shù)據(jù)開發(fā)庫[1],開發(fā)的UI軟件具有占用系統(tǒng)資源少、協(xié)議兼容性強、運行穩(wěn)定可靠、可配置等優(yōu)點[2],所以目前在軌道交通領域使用廣泛。跟隨智能化的發(fā)展方向,顯示器不僅要能實時顯示車輛的基本信息,還要實時播報和記錄車輛發(fā)生的故障情況,并且能向司機和維護人員給出每條故障可能發(fā)生的原因和處理措施。通常這類信息描述的文字很多,而每個界面中FLTK控件寬度有限,且顯示的文字不能自動換行,再加上不等寬字體每個字符所占的像素大小不同[3],普通的分行方法會導致每行文字顯示參差不齊,影響界面美觀。較好的折行顯示算法尤為重要,因此為了解決FLTK控件不能自動分行顯示文字的問題,并針對不等寬字體,提出了一種兼容多種編碼方式的自適應分行顯示方法。

1 傳統(tǒng)分行顯示方法

1.1 固定字符數(shù)分行顯示方法

將文本文件中的每條信息按固定字節(jié)數(shù)進行分割,然后分別在各控件中顯示,是固定字符數(shù)分行顯示的主要處理思路,如圖1所示。根據(jù)FLTK控件寬度,通過測試,可以找到分行的固定字符數(shù)值,可以保證固定寬度的控件能完整顯示文字,但對于不等寬字體,比如漢字、數(shù)字、標點符號、英文等所占像素寬度并不相同,會使得相同字符數(shù)的不同文字顯示得參差不齊,嚴重影響了界面的美觀。

圖1 固定字符數(shù)分行處理方法

1.2 插入標簽分行顯示方法

該方法的處理思路是在文本文件中的每條信息適當位置上插入特定的字符,然后根據(jù)這些標簽進行分割,最后分別在各控件中進行顯示,如圖2所示。根據(jù)FLTK控件寬度,通過多次測試,在要顯示的文本串中插入特殊的分行符來進行差別化分行處理可以解決每行顯示參差不齊的問題,但是對于上千條的信息,一一測試并在每條信息中插入分行符,工作量極大,效率極低,會嚴重影響項目交付進度。

圖2 插入標簽分行處理方法

1.3 其他分行處理方法

文獻[3]給出了針對不等寬字體分行處理的基本思路,但是只針對GB2312編碼、ASCII編碼字體的分行處理方法,分行處的英文單詞未做分行處理,而是直接將整個單詞另起一行,這樣可能會導致每行顯示參差不齊,影響顯示效果。文獻[4]在Android平臺中設計了一種擴展的文本顯示控件,可以實現(xiàn)對不等寬字體的分行處理,同樣在兼容文字的多編碼方式、英文分行處理上并未作相關處理。

2 分行顯示方法設計

2.1 整體設計思路

該方法是針對單個FLTK控件無法顯示大量文字(包含中英文、符號等)而作出的一種處理方法。是將預顯示的文字串分割成多個文字片段,再用多個相同的控件來顯示,從而達到分行顯示的效果。整體的文字串分割思路如圖3所示。

圖3 字符串分割再分行的處理思路

目前常用的字體,包括點陣字體和矢量字體,基本都是不等寬字體。不等寬字體的漢字、字母、標點符號等在控件中顯示所占的像素寬度并不相等,使得相同寬度的控件能顯示的字符總數(shù)不同,所以分配給每個控件顯示的字符數(shù)需要靈活調整,即圖3中每個虛線框所分割字符串并不相同。

2.2 針對多種編碼的分割處理機制

2.2.1 基于GB2312編碼的處理機制

基于常用的GB2312編碼的分割處理機制,根據(jù)分割處字符所屬文字類型的不同,可分為兩種情況,如圖4所示。如果分割處是漢字,根據(jù)GB2312編碼規(guī)則,每個漢字占用2個字節(jié)[5],則需回跳2個字節(jié)字后截斷字符串;如果分割處是字母、數(shù)字或者普通符號,根據(jù)GB2312編碼規(guī)則,只占用1個字節(jié)[5],只需回跳1個字節(jié)字后截斷字符串。

圖4 基于GB2312編碼的分割處理機制

2.2.2 基于UTF-8編碼的處理機制

UTF-8編碼是變長字節(jié)編碼[6-7],漢字、字母、數(shù)字、符號等所占字節(jié)數(shù)不相同,不正確的編碼解析易導致亂碼顯示[8-9],使得字符串分割處的情況變得相對復雜,如圖5所示。

圖5 基于UTF-8編碼的分割處理機制

1) 當分割處是漢字時,獲取的該段字符數(shù)減n(n為分割處漢字所占字節(jié)數(shù),1≤n≤6);

2) 當分割處是字母/字符時,分兩種情況:(1) 一般情況下獲取的該段字符數(shù)為能正常顯示的字符數(shù)減1。(2) 對于英語單詞的截斷換行,需考慮在行末添加短橫線,這樣獲取的該段字符數(shù)需減2;對于該行最后一個字符為單詞首字母的情況,需將該字母移劃分到下一個字段中,同時添加空格字符,這樣獲取的該段字符數(shù)也需減2。

2.3 軟件實現(xiàn)流程

具體實現(xiàn)的流程圖如圖6所示。

圖6 基于FLTK的字符分割處理流程

字符分割處理流程如下:

1) 判斷預分割處理的字符串str[]是否為空,若為空,則退出,否則向下執(zhí)行。

2) 通過FLTK函數(shù)庫中的函數(shù),分別測量出顯示字符的控件寬度widge_width、字體類型font_index、字體大小font_size參數(shù)。

3) 通過FLTK函數(shù)庫中的函數(shù),以及步驟2測量的字體類型font_index、字體大小font_size參數(shù)來標定測量屬性,這樣后續(xù)測量的字符串所占像素寬度才是正確的。

4) 設字符串str[]的下標為i,分段數(shù)為j,已拷貝至blocks[j][256]的字符總數(shù)為len。如果i<1 024,根據(jù)i、len值將下標為len至i-len+1(不包含)間字符拷貝至用于臨時存取本次截取的片段的數(shù)組dest[]中。

5) 使用TLFK函數(shù)庫中函數(shù)測量當前dest[]中所有字符所占像素值wi。

6) 比較wi與widge_width,若wi

7) 如果漢字標志chinese_flag大于1,i=i-chinese_flag_old,同時將dest[]中前strlen(dest)- chinese_flag_old-1個字符拷貝至blocks[j][256]中,len=len+strlen(char_blocks[j]),j=j+1,返回至步驟4,否則,執(zhí)行步驟8。

8) 如果漢字標志chinese_flag小于等于1,i=i-1,如果同時dest[i-len-1]為字母,dest[i-len]不為“,”、“.”或空格,則dest[i-len]變換為“-”,len=len-1,即解決單詞分割后,前半部分結尾處添加短橫線的問題。如果漢字標志chinese_flag=0,同時dest[i-len]為字母,dest[i-len-1]為“,” 或“.”或空格,則dest[i-len]變換為空格,len=len-1,即解決分割的單詞前半部分僅有一個字母的顯示的問題。將dest[]中前strlen(dest)-1個字符拷貝至blocks[j][ 256]中,j=j+1,len=len+strlen(char_blocks[j]),返回至步驟4。

以上介紹了該方法的整體思路、處理機制、具體實現(xiàn)流程。

3 實現(xiàn)效果與應用法

為了證明本文提出的文本分行顯示算法在FLTK控件上實現(xiàn)的優(yōu)異性,與目前應用較多的分行方法在文本編輯格式和顯示效果上進行了比較。

固定字符數(shù)分行方法對文本格式舉例如下(左右兩項內容各固定分四行):

1001:1.X出現(xiàn)故障原因1;:1.請檢查X1;.

1001:2.X出現(xiàn)故障原因2;:2.請檢查X2;.

1001:3.X出現(xiàn)故障原因3;:3.請檢查X3;.

1001:4.X出現(xiàn)故障原因4。:4.請檢查X4。.

該方法需預先確定分行數(shù)目以及固定分行的字節(jié)數(shù),文本編輯時需嚴格確保分行字符對齊。使用該方法的顯示效果如圖7所示,從圖中可明顯看到相同字符數(shù)分行有時會因為不等寬字體的差異導致行末參差不齊,影響美觀。

圖7 固定字符數(shù)分行顯示方法的顯示效果

文本中手動插入標簽分行方法的文本編輯格式如下:

1001:1.X出現(xiàn)故障原因1;:2.X出現(xiàn)故障原因2;:3.X出現(xiàn)故障原因3;:4.X出現(xiàn)故障原因4。:

1001:X故障導致的結果1;:X故障導致的結果2。:

1001:司機對應的處理措施。:

1001:維護人員對應的處理措施。:

該方法需根據(jù)控件實際顯示情況調整分行符標簽位置,這樣使得每條信息文本分行位置并不固定。該方法分行顯示效果較好,但對文本編輯的工作量太大,如圖8所示。

圖8 文本中手動插入標簽分行方法的顯示效果

本文提出的新方法對文本編輯格式要求如下:

1001:1.X出現(xiàn)故障原因1;2.X出現(xiàn)故障原因2;3.X出現(xiàn)故障原因3;4.X出現(xiàn)故障原因4。:

1001:處理措施1;處理措施2;處理措施3。:

從文本格式可以看出,只需要將每條文本信息單獨在一行列出,無需添加任何分行標簽或其他處理,明顯降低了對文本格式的要求。量寬式的文本分行顯示方法不僅大大減少了文本編輯工作量,而且在顯示效果上也保持了較高的質量,行末文字參差不齊的現(xiàn)象基本解決,同時也具備對英文單詞換行處理的能力,如圖9所示。同時,該方法兼容多種文本編碼格式,在減少亂碼顯示方面,也具備較強的能力。

圖9 量寬式分行方法的顯示效果

通過對比分析,本文提出的新的量寬式分行顯示方法,在有效降低文本編輯工作量和提高文本分行顯示效果上,均得到了提高。

目前,該方法已在出口埃塞俄比亞電力機車等項目上進行了應用。

4 結 語

根據(jù)控件的像素寬度、字體類型、字體大小屬性來對預顯示的字符串進行自適應分割處理再分行顯示的方法,不僅可以充分利用控件寬度大小來進行文字顯示,而且不會出現(xiàn)文字的漏顯問題,保證了文字顯示的正確性、美觀性。因為該方法只需要獲取控件名稱,就會自動獲取其基本屬性,并對需要顯示的文字串進行自適應分割處理,使得對文本格式的要求降低,大大減少了對文本的處理時間;該方法還解決了每行顯示參差不齊的問題,較好地保證了文本顯示的美觀性。該方法在對待編號分行處理上的能力還有待提高,這也是今后需要進一步研究的方向。

猜你喜歡
文本故障方法
故障一點通
在808DA上文本顯示的改善
基于doc2vec和TF-IDF的相似文本識別
電子制作(2018年18期)2018-11-14 01:48:06
奔馳R320車ABS、ESP故障燈異常點亮
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
文本之中·文本之外·文本之上——童話故事《坐井觀天》的教學隱喻
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
故障一點通
江淮車故障3例
主站蜘蛛池模板: 亚洲第一视频网站| 一本色道久久88| 国产AV无码专区亚洲A∨毛片| 亚洲成人播放| 潮喷在线无码白浆| www.精品国产| 国产成人AV男人的天堂| 伊伊人成亚洲综合人网7777| 亚洲精品福利视频| 中文精品久久久久国产网址| 亚洲天堂视频在线观看免费| 亚洲综合婷婷激情| 国产国拍精品视频免费看| 高潮毛片无遮挡高清视频播放 | 成人在线观看不卡| 国产91视频观看| 久久亚洲国产最新网站| 在线免费无码视频| 国产日产欧美精品| 免费一极毛片| 欧美日韩综合网| 久久久久久久97| 一区二区午夜| 午夜视频日本| 国产丝袜无码精品| 国产白丝av| 91日本在线观看亚洲精品| 成人伊人色一区二区三区| 日本在线国产| 国产Av无码精品色午夜| 人人91人人澡人人妻人人爽| 成人在线欧美| 国产成人福利在线视老湿机| 国产黑人在线| 三上悠亚精品二区在线观看| 亚洲专区一区二区在线观看| 日韩欧美中文字幕在线韩免费| 成人日韩视频| 尤物成AV人片在线观看| 人妖无码第一页| 国产人成乱码视频免费观看| 热久久国产| 99国产精品国产| 美女毛片在线| 宅男噜噜噜66国产在线观看| 亚洲欧美在线综合图区| 亚洲大尺码专区影院| 五月天综合网亚洲综合天堂网| 久久免费视频6| 九九免费观看全部免费视频| 国产综合另类小说色区色噜噜 | 99视频在线观看免费| 91探花在线观看国产最新| 亚洲精品中文字幕无乱码| 波多野结衣一级毛片| 国产一级做美女做受视频| 久久99精品久久久大学生| 亚洲伊人久久精品影院| 国产精选自拍| 成人一级黄色毛片| 激情五月婷婷综合网| 久久无码高潮喷水| 久久激情影院| 亚洲69视频| 国产噜噜在线视频观看| 成年网址网站在线观看| 黄色网址手机国内免费在线观看| 亚洲AV一二三区无码AV蜜桃| 伊人久久久久久久| 国产精品色婷婷在线观看| 永久毛片在线播| 亚洲国产av无码综合原创国产| 欧美精品aⅴ在线视频| 国产在线视频福利资源站| 亚洲制服丝袜第一页| 久久这里只有精品免费| 日韩欧美综合在线制服| av一区二区无码在线| 亚洲精品国产综合99| 国产色婷婷| 欧美h在线观看| 亚洲精品成人7777在线观看|