<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 高性能Windows圖形開發(fā)庫WinG

    時間:2024-08-17 16:23:33 計算機應用畢業(yè)論文 我要投稿
    • 相關推薦

    高性能Windows圖形開發(fā)庫WinG

    摘 要 該文首先概述高性能Windows圖形開發(fā)庫WinG,然后講解WinG的一些特點及充分發(fā)揮WinG性能所必須遵循的十條原則,最后舉例說明其開發(fā)方法

    一、概述
    在Windows下,由于其GDI設備無關性、窗口環(huán)境、缺乏通用圖形庫等限制影響了圖形速度。圖形速度慢成為選擇Windows作為游戲平臺的最大障礙。
    Windows 95在保留Windows的最大優(yōu)點—設備無關性的同時,在Win32 API中新增一個32位調(diào)用CreateDIBSection,使得圖形速度得到很大提高。Microsoft公司意識到圖形速度對于高質(zhì)量軟件的重要性,提
    供了WinG(發(fā)音"Win Gee",其中"G"代表游戲(Game))圖形庫。
    WinG 是為Windows3.1、Windows for Workgroups 3.11、Windows95和Windows NT設計的一種優(yōu)化的高性能圖形庫,運行于386以上的處理器。WinG能在Windows環(huán)境中提供與DOS環(huán)境相當?shù)挠螒驁D形性能。程序員可以直接將內(nèi)存中的設備無關位圖(DIB)傳送到屏幕,并且提供抖動(halftoning)API,利用標準Microsoft抖動調(diào)色板支持對真彩色的仿真。

    二、WinGDC和API
    WinG提供一種新型設備描述表WinGDC,其用法類似于其它設備描述表,不同的是,程序員可以獲取直接指向WinGDC繪圖面、BITMAPINFOHEADER和顏色表的指針,還可以創(chuàng)建和選擇新的繪圖面或修改現(xiàn)有繪圖面的顏色表。應用程序可以創(chuàng)建一個WinGDC和創(chuàng)建一個或多個WinGBitmap用于繪圖。一旦當前幀繪圖、DIB組織、Sprite(精靈)組織完成后,就可將WinGDC緩沖區(qū)拷貝到屏幕。這種雙緩沖區(qū)結(jié)構(gòu)減少了閃爍,使屏幕更新更平滑。
    WinG API包含如附表所示的函數(shù)和類型。
    附表
    WinGDC不是調(diào)色板設備,是RGB設備。使用WinGSetDIBColorTable,而不是SelectPalette修改設備的顏色表。

    三、WinG調(diào)色板管理
    Windows調(diào)色板管理器用于管理多個應用程序?qū)ν粋系統(tǒng)調(diào)色板的使用請求。它給每個應用程序分配一個虛擬256色的邏輯調(diào)色板,并在必要時將邏輯調(diào)色板中的顏色轉(zhuǎn)換為系統(tǒng)調(diào)色板中的顏色。
    所謂對等(Identify)調(diào)色板,就是一個與當前系統(tǒng)調(diào)色板精確(1:1)匹配的邏輯調(diào)色板。它不需要進行調(diào)色板轉(zhuǎn)換,因此將WinGDC傳送到屏幕上時使用對等調(diào)色板能大大提高傳送速度。
    抖動調(diào)色板是一個對等調(diào)色板,其中包含的顏色是經(jīng)過精心挑選的,并進行了優(yōu)化使得在8位設備上通過抖動模擬真彩色。應用程序可選取該調(diào)色板并在顯示設備描述表中實現(xiàn),以便利用WinG提供的抖動技術。WinG圖形庫提供兩個支持抖動的API:WinGCreateHalftonePalette和 WinGCreateHalftoneBrush,利用它們可在8位設備上仿真出24位真彩色。

    四、WinG的DIB方向

    1.自下而上DIB
    Windows DIB的標準類型是自下而上的DIB,即DIB總是指向內(nèi)存中最底層的掃描線。坐標(0,0)對應于圖像的左下角,而Windows將(0,0)對應于顯示器和設備相關位圖(DDB)的左上角,即自下而上DIB的y軸被顛倒了。
    對于8位自下而上DIB,屏幕上像素(X,Y)在內(nèi)存中的地址計算如下:
    //計算每掃描線實際比特數(shù) DibWidthBits = (UINT)lpBmiHe
    ader->biWidth * (UINT) lpBmiHeader->biBitCount
    //按32比特邊界對齊
    DibWidthBytes = ((DibWidthBits+31) & (~31)) / 8;
    pPixelXY = DibAddr + (DibHeight-1-Y)*DibWidthBytes + X;

    2.自上而下DIB
    其保存方向與大多數(shù)DIB相同,內(nèi)存中的第一掃描線對應于圖像的第一行。此時BITMAPINFOHEADER結(jié)構(gòu)的成員biHeight為負值。
    對于8位自上而下DIB,屏幕上像素(X,Y)在內(nèi)存中的地址計算為:
    pPixelXY = DibAddr + Y*DibWidthBytes + X.

    五、充分發(fā)揮WinG性能方法
    為了最大限度地發(fā)揮Windows環(huán)境下的WinG的塊傳送性能,要求:
    ·取出單色圖形調(diào)試卡和拆接網(wǎng)絡連接器;
    ·保存WinGBitmap表面指針和BITMAPINFO;
    ·避免重復GDI調(diào)用;
    ·專用函數(shù)可能比GDI函數(shù)執(zhí)行速度快;
    ·對任何函數(shù)都要測試其執(zhí)行速度;
    ·不要縮放位圖;
    ·不要進行塊傳遞;
    ·不要進行剪切操作;
    ·使用對等調(diào)色板;
    ·使用推薦的DIB格式。

    六、應用實例
    下面的例子講解如何利用WinG圖形庫在Windows95下顯示真彩色位圖(24位)。利用Visual C++ 2.0編程。首先創(chuàng)建項目文件wing32.mak,設置Link加wing32.lib庫。具體WinG圖形庫和本例子完整源程序可與作者聯(lián)系。
    首先選擇Tools|Options...菜單項,再選擇Directories命令。在Show Directories for下拉框中選擇Include files,增加目錄c:\wing\include;選擇Library files,增加目錄c:\wing\lib;選擇Executable files,增加目錄c:\wing\bin。
    選擇Project|Settings...菜單項,再選擇Link命令。在Object/L
    ibrary Modules編輯框中加入連接庫wing32.lib。
    struct{
    BITMAPINFOHEADER Header;
    RGBQUAD aColors[256];
    } Info;
    CWing32View::CWing32View()
    {

    Info.Header.biSize =
    sizeof(BITMAPINFOHEADER);
    Info.Header.biWidth = 176;
    Info.Header.biHeight = 144;
    Info.Header.biPlanes = 1L;
    Info.Header.biBitCount = 24L;
    Info.Header.biCompression = 0L;
    Info.Header.biSizeImage =
    (long)(176L*144L*3L);
    Info.Header.biXPelsPerMeter = 0;
    Info.Header.biYPelsPerMeter = 0;
    Info.Header.biClrUsed = 0;
    Info.Header.biClrImportant = 0;
    hBitsSrc = ::GlobalAlloc(GHND,
    (long)(176L*144L*3L));
    pBitsSrc =
    (LPSTR)::GlobalLock(hBitsSrc);
    }
    CWing32View::~CWing32View()
    {
    ::GlobalUnlock( hBitsSrc );
    ::GlobalFree( hBitsSrc );
    }
    void CWing32View::OnPaint()
    {
    CPaintDC dc(this);
    void far *pBits;
    hpalApp = WinGCreateHalftonePalette();
    PDIB pCurrentDIB =
    DibOpenFile("miss256.bmp");
    HDC WinGDC = WinGCreateDC();
    Info.Header.biSize =
    sizeof(BITMAPINFOHEADER);
    Info.Header.biWidth =
    DibWidth(pCurrentDIB);
    Info.Header.biHeight =
    DibHeight(pCurrentDIB);
    HBITMAP WinGBitmap =
    WinGCreateBitmap(WinGDC,
    (BITMAPINFO far *)&Info,&pBits);
    WinGBitmap =
    SelectBitmap(WinGDC,WinGBitmap);
    HPALETTE OldPalette =
    ::SelectPalette(dc.m-hDC,hpalApp,FALSE);
    ::RealizePalette(dc.m-hDC);
    HPALETTE WinGPalette =
    WinGCreateHalftonePalette();
    HPALETTE OldWinGPalette =
    ::SelectPalette(WinGDC,WinGPalette,FALSE);
    ::RealizePalette(WinGDC);
    ::StretchDIBits(WinGDC,0,0,DibWidth(
    pCurrentDIB),DibHeight(pCurrentDIB),
    0,0,DibWidth(pCurrentDIB),DibHeight(
    pCurrentDIB),DibPtr(pCurrentDIB),
    DibInfo(pCurrentDIB),
    DIB-RGB-COLORS,SRCCOPY);
    ::SelectPalette(WinGDC,OldWinGPalette,FALSE);
    ::DeleteObject(WinGPalette);
    int Width = DibWidth(pCurrentDIB);
    int Height = DibHeight(pCurrentDIB);
    WinGStretchBlt(dc.m-hDC,0,0,Width,
    Height, WinGDC,0,0,
    DibWidth(pCurrentDIB),
    DibHeight(pCurrentDIB));
    ::SelectPalette(dc.m-hDC,OldPalette,FALSE);
    ::SelectPalette(WinGDC,OldPalette,FALSE);
    ::DeleteObject(SelectBitmap(WinGDC,WinGBitmap));
    ::DeleteDC(WinGDC);
    }
    注意,在Windows 95下執(zhí)行WinG安裝程序Setup.exe,然后就可執(zhí)行Wing32.exe。
    用Visual C++ 2.0編譯源程序,必須將WinG圖形庫Wing31.lib連接(link)到可執(zhí)行文件Wing32.exe中(見文中所述)。

    【高性能Windows圖形開發(fā)庫WinG】相關文章:

    Windows 95的引導圖形界面及抖動變色圖像的形成03-03

    解析幾何3D圖形庫和動畫庫03-07

    AutoCAD中圖形庫的創(chuàng)建和管理03-18

    解析幾何3D圖形庫和動畫庫軟件03-07

    Windows2000設備驅(qū)動程序的研制開發(fā)03-03

    基于Windows2000開發(fā)WDM設備驅(qū)動程序的方法03-19

    檔案編研選材數(shù)據(jù)庫的合理開發(fā)03-20

    全國工程地質(zhì)專家?guī)煜到y(tǒng)的開發(fā)03-01

    利用Delphi開發(fā)網(wǎng)絡數(shù)據(jù)庫應用03-03

    主站蜘蛛池模板: 久久精品无码专区免费青青| 国产精品9999久久久久| 日韩精品视频一区二区三区| 香蕉国产精品频视| 久久九九精品99国产精品| 日本精品少妇一区二区三区| 久久亚洲精品视频| 国产精品国产三级国产av品爱网| 亚洲?V无码乱码国产精品| 国产精品一区二区三区99| 国产夫妇精品自在线| 老司机67194精品线观看| 中文字幕精品无码一区二区| 精品国精品国产自在久国产应用男| 四虎精品成人免费观看| 2021久久精品国产99国产精品 | 99热门精品一区二区三区无码| 四虎国产精品成人| 精品久久久久久久中文字幕| 99热都是精品久久久久久| 日本精品卡一卡2卡3卡四卡| 国产精品看高国产精品不卡| 久久精品天天中文字幕人妻| 亚洲国产精品无码成人片久久| 亚洲精品视频久久久| 亚洲爆乳无码精品AAA片蜜桃| 蜜桃麻豆www久久国产精品 | 91精品一区二区综合在线| 精品精品国产自在久久高清| 国产成人精品免费视频动漫 | 欧美日韩精品一区二区在线播放| 国产在线观看一区精品| 国产精品青草视频免费播放| 97久视频精品视频在线老司机| 亚洲精品免费视频| 五月花精品视频在线观看| 日本欧美韩国日本精品| 精品亚洲综合在线第一区| 久久国产精品99精品国产987| 午夜精品美女写真福利| 思思99热在线观看精品|