1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 軟件封面特技顯示的語言實現(xiàn)

        • 相關(guān)推薦

        軟件封面特技顯示的語言實現(xiàn)

        軟件編制人員都希望自己的軟件能有一個漂亮的封面,如果能將圖形動畫技術(shù)應(yīng)用到封面設(shè)計中,無疑會使封面更加美觀醒目,為應(yīng)用軟件錦上添花。
        本文提供了一種封面設(shè)計技術(shù),能模擬攝像機推拉鏡頭的效果,一推一拉,極具動態(tài)。
        我們知道,計算機圖形處理的數(shù)據(jù)量非常大,要求的速度也很快。因此往往將圖形處理軟件固化成硬卡(如2.13漢字系統(tǒng)的神筆CAD卡),有了圖形處理卡,對圖形應(yīng)用的編程相對要容易些,然而,由于資金等問題,大多數(shù)的PC用戶都不具備此設(shè)備,難道說就只能望“卡”興嘆了么?回答當然是否定的,本文給出的就是一種純軟件方式的圖形動畫技術(shù)。它不要求額外的設(shè)備,只要有EGA/VGA適配器即可。
        為實現(xiàn)圖形的動畫效果,例如實現(xiàn)軟件封面漢字標題的推拉鏡頭效果,只要將一幅幅不同大小的漢字畫面在很短的時間內(nèi)依次顯示在屏幕上即可。這里涉及到一個問題,那就是在顯示下一個畫面之前先要清屏,然后再寫下一個畫面。無論二者的速度多快,都將影響動畫效果,用戶能感受到寫屏和清屏的過程。這將大煞風景。本文采用“幕后組織”的方法解決了這一問題。在EGA/VGA的10H模式下,視頻緩沖區(qū)被分成二頁,一個頁為當前顯示頁,其內(nèi)容即為屏幕上顯示的內(nèi)容;一個為輸出活動頁,所有的視頻輸出都針對此頁,它可以是當前顯示頁,也可以不是。在Turbo C中提供了兩個函數(shù),setactivepage和setvisualpage分別完成設(shè)置圖形輸出活動頁和設(shè)置圖形可見頁。如果我們將輸出活動頁設(shè)為非當前顯示頁,將一些不想讓用戶看到的處理過程放到活動頁這一“幕后”去處理。然后切換當前顯示頁和活動輸出頁,那么用戶看到的就是我們想讓其看到的內(nèi)容了。
        為實現(xiàn)漢字標題的推拉鏡頭效果,需要在屏幕上顯示不同大小的漢字,許多漢字系統(tǒng)都提供了漢字的放大功能,但一則需要漢字系統(tǒng)的支持,且有特殊的控制命令,在C語言中不易調(diào)用;二則其放大和縮小的級差皆為整數(shù)倍,不能體現(xiàn)緩慢變化的過程。所以筆者編制了一個西文狀態(tài)下的漢字放大和縮小的函數(shù),可用來完成漢字的任意放大和縮小(例如0.2倍)。同時,由于無須裝載漢字系統(tǒng),因而可節(jié)省大量的內(nèi)存。
        有了不同大小的漢字,只要在短時間內(nèi)將之依次顯示在屏幕上,就能產(chǎn)生動畫效果。由于漢字的輸出是采用在屏幕上畫點的方法,所以速度很慢,簡直讓人無法忍受(其它的圖形輸出也存在這個問題)。最好是將圖形整個存儲,以便回顯時獲得較快的速度。C語言中有兩個函數(shù)getimage和putimage能完成此功能,其響應(yīng)速度是非常快的。但是由于這兩個函數(shù)都是將圖像保存在內(nèi)存中,而圖像的信息量往往很大,這就是說只能保存有限的圖像,不能滿足我們的要求。筆者在這里采用了用文件來存儲圖像,突破了內(nèi)存的限制,從理論上講可以存儲無限大。makeface程序用來產(chǎn)生封面,它創(chuàng)建兩個文件:pic為二進制圖像文件,保存一幅幅圖像,textpic為一輔助文件,保存每一幅圖像的長度。dispface用來顯示封面,將pic中的內(nèi)容依次讀到內(nèi)存,用putimage函數(shù)寫回屏幕上。dispface完成封面顯示的速度很快,如果將pic和textpic放在虛擬盤中,那么效果就更好了。需要說明的是,盡管采用用文件來存儲圖像可以不受內(nèi)存空間的限制,但由于getimage和putimage函數(shù)現(xiàn)將圖像放在內(nèi)存中,如果圖像很大,占用內(nèi)存太多時,程序?qū)l(fā)生不可預料的結(jié)果。所以在存儲較大的圖像時,應(yīng)采用分塊存儲,再分塊會顯的方法。一般來說一塊以不超過一屏的三分之一 (639*120)為好。
        本文僅提供一個簡單的例子,用makeface建立pic和textpic之后,執(zhí)行dispface程序,可在屏幕上看到藍地紅字的“漢字特技顯示”幾個字由大到小逐漸推遠,再由小到大逐漸拉近,最后定于屏幕中央。參照本文,加以擴充和完善,相信不難編出漂亮、醒目的動畫封面。
        本程序的運行環(huán)境為Turbo C 2.0,EGA/VGA顯示器。
        附:makeface.c,jputhzc和dispface.c
        /*jputhz.c*/
        /*調(diào)用格式:hzdisp(X列,Y行,橫擴倍數(shù),縱擴倍數(shù),顏色,要顯示的漢字)*/
        #include"stdio.h"
        #include"graphics.h"
        #include"string.h"
        #include"stdlib.h"
        void hzdisp (x,y,x-rate,y-rate,color,cstring)
        unsigned int x,y;
        float x-rate,y-rate;
        int color;
        char cstring[];
        {
        FILE *fp;
        register int n=0,i,j,k;
        register int x1,y1;
        char dot[73];
        char sec1,sec2;
        unsigned long index;
        fp=fopen("c:\\213\\hzk24s","rb");
        if(fp==NULL){printf("Can't open hzk\n");exit(1);}
        while(*cstring)}
        n++;
        sec1=cstring-160;
        sec2=(cstring+1)-160;
        index=(sec1-16)94+sec2-1;
        index=72;
        if(fseek(fp,index,0)){
        restorecrtmode();
        printf("File seek error !\n");
        fclose(fp);
        exit(1);
        }
        if((fread(dot,1,72,fp))!=72){cstring++;continue;}
        cstring++;
        cstring++;
        for(i=0;i<24;i++)
        for(j=0;j<3;j++)
        for(k=0;k<8;k++)
        if(dot[i3+j]>>(7-k)&1)
        {
        x1=x-rate(i+25n);
        y1=y-rate(j8+k);
        if((x-rate<=1)&&(y-rate<=1))putpixel(x1+x,y1+y,color);
        else{fillellipse(x1+x,y1+y,x-rate,y-rate);}
        }
        }
        fclose(fp);
        }
        /----------/
        #include"jputhz.c"
        FILE fp1,text;
        //
        savescreen(int x0,int y0,int x1,int y1)
        {
        unsigned int size;
        char bufs;
        unsigned int piclong;
        int ss;
        ss=s

        izeof(unsigned int);
        piclong=(unsigned int)malloc(ss);
        size=imagesize(x0,y0,x1,y1);
        piclong=size;
        fwrite(piclong,ss,1,text);
        bufs=(char)malloc(size);
        if(bufs==NULL)
        {puts("Memory alloc fail !/n");getch();return(0);}
        getimage(x0,y0,x1,y1,bufs);
        if(fwrite(bufs,size,1,fp1)!=1)
        {puts("fwrite fall");return(0);}
        free(bufs);
        }
        //

        main()
        {
        int drive=DETECT,mode,i;
        int dx,dy;
        float xr=2.5,yr=2.5;
        char aa[]="漢字特技顯示"/
        if((fp1=fopen("e:\\pic","w+b"))==NULL)
        {printf("Can not open file pic\n");
        exit(1);}
        if((text=fopen("e:\\textpic","w+b"))==NULL)
        {printf("Can not open file textpic\n");
        exit(1);}
        initgraph(&drive,&mode,"d:\\tc");
        setbkcolor(BLUE);
        cleardevice();
        for(i=10,i>1,i--)
        {
        dx=250-i20;
        dy=150-5i;
        cleardevice();
        hzdisp(dx,dy,xr,yr,12,aa);
        savescreen(dx,dy,dx+200xr,dy+24yr);
        xr-=0.25;yr-=0.25;
        }
        getch();
        fclose(fp1);
        fclose(text);
        closegraph();
        }
        /----------/
        #include"stdio.h"
        #include"graphics.h"
        FILE fp1,text;
        //
        restorescreen(int x0,int y0,unsigned int length)
        {
        char bufs;
        bufs=(char)malloc(length);
        if(bufs==NULL)
        {puts("malloc fail");exit(1);}
        fread(bufs,length,1,fp1);
        putimage (x0,y0,bufs,COPY-PUT);
        free(bufs);
        }
        //
        main()
        {
        int drive=DETECT,mode,i,j;
        long keep=0;
        int dx,dy;
        unsigned int aa[10];
        unsigned int ab;
        ab=aa;
        if((fp1=fopen("e:\\pic","rb"))==NULL)
        {printf("Can not open file pic\n");
        exit(1);}
        rewind(fp1);
        if((text=fopen("e:\\textpic","rb"))==NULL)
        {printf("Can not open file textpic\n");
        exit(1);}
        rewind(text);
        ab++;
        for(i=0;i<9;i++)
        {
        fread(ab++,sizeof(unsigned int),1,text);
        }
        initgraph(&drive ,&mode,"d:\\tc");
        setbkcolor(BLUE);
        setcolor(12);
        setfillstyle(SOLID-FILL,12);
        for(i=9;i>1;i--)
        {
        setvisualpage(0);
        setactivepage(1);
        cleardevice();
        restorescreen(40+(10-i)20,100+5(10-i),aa[10-i]);
        i--;
        setvisualpage(1);
        setactivepage(0);
        cleardevice();
        restorescreen(40+(10-i)20,100+5(10-i),aa[10-i]);
        }
        for(i=9;i>0;i--)
        {
        setvisualpage(0);
        setactivepage(1);
        cleardevice();
        for(j=1;j>i;j++)
        keep+=aa[j];
        fseek(fp1,keep,SEEK-SET);
        keep=0;
        restorescreen(40+i20,100+5i,aa[i]);
        i--;
        setvisualpage(1);
        setactivepage(0);
        cleardevice();
        for(j=1;j<i;j++)
        keep+=aa[j];
        fseek(fp1,keep,SEEK-SET);
        keep=0;
        restorescreen(40+i20,100+5i,aa[i]);
        }
        getch();
        fclose(fp1);
        fclose(text);
        closegraph();
        }

        【軟件封面特技顯示的語言實現(xiàn)】相關(guān)文章:

        都市頻道制作網(wǎng)的設(shè)計與實現(xiàn)05-29

        封面設(shè)計中的色彩美05-12

        動物學論文封面信息05-12

        基于minigui的網(wǎng)真機界面的實現(xiàn)08-05

        城市旅游網(wǎng)站的設(shè)計與實現(xiàn)論文(精選6篇)05-07

        利用電力線實現(xiàn)住宅智能化06-13

        如何通過內(nèi)部控制實現(xiàn)企業(yè)持續(xù)性發(fā)展05-21

        企業(yè)法律風險防范體系建立的原因及實現(xiàn)路徑08-06

        構(gòu)筑企業(yè)數(shù)據(jù)中心 實現(xiàn)理性分析決策06-04

        企業(yè)知識管理的實現(xiàn)技術(shù)和工具的電商論文05-02

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>