亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        在WindML下漢字、圖形界面及圖片顯示的開發(fā)研究

        2014-08-01 14:56:29胥小武余立建劉洪雨
        鐵路計算機應(yīng)用 2014年8期
        關(guān)鍵詞:引擎

        胥小武, 余立建, 劉洪雨

        (西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院, 成都 610031)

        在WindML下漢字、圖形界面及圖片顯示的開發(fā)研究

        胥小武, 余立建, 劉洪雨

        (西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院, 成都 610031)

        本文介紹WindML的結(jié)構(gòu),重點敘述在開發(fā)文字圖形前字庫的原理、結(jié)構(gòu)和配置、顯示圖片文件前的準(zhǔn)備工作及WindML設(shè)置編譯的重要注意事項,最后用具體的項目開發(fā)成果,展示了在VxWorks下用WindML開發(fā)的文字、圖形、圖片文件的顯示。

        VxWorks;WindML;文字;圖形;圖片文件

        VxWorks實時操作系統(tǒng)由400多個相對獨立的、短小精煉的目標(biāo)模塊組成,用戶可根據(jù)需要選擇適當(dāng)?shù)哪K來裁剪和配置系統(tǒng),這就有效保證了系統(tǒng)的安全性和可靠性[1]。VxWorks包含了BSP,Wind內(nèi)核,I/O系統(tǒng),文件系統(tǒng),網(wǎng)絡(luò)系統(tǒng),圖形系統(tǒng)等[2]。

        WindML是VxWorks下的一部分,它支持多媒體程序運行于嵌入式操作系統(tǒng),主要用于提供基本的圖形、視頻和聲頻技術(shù)應(yīng)用開發(fā)。WindML API提供了一個統(tǒng)一的圖形硬件接口及處理輸入/輸出設(shè)備事件的能力。

        WindML包括兩個組件:(1)SDK。它提供了圖形資源的初始化和清理例程,多媒體API包括了2D圖形化界面、區(qū)域管理、窗口、顏色管理、視頻音頻、JPEG支持、事件服務(wù)、內(nèi)存管理、擴展API和設(shè)備管理;(2)DDK。它提供了一個完整的常見硬件配置,參考驅(qū)動程序例程和API文檔可以快速建立起新的驅(qū)動程序[3]。 WindML的層次結(jié)構(gòu)如圖1所示。?

        圖1 WindML層次結(jié)構(gòu)圖

        1 WindML漢字庫和WindML的配置

        在WindML第一次使用之前要配置、編譯WindML。VxWorks中的板級支持包BSP (board support package)是介于底層硬件和上層軟件之間的底層軟件開發(fā)包,它主要用來屏蔽底層硬件,進(jìn)行硬件系統(tǒng)的初始化并調(diào)用外設(shè)的驅(qū)動程序接口管理系統(tǒng)外設(shè)。當(dāng)用戶開發(fā)目標(biāo)板的BSP時,可以從所提供的BSP中選一個接近的來修改。根據(jù)基本的硬件信息來修改相應(yīng)的BSP文件中的組成文件包括makefile,config.h,romInit. s,sysLn97xEnd.c等文件[4~5]。例如修改config. h 中定義的一些參數(shù),使編譯出來的系統(tǒng)引導(dǎo)程序bootrom 和VxWorks 的映像符合要求,修改sysLn97xEnd.c 文件,以使系統(tǒng)的網(wǎng)絡(luò)功能正常運行。

        修改完成后,開始編譯用戶定義的BSP,打開Tornado選擇build boot room,確保select a BSP的選項是自己命名的BSP名字,select an image to build->bootrom->select a tool->gnu。

        當(dāng)配置好后點擊OK進(jìn)行編譯,成功后自定義的BSP就可以用了。

        1.1 漢字字庫設(shè)置

        WindML根據(jù)ISO8859-1標(biāo)準(zhǔn)為8位字符表示和UNICODE標(biāo)準(zhǔn)的16位字符表示提供了位圖字體集,WindML本身不支持中文顯示,想要實現(xiàn)中文顯示,要利用WindML中對雙字節(jié)編碼的支持實現(xiàn)漢字的點陣存儲、點陣獲取、點陣顯示的全過程[6~7]。一般從網(wǎng)上下載的字庫或用軟件轉(zhuǎn)換過來的字庫需要把相應(yīng)的字庫C文件修改,否則放到ugl/fonts/bmf文件夾中后,配置WindML中的bitmap font項無法識別,也就是整個excluded和include都沒有字體庫,修改內(nèi)容如圖2所示。

        圖2 修改C文件內(nèi)容

        下載或轉(zhuǎn)換過來的字庫C文件沒有“/* Yahei12.c - Yahei_12 font for BMF font driver */”,WindML無法識別。在標(biāo)準(zhǔn)的編譯器里,不管是C還是 C++語言,“/* Yahei12.c - Yahei_12 font for BMF font driver */”都是被編譯器忽略掉的,但是在這里不能忽略掉,Yahei_12就是代表字庫中有Yahei 12中文字庫。改好這一點,WindML可以識別加進(jìn)去的字庫,但是在編譯WindML時還會出現(xiàn)錯誤。要想解決問題,必須確保在所編譯的字體文件中有如下所示的文字,其具體的含義如下:

        {

        {24,24}, /*表示點陣大小 */

        {UGL_FONT_BOLD_OFF,

        UGL_FONT_BOLD_OFF},

        UGL_FONT_UPRIGHT, /*表示斜體*/

        UGL_FONT_PROPORTIONAL, /*表示行間距屬性*/

        UGL_FONT_ISO_8859_1, /*表示字符集*/

        "Yahei 12x12 Dot", /*表示字體名稱*/

        "Yahei" /*表示字體系列名稱*/

        }, /*點陣名稱等點陣屬性表 */

        0, /*表示行間距*/

        24, /*最大上偏移位置*/

        0, /*最大下偏移位置*/

        24, /*最大寬度*/

        pageArray /*字形頁*/

        }; /*點陣描述解構(gòu)*/

        上面所述就是點陣的基本結(jié)構(gòu),通過uglFont FindString(fontDrvId,”familyName=Yahei;pixelSiz e=16”,&systemFontDef)能找到自定義的字庫文件。

        字體C文件的最后"Yahei 12x12 Dot"、"Yahei",一定要改為自定義文件名和相應(yīng)的點陣,不然編譯WindML時會出現(xiàn)錯誤。

        1.2 WindML的配置及編譯

        WindML具體的配置如下:Tornado環(huán)境下打開Tools→WindML…,在WindML configuration選擇編譯的文件名,點擊configure進(jìn)入WindML Configuration,在build選項中選擇處理器類型、工具等信息;在graphics driver中選擇開發(fā)板的圖形驅(qū)動,在display中選擇顯示器的型號,在圖形設(shè)置graphics setting配置顯示屏大小,刷新的頻率;在advanced選項中,如果需求圖片、視頻,可以選擇JPEG和double buffer 。新增漢字庫中的漢字編碼是雙字節(jié),在編譯WindML時要把bitmap fonts 中的include Unicode support選上。

        完成配置后點擊build開始編譯WindML,在此之前最好clean一次。

        2 WindML漢字、圖形和JPEG圖片文件的顯示

        2.1 漢字、圖形的顯示

        在顯示漢字之前,必須初始化字體驅(qū)動和字體引擎,字體驅(qū)動在2D字體的API層和字體引擎之間提供接口,同時為圖形驅(qū)動程序和字體引擎扮演者服務(wù)的角色,其結(jié)構(gòu)如圖3所示。

        圖3 字體驅(qū)動與字體引擎

        2D字體API:應(yīng)用程序可以使用API來顯示文字,而不用考慮字體引擎本身的能力。這些API服務(wù)于WindML中所有的字體引擎。

        字體驅(qū)動:字體驅(qū)動在2D字體API和字體引擎專有的API之間提供了一個抽象層。字體驅(qū)動也是顯示驅(qū)動以及字體引擎之間的接口。有了字體驅(qū)動層,應(yīng)用程序就可以通過使用相同的2D字體API來訪問不同的字體引擎。

        字體引擎:通過使用字體驅(qū)動的服務(wù)提供并顯示文字。

        開發(fā)應(yīng)用程序時,用uglInitialize()函數(shù)初始化字體引擎和字體驅(qū)動,用uglDeinitialize()銷毀字體引擎和字體驅(qū)動。用下面的函數(shù)找到設(shè)備標(biāo)識符,輸入服務(wù)標(biāo)識符,字體驅(qū)動標(biāo)識符,具體的代碼如下:

        if(uglInitialize() == UGL_STATUS_ERROR) {return

        ; } /*初始化字體引擎和字體驅(qū)動*/

        pRegistryData=uglRegistryFind(UGL_DISPLAY_TY

        PE, 0, 0, 0); /*在注冊表中找到相應(yīng)的設(shè)

        備號*/

        deviceID = (UGL_DEVICE_ID)pRegistryData->id;

        /*找到設(shè)備ID號*/

        pRegistryData=uglRegistryFind(UGL_INPUT_SERV

        ICE_TYPE, 0, 0, 0);

        inputServiceId=(UGL_INPUT_SERVICE_ID)pRegis

        tryData->id; /*找到輸入服務(wù)ID號*/

        pRegistryData=uglRegistryFind(UGL_FONT_ENGI

        NE_TYPE, 0, 0, 0);

        fontDrvId=(UGL_FONT_DRIVER_ID)pRegistryDat a->id; /*找到字體驅(qū)動ID號*/

        接下來,用函數(shù)uglCreateGc()來創(chuàng)建圖形上下文:

        gc = uglGcCreate(deviceID); /*創(chuàng)建上下文*/

        textOrigin = UGL_FONT_TEXT_UPPER_LEFT;

        /*是文字的顯示從左上開始*/

        uglFontDriverInfo(fontDrvId,

        UGL_FONT_TEXT_ORIGIN, &textOrigin);

        /*是文字的顯示從左上開始*/

        uglFontFindString(fontDrvId, "familyName=Yahei;

        pixelSize=24", &fontDef)

        textFont = uglFontCreate(fontDrvId, &fontDef);

        /*初始化自定義的文字字體大小樣式*/

        uglColorAlloc (deviceID, &bgColor, UGL_NULL,

        &textBgColor, 1); /*設(shè)置屏幕背景顏色*/

        uglColorAlloc(deviceID, &foreColor, UGL_NULL,

        &textForeColor, 1); /*設(shè)置屏幕前景顏色*/

        uglForegroundColorSet(gc, textForeColor);

        /*設(shè)置文字背景顏色

        uglBackgroundColorSet(gc, textBgColor);

        /*設(shè)置文字背景顏色*/

        uglFontSet(gc, textFont);

        /*設(shè)置字體的顏色和字體的背景顏色。*/

        通過上面的步驟就可以調(diào)用uglTextDraw()函數(shù)顯示出單字節(jié)字符,調(diào)用uglTextDrawW()函數(shù)顯示出雙字節(jié)字符,uglRectangle(), uglEllipse()函數(shù)分別是畫矩形、圓圈和橢圓形狀,其具體的實例如圖4所示。

        圖4 漢字圖形的顯示界面

        2.2 JPEG圖片的顯示

        WindML中2D位圖管理的API允許創(chuàng)建或者渲染單色、彩色、透明位圖到顯示器上。

        VxWorks是一個實時操作系統(tǒng),有硬盤等設(shè)備,要將JPEG圖片顯示在顯示屏上則需要把JPEG文件上傳到VxWorks的硬盤里,假設(shè)VxWorks的盤符為ata0a,利用ftp工具把JPEG文件上傳到VxWorks硬盤里。首先進(jìn)入到VxWorks的virtual console控制臺界面中,輸入cd “/ata0a”,進(jìn)入VxWorks硬盤,用ls命令查看硬盤里的文件,如果要將圖片文件放入一個新的文件夾就用命令mkdir image創(chuàng)建一個存放圖片的文件夾,創(chuàng)建后再次用ls命令查看是否已經(jīng)成功的操作。打開ftp文件傳輸軟件把JPEG文件上傳到VxWorks硬盤中。

        前期準(zhǔn)備工作后,進(jìn)行軟件代碼的編寫。WindML 2D設(shè)備和驅(qū)動的擴展機制為處理圖片數(shù)據(jù)奠定了基礎(chǔ),使得WindML支持處理JPEG圖片。首先用函數(shù)uglJpegInit()初始化JPEG的擴展功能,驗證JPEG擴展功能為特別的圖形設(shè)備而安裝,初始化后uglJpegInit()函數(shù)會返回UGL_JPEG_ID,此ID號為以后的JPEG例程調(diào)用作為一個參數(shù)值而返回。

        WindML定義了一種方便的點陣圖稱作DDB(設(shè)備有關(guān)位圖),如果要顯示的JPEG圖片較大,則花費在處理圖片的時間越長,因此要權(quán)衡圖片大小和處理時間。

        顯示圖片除了需要初始化字體庫和設(shè)備標(biāo)識符外還需要調(diào)用uglJpegInit()函數(shù)初始化JPEG庫和JPEG的擴展功能,這樣才能讓JPEG圖片顯示在界面上,初始化完成后會返回一個ID號,接著要設(shè)置JPEG引擎,具體的代碼如下:

        jpegId = uglJpegInit(devId, &jpegVersion);

        uglJpegModeSet(jpegId, &jpegMode);

        把要顯示的JPEG圖片文件的內(nèi)容讀到文件指針里,調(diào)用uglJpegToDDBFromFile()函數(shù)解壓縮后寫入到位圖中,然后調(diào)用uglBitmapBlt()函數(shù)把UGL_BITMAP_ID傳輸?shù)経GL_DDB_ID中,并以UGL_GC_ID開始繪制圖片,以下是代碼:

        uglJpegToDDBFromFile (jpegId, fp, &jpeg-DdbId, UGL_NULL, 0, 0);

        uglBitmapSizeGet(jpegDdbId, &jpegWidth, &jpegHeight);

        uglBitmapBlt(gc, jpegDdbId, 0, 0, jpegWidth -1, jpegHeight - 1, UGL_DEFAULT_ID, 0, 0);

        本實例是利用WindML支持2D位圖的功能顯示出JPEG圖片,程序?qū)懞煤筮M(jìn)行編譯,將其下載到目標(biāo)板上,運行后在終端顯示如圖5所示。

        圖5 JEPG圖片顯示結(jié)果

        3 結(jié)束語

        本文介紹了在WindML下開發(fā)字體、圖形及圖片文件的顯示,程序開發(fā)后能夠運行在具體的項目板上,同時對開發(fā)中可能出現(xiàn)的問題和解決方案做了詳細(xì)的步驟說明,應(yīng)用于實際的開發(fā)項目中取得了良好的效果。

        [1] 周啟平,張 楊,吳 瓊.VxWorks開發(fā)指南和Tornado實用手冊[M].北京:中國電力出版社,2004.

        [2] 孫鳳麗,王 瑞,楊桂枝,等.實時嵌入式操作系統(tǒng)VxWorks結(jié)構(gòu)分析和剪裁[J].軟件產(chǎn)業(yè)與工程,2013(1):33-36.

        [3] 楊 蔚.基于VxWorks 的數(shù)據(jù)采集與重演軟件的圖形界面的設(shè)計與實現(xiàn)[J].宇航計測技術(shù),2012,32(3):69-74.

        [4] 王 洋.VxWorks嵌入式實時操作系統(tǒng)設(shè)備驅(qū)動與BSP開發(fā)設(shè)計[M].北京:北京航空航天大學(xué)出版社,2012.

        [5] 王彥剛,呂遵明,萬留進(jìn).VxWorks系統(tǒng)的BSP設(shè)計與實現(xiàn)[J].計算機系統(tǒng)應(yīng)用,2011,20(12):91-94.

        [6] 劉亞麗,顏麗娟.一種基于VxWorks 的漢字輸入法實現(xiàn)[J].電子科技,2012,25(2):97-99.

        [7] 韓改寧.嵌入式系統(tǒng)VxWorks下漢字輸入法的研究與實現(xiàn)[J].咸陽師范學(xué)院學(xué)報,2012,27(4):44 - 46.

        責(zé)任編輯 陳 蓉

        Chinese character, graphics interface and photo display under WindML

        XU Xiaowu, YU Lijian, LIU Hongyu
        ( School of Information Science and Technology , Southwest Jiaotong University, Chengdu 610031, China)

        VxWorks; WindML; text; graphics; image fi le

        : This paper introduced the structure of WindML, focused on the development, described the principle of preceding text graphics character, structure and con fi guration, the preparatory work before displaying the picture fi le and the important note of WindML setting compile. With the development of speci fi c projects, the paper demonstrated the text, graphics, images, fi les, which were developed by WindML under VxWorks.

        2014-03-04

        胥小武,在讀碩士研究生;余立建,教授。

        U29∶TP39

        A

        1005-8451(2014)08-0049-04

        猜你喜歡
        引擎
        以學(xué)促干 挺膺擔(dān)當(dāng) 激活砥礪前行的紅色引擎
        江陰市“三個創(chuàng)新”打造?;钒踩O(jiān)管新引擎
        新海珠,新引擎,新活力!
        消費繼續(xù)發(fā)揮經(jīng)濟增長第一引擎作用
        三生 三大引擎齊發(fā)力
        藍(lán)谷: “涉藍(lán)”新引擎
        商周刊(2017年22期)2017-11-09 05:08:31
        休閑垂釣 傳統(tǒng)漁業(yè)新引擎
        信息化,“盛京”加速的新引擎
        無形的引擎
        河南電力(2015年5期)2015-06-08 06:01:46
        基于Cocos2d引擎的PuzzleGame開發(fā)
        在线视频播放观看免费| 妓院一钑片免看黄大片| 久久精品日韩av无码| 中文字幕av无码一区二区三区电影 | 国产精品麻豆成人av电影艾秋| 国产成人国产在线观看 | 国产精品一区二区偷拍| 亚洲精品色午夜无码专区日韩| 久久精品无码中文字幕 | 最近中文字幕一区二区三区| 国产亚洲一区二区三区综合片| 2018国产精华国产精品| 国产成人久久精品区一区二区| 国产av区亚洲av毛片| 日本道免费一区二区三区日韩精品| 亚洲va无码手机在线电影| 亚洲国产午夜精品乱码| 中文字幕人妻乱码在线| 欧美群妇大交群| 亚洲av日韩av高潮潮喷无码 | 无码熟妇人妻AV不卡| 少妇被猛烈进入中文字幕 | 欧美日韩一区二区综合| 1精品啪国产在线观看免费牛牛| 久久综合加勒比东京热| 中文字幕免费在线观看动作大片| 亚洲av成人无码久久精品 | 五月天激情小说| 天堂av在线一区二区| 日本人妻免费在线播放| 国产成人aaaaa级毛片| 亚洲一区二区三区av链接| 丰满少妇av一区二区三区| 国产色欲av一区二区三区| 亚洲人成人影院在线观看| 日韩精品人妻中文字幕有码| 亚洲综合一区二区三区天美传媒| 久久亚洲精品无码va白人极品| 国产精品亚洲片夜色在线| 日韩有码在线免费视频| 精品国产精品国产偷麻豆|