<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 軟件封面特技顯示的語言實現

    時間:2024-08-22 14:23:42 計算機應用畢業論文 我要投稿
    • 相關推薦

    軟件封面特技顯示的語言實現

    軟件編制人員都希望自己的軟件能有一個漂亮的封面,如果能將圖形動畫技術應用到封面設計中,無疑會使封面更加美觀醒目,為應用軟件錦上添花。
    本文提供了一種封面設計技術,能模擬攝像機推拉鏡頭的效果,一推一拉,極具動態。
    我們知道,計算機圖形處理的數據量非常大,要求的速度也很快。因此往往將圖形處理軟件固化成硬卡(如2.13漢字系統的神筆CAD卡),有了圖形處理卡,對圖形應用的編程相對要容易些,然而,由于資金等問題,大多數的PC用戶都不具備此設備,難道說就只能望“卡”興嘆了么?回答當然是否定的,本文給出的就是一種純軟件方式的圖形動畫技術。它不要求額外的設備,只要有EGA/VGA適配器即可。
    為實現圖形的動畫效果,例如實現軟件封面漢字標題的推拉鏡頭效果,只要將一幅幅不同大小的漢字畫面在很短的時間內依次顯示在屏幕上即可。這里涉及到一個問題,那就是在顯示下一個畫面之前先要清屏,然后再寫下一個畫面。無論二者的速度多快,都將影響動畫效果,用戶能感受到寫屏和清屏的過程。這將大煞風景。本文采用“幕后組織”的方法解決了這一問題。在EGA/VGA的10H模式下,視頻緩沖區被分成二頁,一個頁為當前顯示頁,其內容即為屏幕上顯示的內容;一個為輸出活動頁,所有的視頻輸出都針對此頁,它可以是當前顯示頁,也可以不是。在Turbo C中提供了兩個函數,setactivepage和setvisualpage分別完成設置圖形輸出活動頁和設置圖形可見頁。如果我們將輸出活動頁設為非當前顯示頁,將一些不想讓用戶看到的處理過程放到活動頁這一“幕后”去處理。然后切換當前顯示頁和活動輸出頁,那么用戶看到的就是我們想讓其看到的內容了。
    為實現漢字標題的推拉鏡頭效果,需要在屏幕上顯示不同大小的漢字,許多漢字系統都提供了漢字的放大功能,但一則需要漢字系統的支持,且有特殊的控制命令,在C語言中不易調用;二則其放大和縮小的級差皆為整數倍,不能體現緩慢變化的過程。所以筆者編制了一個西文狀態下的漢字放大和縮小的函數,可用來完成漢字的任意放大和縮小(例如0.2倍)。同時,由于無須裝載漢字系統,因而可節省大量的內存。
    有了不同大小的漢字,只要在短時間內將之依次顯示在屏幕上,就能產生動畫效果。由于漢字的輸出是采用在屏幕上畫點的方法,所以速度很慢,簡直讓人無法忍受(其它的圖形輸出也存在這個問題)。最好是將圖形整個存儲,以便回顯時獲得較快的速度。C語言中有兩個函數getimage和putimage能完成此功能,其響應速度是非?斓。但是由于這兩個函數都是將圖像保存在內存中,而圖像的信息量往往很大,這就是說只能保存有限的圖像,不能滿足我們的要求。筆者在這里采用了用文件來存儲圖像,突破了內存的限制,從理論上講可以存儲無限大。makeface程序用來產生封面,它創建兩個文件:pic為二進制圖像文件,保存一幅幅圖像,textpic為一輔助文件,保存每一幅圖像的長度。dispface用來顯示封面,將pic中的內容依次讀到內存,用putimage函數寫回屏幕上。dispface完成封面顯示的速度很快,如果將pic和textpic放在虛擬盤中,那么效果就更好了。需要說明的是,盡管采用用文件來存儲圖像可以不受內存空間的限制,但由于getimage和putimage函數現將圖像放在內存中,如果圖像很大,占用內存太多時,程序將會發生不可預料的結果。所以在存儲較大的圖像時,應采用分塊存儲,再分塊會顯的方法。一般來說一塊以不超過一屏的三分之一 (639*120)為好。
    本文僅提供一個簡單的例子,用makeface建立pic和textpic之后,執行dispface程序,可在屏幕上看到藍地紅字的“漢字特技顯示”幾個字由大到小逐漸推遠,再由小到大逐漸拉近,最后定于屏幕中央。參照本文,加以擴充和完善,相信不難編出漂亮、醒目的動畫封面。
    本程序的運行環境為Turbo C 2.0,EGA/VGA顯示器。
    附:makeface.c,jputhzc和dispface.c
    /*jputhz.c*/
    /*調用格式:hzdisp(X列,Y行,橫擴倍數,縱擴倍數,顏色,要顯示的漢字)*/
    #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();
    }

    【軟件封面特技顯示的語言實現】相關文章:

    多種數制顯示的匯編語言編程實現03-19

    YUV轉換RGB顯示的實現03-07

    利用DVI實現雙屏幕超寬圖像顯示03-18

    嵌入式現場智能顯示系統的設計與實現03-07

    《幸運智多星》節目控制軟件的設計與實現03-18

    不依賴高點陣字庫實現屏幕漢字顯示03-03

    聯鎖圖表軟件設計的實現技術與結構03-06

    動態語音頻譜演示軟件的設計與實現03-07

    通用計件工資軟件的設計與實現03-18

    主站蜘蛛池模板: 国产精品片在线观看手机版| 国产精品日韩欧美一区二区三区| 日韩专区亚洲精品欧美专区| 成人国内精品久久久久一区 | 国产精品福利网站导航| 青草国产精品视频。| 亚洲精品理论电影在线观看| 精品一区二区三区在线观看视频 | 欧美亚洲综合免费精品高清在线观看 | 蜜桃麻豆www久久国产精品| 久久精品国产99国产电影网 | 国产精品视频免费一区二区| 国产精品麻豆高清在线观看 | 亚洲精品无码久久久久sm| 国产精品免费久久| 国产精品亚洲精品| 精品无码国产一区二区三区AV| 日韩AV毛片精品久久久| 国产亚洲精品无码专区| 2023国产精品自拍| 青青草国产精品| 四虎成人www国产精品| 国产精品久久久久久一区二区三区 | 鲸鱼传媒绿头鱼实验室之炮机测评日韩精品一级毛 | 99精品在线观看| 精品福利一区二区三区免费视频| 亚洲精品国产精品乱码不卞| 麻豆国内精品欧美在线| 久久精品成人免费观看97| 亚洲欧美精品AAAAAA片| 精品日韩欧美国产| 国产精品无码一区二区在线观一| 94久久国产乱子伦精品免费| 四虎国产精品永久地址51| 久久青草国产精品一区| 精品国产一区二区三区免费| A级精品国产片在线观看| 99国产精品无码| 精品久久香蕉国产线看观看亚洲 | 亚洲精品白浆高清久久久久久| 中文精品久久久久人妻|