99精品久久这里只有精品,三上悠亚免费一区二区在线,91精品福利一区二区,爱a久久片,无国产精品白浆免费视,中文字幕欧美一区,爽妇网国产精品,国产一级做a爱免费观看,午夜一级在线,国产精品偷伦视频免费手机播放

    <del id="eyo20"><dfn id="eyo20"></dfn></del>
  • <small id="eyo20"><abbr id="eyo20"></abbr></small>
      <strike id="eyo20"><samp id="eyo20"></samp></strike>
    • 用戶界面設(shè)計(jì)

      前言:本站為你精心整理了用戶界面設(shè)計(jì)范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。

      摘要該文從軟件可移植性的角度指出設(shè)計(jì)256色圖形用戶界面時(shí)應(yīng)當(dāng)注意的問(wèn)題,在對(duì)SuperVGA產(chǎn)品進(jìn)行分析的基礎(chǔ)上,提出了基于表格驅(qū)動(dòng)的程序設(shè)計(jì)思想,并給出了范例。

      隨著各種超級(jí)VGA的出現(xiàn),同時(shí)具有高分辨率和豐富色彩的圖形用戶界面已經(jīng)成為程序員和用戶共同追求的目標(biāo)。然而由于各制造商提供的VGA產(chǎn)品之間的差異,使得高分辨率256色圖形界面的兼容性受到影響,常常會(huì)出現(xiàn)這樣的情況:在一個(gè)顯示系統(tǒng)下運(yùn)行良好的程序,在另一種顯示系統(tǒng)下變得面目全非,甚至根本不顯示。這表明程序員對(duì)程序的可移植性重視不夠,或?qū)Ω鞣N顯示設(shè)備缺乏足夠的了解。

      軟件的可移植性是指軟件產(chǎn)品從一個(gè)硬件/軟件環(huán)境轉(zhuǎn)移到另一個(gè)硬件/軟件環(huán)境的難易與繁簡(jiǎn)程度。它從軟件對(duì)新環(huán)境的適應(yīng)性這一方面,反映了軟件的質(zhì)量。為了提高軟件的可移植性,應(yīng)盡量使軟件與具體的設(shè)備無(wú)關(guān),即提高軟件的設(shè)備獨(dú)立性。對(duì)于256色圖形界面而言,就是要使程序不依賴于某種特定的顯示器。例如,程序員沒(méi)有任何理由假定用戶使用的是TVGA。為此,程序員必須提供顯示卡的常規(guī)檢測(cè)例程,并能根據(jù)檢測(cè)的結(jié)果決定圖形算法的具體實(shí)現(xiàn)。

      提高軟件設(shè)備獨(dú)立性的方法有很多,表格驅(qū)動(dòng)就是其中一種。所謂表格,就是根據(jù)需要設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)。表格中的數(shù)據(jù)由檢測(cè)例程填寫(xiě)。表格中包含哪些欄目,應(yīng)在對(duì)各制造商提供的SuperVGA產(chǎn)品足夠了解的基礎(chǔ)上取舍,欄目應(yīng)體現(xiàn)各產(chǎn)品之間的差異。

      一、SuperVGA編程綜述

      SuperVGA產(chǎn)品在體系結(jié)構(gòu)上和標(biāo)準(zhǔn)的IBMVGA有所不同。但編程思想基本上是一樣的,這些編程方法已有許多文章介紹,這里不再重復(fù)。

      影響256色圖形界面可移植性的主要障礙來(lái)自各制造商提供的VGA產(chǎn)品的下面幾點(diǎn)差異。

      1.顯示模式的定義不同。如5DH對(duì)TVGA而言,代表640×480

      ×256色模式,對(duì)PVGA而言卻代

      表1024×768×16色模式。因此,直接用這種模式號(hào)初始化顯示系統(tǒng)是不可取的。和顯示模式密切相關(guān)的是水平分辨率和垂直分辨率。盡管各VGA的256色顯示模式定義迥異,但大都支持如下幾種流行的分辨率,現(xiàn)用統(tǒng)一的模式號(hào)定義見(jiàn)附表。

      @@10A06500.GIF;附表@@

      不同分辨率之間的區(qū)別,體現(xiàn)在編程上就是同一屏幕坐標(biāo)映射到顯存的地址不同,但映射機(jī)理卻是一樣的。具體地說(shuō),坐標(biāo)(x,y)對(duì)應(yīng)顯存的偏移地址(相對(duì)于A000)為Addr=-vga-width*y+x

      2.分頁(yè)機(jī)制不同。SuperVGA使用256K、512K或1M

      的顯示存儲(chǔ)器結(jié)構(gòu)。為了使處理器可通過(guò)一個(gè)64K主窗口來(lái)存取這樣大的顯示存儲(chǔ)器,SuperVGA有一個(gè)存儲(chǔ)器分頁(yè)機(jī)制,使得只將顯示存儲(chǔ)器的一部分映射到處理器的地址空間。值得注意的是,不同的VGA產(chǎn)品,其頁(yè)的大小不同,頁(yè)起始地址的粒度也是可變的。具體的頁(yè)選擇算法請(qǐng)查閱制造商提供的資料。

      不同的顯示模式,顯示一屏圖像所需的頁(yè)數(shù)是不同的。

      除了可移植性外,效率也是一個(gè)不可忽視的因素。圖形系統(tǒng)的核心部分應(yīng)使用匯編語(yǔ)言編程。這不僅是因?yàn)閰R編語(yǔ)言的效率高,而且還因?yàn)閰R編語(yǔ)言子程序的可再用性和可協(xié)用性也很好。核心部分應(yīng)十分重視下面幾點(diǎn):(1)減少不必要的頁(yè)邊界檢查次數(shù);(2)只有在必要時(shí)才進(jìn)行頁(yè)選擇;(3)選擇高效的機(jī)器指令?,F(xiàn)舉例說(shuō)明。程序1是圖像顯示系統(tǒng)中常用的函數(shù),其功能是將解包后的圖像數(shù)據(jù)送到顯存。為便于閱讀同時(shí)給出了C語(yǔ)言調(diào)用原型。程序在傳送每一行數(shù)據(jù)時(shí),提前預(yù)測(cè)是否會(huì)遇到頁(yè)邊界,如果沒(méi)有,直接傳送;如果有,則將數(shù)據(jù)分成兩部分,分別傳送,中間插入頁(yè)選擇。所有的傳送均用字操作代替字節(jié)操作。頁(yè)邊界檢查只有一次,分頁(yè)操作只有在必要時(shí)才發(fā)生,圖像的顯示用最高效的指令REPMOVSW。

      程度1:

      ;原型:voidLineDump(intx,inty,intnum,charfar*ptr)

      ;參數(shù):

      ;x,y-屏幕坐標(biāo)

      ;num-本行的像素個(gè)數(shù)

      ;ptr-指向像素?cái)?shù)據(jù)的遠(yuǎn)指針

      LineDumpprocfar

      pushbp

      movbp,sp

      subsp,2;WORDReservedforlocalvar.

      pushds

      pushes

      pushsi

      pushdi

      reservedequ[bp-2];Localvar.saveseg(DGROUP)

      xequ[bp+6];LargeModel

      yequ[bp+8]

      numequ[bp+10]

      offsequ[bp+12]

      psegequ[bp+14]

      movreserved,ds

      movds,pseg

      movsi,offs;DS:SI圖像數(shù)據(jù)所在源地址

      movax,0a000h;顯存段址

      moves,ax;ES:DI顯存目的地址

      movax,y

      pushds

      movds,reserved

      mulwordptrDGROUP:-vga-width

      popds

      addax,x

      adcdx,0

      movdi,ax;DI=-vga-width*y+x

      movah,dl;進(jìn)位部分(DL)=頁(yè)號(hào)

      calldwordptrcs:-PageSelect

      movcx,num;本行要傳送字節(jié)數(shù)

      movbx,cx

      addbx,di;檢測(cè)傳送是否在一個(gè)頁(yè)內(nèi)

      jncDump-In-One-Page

      subcx,bx;CX=本頁(yè)字節(jié)數(shù),BX=下頁(yè)字節(jié)數(shù)

      shrcx,1;CX/2=字?jǐn)?shù)

      repmovsw;本頁(yè)內(nèi)的傳送

      adccx,0

      repmovsb;處理可能的奇數(shù)字節(jié)數(shù)

      incah;調(diào)整頁(yè)號(hào)

      calldwordptrcs:-PageSelect

      movcx,bx;新頁(yè)內(nèi)要寫(xiě)的字節(jié)數(shù)

      jcxzDump-Done

      Dump-In-One-Page:

      shrcx,1;CX/2=字?jǐn)?shù)

      repmovsw;圖像傳送

      adccx,0

      repmovsb;處理可能的奇數(shù)字節(jié)數(shù)

      Dump-Done:

      popdi

      popsi

      popes

      popds

      movsp,bp

      popbp

      ret

      LineDumpendp

      二、表格驅(qū)動(dòng)的基本思想

      根據(jù)上面的分析,用以驅(qū)動(dòng)顯示系統(tǒng)的表格,至少應(yīng)當(dāng)包含下列項(xiàng)目:

      (1)實(shí)際顯示模式:vga-mode

      (2)水平分辨率:vga-width

      (3)垂直分辨率:vga-depth

      (4)頁(yè)選擇例程的入口地址:PageSelect

      (5)當(dāng)前顯示方式所使用的最大頁(yè)號(hào):vga-pages

      這個(gè)表格由圖形初始化例程來(lái)填寫(xiě)。圖形初始化例程接收的顯示模式是統(tǒng)一的模式號(hào),這樣可以撇開(kāi)具體的設(shè)備,如InitVGA(TVGA800×600)。該例程調(diào)用顯示設(shè)備檢測(cè)程序DetectVGA來(lái)判斷顯示器的類型,從而填寫(xiě)表格中的各欄目,并初始化圖形系統(tǒng)為所需的圖形方式。所有圖形算法都要查此表。

      除了用上述方法來(lái)實(shí)現(xiàn)兼容外,視頻電子學(xué)標(biāo)準(zhǔn)協(xié)會(huì)(VESA)為我們提供了另一種方法。

      VESA

      提供了一組附加的BIOS功能,這組功能以標(biāo)準(zhǔn)的方式訪問(wèn)SuperVGA擴(kuò)充的模式。VESA的附加功能都是通過(guò)BIOS中斷10H的4FH功能來(lái)實(shí)現(xiàn)的。VESA的子功能01能返回非常有用的SuperVGA模式信息,包括分頁(yè)例程的地址。

      因此,程序員可以按照VESA的標(biāo)準(zhǔn)來(lái)編寫(xiě)圖形系統(tǒng),這樣的程序可以在所有支持VESA的顯示器上運(yùn)行。由于VESA包括了世界上的主要VGA供應(yīng)商,寫(xiě)出來(lái)的程序可移植性是很好的。但是,其效率卻可能是最低的。所以最好采用一種折衷的辦法,對(duì)于熟悉的產(chǎn)品,可以不用VESA的功能,對(duì)于不熟悉(資料不全)或檢測(cè)不出來(lái)的顯示器嘗試用VESA提供的手段來(lái)編程,當(dāng)然要檢測(cè)顯示設(shè)備是否支持VESA。

      有時(shí)出于某種考慮,不希望支持所有顯示設(shè)備的代碼集中在一個(gè)程序中,可以為每個(gè)顯示設(shè)備分別提供驅(qū)動(dòng)模塊,主程序根據(jù)檢測(cè)的結(jié)果選擇一個(gè)合適的模塊加載。Borland的C++就是這樣,它有一套BGI驅(qū)動(dòng)程序,各驅(qū)動(dòng)程序提供統(tǒng)一的圖形函數(shù)接口。筆者在實(shí)際工作中,為每一種顯示設(shè)備編寫(xiě)了一個(gè)256色的BGI格式的驅(qū)動(dòng)程序,這樣,在編寫(xiě)圖形系統(tǒng)時(shí),再也沒(méi)有必要考慮用戶的實(shí)際顯示設(shè)備了。

      三、范例

      本文附有兩個(gè)圖形顯示的例子。ShowGif能顯示16/256色GIF格式圖像,能以任何256色模式啟動(dòng),支持多種顯示器。圖像可以漫游,并可隨時(shí)通過(guò)按鍵切換顯示方式。Main則是一個(gè)BGI驅(qū)動(dòng)的鼠標(biāo)/鍵盤(pán)控制的256色漢字圖形菜單。它自己會(huì)挑選一個(gè)合適的BGI,也可以從命令行指定一個(gè)BGI(比如指定VESA256給TVGA顯示器)。

      限于篇幅,這里僅給出有關(guān)的數(shù)據(jù)結(jié)構(gòu)和部分函數(shù)的說(shuō)明(程序2)。然后給出一個(gè)初始化顯

      示系統(tǒng)的C語(yǔ)言片斷(程序3)。

      程序2(TVGA256.H):

      /*統(tǒng)一的模式集*/

      enumTVGA-MODE

      TVGA320x200=0,

      TVGA640x400=1,

      TVGA640x480=2,

      TVGA800x600=3,

      TVGA1024x768=4,

      ;

      voidTVGA256-driver(void);

      voidPVGA256-driver(void);

      voidAVGA256-driver(void);

      ...

      voidVESA256-driver(void);

      externintfar-CdeclTVGA256-driver-far[];

      externintfar-CdeclPVGA256-driver-far[];

      externintfar-CdeclAVGA256-driver-far[];

      ...

      externintfar-CdeclVESA256-driver-far[];

      /*支持的VGA集合*/

      enumVGAs{

      UnKnownVGA,

      TridentVGA,

      ParadiseVGA,

      AheadVGA,

      ...

      VesaVGA

      };

      /*對(duì)應(yīng)的BGI驅(qū)動(dòng)程序名*/

      unsignedchar*Drivers[]={

      "TVGA256",

      "TVGA256",

      "AVGA256",

      ...

      "VESA256",

      };

      externintDetectVGA(void);

      /*功能:檢測(cè)顯示卡的型號(hào)

      返回值:0-Unknowm1-TridentVGA2-ParadiseVGA

      ...

      x-不能檢測(cè)出的VGA,但支持VESA

      返回值同時(shí)寫(xiě)入全局變量vga-type*/

      externintVesaFound(void);

      /*功能:檢測(cè)VESABIOS的存在性

      返回:0-不支持VESA;

      其它-VESA版本號(hào)(0x0102即1.02版);

      返回值同時(shí)寫(xiě)入全程變量vesa-found.*/

      externvoidInitVesa(void);

      /*功能:初始化VESA.根據(jù)-vga-mode模式號(hào)換算成VESA的標(biāo)準(zhǔn)模式號(hào)填寫(xiě)頁(yè)粒度(WinGranularity),頁(yè)大小(WinSize),

      和分頁(yè)例程的入口地址(WinFuncPtr)

      VESA的標(biāo)準(zhǔn)模式解釋如下:

      100h-640x400256

      101h-640x480256

      102h-800x60016

      103h-800x600256

      104h-1024x76816

      105h-1024x768256etc.

      InitVesa供給InitVGA調(diào)用*/

      externvoidInitVGA(intmode);

      /*功能:初始化顯示系統(tǒng)(自動(dòng)調(diào)用DetectVGA檢測(cè)顯示卡)

      參數(shù):mode=TVGA320x200(0)

      TVGA640x400(1)

      TVGA640x480(2)

      TVGA800x600(3)

      TVGA1024x768(4)

      返回:InitVGA沒(méi)有顯式的返回值,但它初始化下列全程變量:

      vga-mode,vga-width,vga-depth,vga-pages,PageSelect

      必要時(shí)自動(dòng)調(diào)用InitVesa

      */

      externintvga-type;

      externintvga-mode;

      externintvga-width;

      externintvga-depth;

      externintvga-pages;

      externintvga-pages;

      externcharpage-number;

      externintvesa-found;

      ...

      程序3(初始化顯示系統(tǒng)的程序片斷):

      ...

      intGraphDriver,GraphMode;

      unsignedchar*bgiDriver="PVGA256";

      bgiDriver=Drivers[DetectVGA()];

      GraphDriver=installuserdriver(bgiDriver,NULL);

      GraphMode=TVGA800x600;

      initgraph(&GraphDriver,&GraphMode,"");...

      參考文獻(xiàn)

      1來(lái)文占等編譯.SuperVGA高級(jí)編程指南.北京:北京科海培訓(xùn)中心,1991.5.

      2張一波編譯.SuperVGA與VESA編程指南.北京:海洋出版社,1992.

      文檔上傳者

      相關(guān)期刊

      儀器儀表用戶

      省級(jí)期刊 審核時(shí)間1個(gè)月內(nèi)

      天津中環(huán)電子信息集團(tuán)有限公司

      數(shù)字化用戶

      省級(jí)期刊 審核時(shí)間1個(gè)月內(nèi)

      四川省科學(xué)技術(shù)協(xié)會(huì)

      中國(guó)計(jì)算機(jī)用戶

      省級(jí)期刊 審核時(shí)間1個(gè)月內(nèi)

      中國(guó)電子信息產(chǎn)業(yè)發(fā)展研究院 北京中電報(bào)科技發(fā)展有限公司

      无遮挡18禁啪啪羞羞漫画| av一区二区三区人妻少妇| 成人无码网www在线观看| 久久乐国产精品亚洲综合| 国内自拍偷拍亚洲天堂| 国产熟妇一区二区三区网站| 一区二区精品国产亚洲| 精品日产卡一卡二卡国色天香| 国产特级全黄一级毛片不卡| 亚洲av影片一区二区三区| 少妇爽到高潮免费视频| 成年女人黄小视频| 精品久久久久久久久免费午夜福利| 日韩精品一区二区亚洲av性色 | 国产精品久久久久久2021| av资源吧首页在线观看| 日韩精品成人区中文字幕| 99精品国产一区二区三区a片| 亚洲日韩精品欧美一区二区三区不卡| 免费高清日本一区二区| 日韩精品 在线 国产 丝袜| 亚洲精品无码av中文字幕| 久久久精品电影| 丝袜美腿在线观看视频| 亚洲国产成人一区二区精品区| 国内揄拍国内精品少妇国语| 国产精品国产三级国产在线观| 经典三级免费看片天堂| 中文字幕在线精品视频入口一区| 日韩在线看片| 精品色老头老太国产精品| 久久久久亚洲av成人人电影| 精品人妻系列无码人妻免费视频 | 人妖系列在线免费观看| 精品香蕉一区二区三区| 国产精品成人99一区无码| 无码三级国产三级在线电影| 亚洲黄色一级在线观看| 亚洲人成影院在线观看| 日本a在线播放| 日本一区二区不卡二区|