• <abbr id="kam3m"><form id="kam3m"></form></abbr>

    <u id="kam3m"><li id="kam3m"></li></u>

  • <table id="kam3m"></table>
    
    

    <u id="kam3m"></u>
    18禁无遮挡啪啪无码网站,真人无码作爱免费视频,2018年亚洲欧美在线v,国产成人午夜一区二区三区 ,亚洲精品毛片一区二区,国产在线亚州精品内射,精品无码国产污污污免费,国内少妇人妻偷人精品
    首頁 > 文章中心 > 正文

    多重透明無閃爍微機動畫設計

    前言:本站為你精心整理了多重透明無閃爍微機動畫設計范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

    摘要該文闡述了一種利用EGA/VGA上的位頁面結構及彩色調色板來開發一個可以處理數個快速圖像重疊及優美畫面質量的動畫結構。利用這種技術不僅會產生多重透明圖像效應,而且可用最快的速度畫圖。

    動畫設計一直是微型計算機編程人員的熱門話題,有不少編程人員利用C語言系列中的gentimage()和putimage()函數,在屏幕上不斷畫、擦,產生動畫效果。這樣產生的動畫有較強的閃爍感,而且動畫只能在一致的背景顏色下產生。有些同志采用直接視屏緩沖區讀、寫,這對16色的640×480色圖像,要同時處理分散在4個彩色頁面中的圖像,既復雜又費時,而且當圖像相交時很難避免相互影響的問題,因為這些部分在緩沖區中占用了相同的位。

    由于EGA/VGA的4個頁面可單獨被讀出及寫入,如果將圖像存于單一頁面,這樣就可以免去EGA/VGA中處理分散于各頁面中圖像的煩人問題??梢院苋菀滋幚?組圖像,而且在不同頁面中的圖像不會互相干擾,但這樣也產生了另一個問題:由于不同頁面中位的混合產生了新的色彩,相交部分看起來并不屬于任何圖像。我們所希望的是一個圖在另一個圖的前面,并且由前圖可以看到后圖的透明色。

    通過修改彩色調色板的值,完全可以達到上述效果。

    實際上,來自各頁面4位混合的點的顏色是由這4位所指的調色板值決定的。假設該點是從4色中選一色,而不是從16色中選一色,如果由彩色頁面0來的位為1,則選擇色彩0。

    如果由彩色頁面1來的位為1,則選擇色彩1。如果由彩色頁面2來的位為1,則選擇色彩2。如果由彩色頁面3來的位為1,則選擇色彩3。當不止一個位為1時,只來自最小號碼頁面的位決定顏色,其它頁面的位則忽略不用。若每個位均為0,則選擇背景顏色。我們所做的就是重新控制調色板寄存器使得來自最高次序頁面且值為1的位有色彩決定權。附表列出了上述調色板值的設置。

    這樣我們將可以得到4個顏色及一個背景色,而且也會定出一個簡單的圖像次序,頁面0中的圖像在其它頁面之前,頁面1中的圖像在頁面2、3圖像之前,依此類推,而且還有一種透明性,可以由前面圖像的缺口或邊緣看到背后圖像。最重要的是這符合不同圖像存于不同頁面的標準,可以快速處理圖像,從而消除動畫閃爍的感覺。

    下面的程序說明位頁面的動畫,它是利用WPS中SPT產生幾幅.SPT圖像,分別裝入不同位面,修改調色板值產生的重疊透明的動畫效果。讀者可以看到在前景(中文字幕)不動的情形下,背景(一幅較大的太空夜圖)緩緩移動,給人一種全新的動畫感覺。

    @@T5S12900.GIF;附表調色板值設置@@

    其實,只要對上面的想法稍作改進,便能產生更好效果的動畫。我們可以只用一、二個頁面來作動畫,空出其它的頁面處理色彩問題。例如:利用彩色頁面3作動畫,而用彩色頁面0、1、2來提供8種色彩的圖像。讀者不妨親自設計一下調色板的值。

    #include<stdio.h>

    #include<process.h>

    #include<alloc.h>

    #include<mem.h>

    #include<graphics.h>

    #include<dos.h>

    #include<conio.h>

    typedefenum{

    RIGHT,

    LEFT,

    UP,

    DOWN

    }dir-move;

    intmov-spt

    (unsignedchar*filename,

    dir-movedir,

    intstartx,

    intstarty,

    intpage,

    intforg);

    voidmain()

    {

    FILE*fp;

    structpalettetypepal,pall;

    unsignedcharname[30];

    inti,gdriver=DETECT,gmode,errorcode;

    initgraph(&gdriver,&gmode,"");

    errorcode=graphresult();

    if(errorcode!=gr0k)/*anerroroccurred*/

    {

    printf("Graphicserror:%s\n",grapherrormsg(errorcode));

    printf("pressanykeytohalt:");

    getch();

    exit(1);/*returnwitherrorcode*/

    }

    getpalette(&pal);

    pall.size=16;

    for(i=0;i<16;i++)

    pall.colors[i]=LIGHTBLUE;

    setallpalette(&pall);

    move-spt("f2.spt",UP,0,0,1,RED);

    move-spt("f3.spt",DOWN,0,0,2,YELLOW);

    move-spt("f4.spt",LEFT,0,0,3,BLUE);

    move-spt("f5.spt",RIGHT,0,0,4,7);

    getch();

    setallpalette(&pal);

    outpw(0x3c4,0x0f02);

    closegraph();

    }

    intmove-spt

    (unsignedchar*filename,

    dir-movedir,

    intstartx,

    intstarty,

    intpage,

    intforg)

    i,j,wid,hei,row,col,tmp;

    intoffset,offset1;

    structpalettetypepal,pall;

    unsignedcharbuffer[200],bit-page;

    unsignedcharfar*video;

    unsignedcharfar*mirror;

    FILE*fp;

    if((fp=fopen(filename,"rb"))==NULL)

    {

    printf("Cannotopenfile%s.\n",filename);

    exit(1);

    }

    bit-page=(0x01<<((page-1)%4));

    pall.size=16;

    getpalette(&pal);

    for(i=0;i<16;i++)

    {

    if(i&bit-page)

    pall.colors[i]=forg;<

    else

    pall.colors[i]=pal.colors[i];

    }

    setallpalette(&pall);

    if((mirror=(unsignedcharfar*)farmalloc(sizeof(unsignedchar)*384001))==NULL)

    {

    printf("Memoryallocationerror!\n");

    exit(1);

    }

    memset(mirror,0,384001);

    fseek(fp,341,SEEK-SET);

    fread(&wid,sizeof(int),1,fp);

    fread(&hei,sizeof(int),1,fp);

    if(wid>640||(hei>480))

    {

    printf("Sorry.Imagetoolarge.\n");

    exit(1);

    }

    fseek(fp,641,SEEK-SET);

    if((startx+wid)>640)startx=640-wid;

    if((starty+hei)>480)starty=480-hei;

    for(i=0;i<hei;i++)

    {

    offset=(i+starty)*80+startx/8;

    fread(buffer,sizeof(unsignedchar);wid/8,fp);

    for(j=0;j<wid/8;j++)

    buffer[j]=buffer[j]^0xff;

    movmem(buffer,(mirror+offset),wid/8);

    }

    outp(0x3c4,0x02);

    outp(0x3c5,bit-page);

    switch(dir)

    {

    caseRIGHT;

    for(col=0;col<640;col+=2)

    {

    tmp=(640-col)/8;

    for(i=0;i<480;i++)

    {

    offset=i*80;

    offset=i*80+tmp;

    vodeo=(unsignedcharfar*)MK-FP(0xa000,offset1);

    movmem((mirror+offset),video,(col)/8);

    }

    }

    break;

    caseLEFT;

    for(col=639;col>=0;col-=3)

    {

    for(i=0;i<480;i++)

    {

    offset1=(col+7)/8+i*80;

    offset=i*80;

    video=(unsignedcharfar*)MK-FP(0xa000,offset1);

    movmem((void*)(mirror+offset),(void*)video,(640-col)/8);

    }

    }

    break;

    caseUP;

    for(row=479;row>=0;row-=1)

    {

    for(i=0;i<480-row;i++)

    {

    offset1=row*80;

    offset=(479-row)*80;

    video=(unsignedcharfar*)MK-FP(0xa000,offset1);

    movmem((mirror+offset),video,80);

    }

    }

    break;

    caseDOWN:

    for(row=0;row<480;row+=1)

    {

    for(i=0;i<row+;i++)

    {

    offset1=row*80;

    offset=offset1;

    movmem((mirror+offset),(video+offset1),80);

    }

    }

    break;

    }

    farfree(mirror);

    fclose(fp);

    return(0);

    主站蜘蛛池模板: 二区三区亚洲精品国产| 亚洲欧美综合中文| 少妇xxxxx性开放| 毛片在线播放网址| 久久精品熟女亚洲av麻| 国产精品一起草在线观看| 国产精品视频一区二区不卡| 亚洲禁精品一区二区三区| 2020国产欧洲精品网站| 色综合天天综合网天天看片| 越南毛茸茸的少妇| 日本久久一区二区三区高清| 香蕉99国内自产自拍视频| 人妻精品动漫H无码中字| 色成人精品免费视频| 五月天免费中文字幕av| 午夜福利精品国产二区| 丝袜欧美视频首页在线| 国产一区二区三区精品综合| 日韩乱码视频一区二区三区| 午夜无码国产18禁| 婷婷五月综合激情| 亚洲人成网站77777在线观看 | 国产在线精品一区二区在线观看| 奇米影视7777久久精品| 亚洲最大的成人网站| 亚洲一二三区精品与老人| 人人人澡人人肉久久精品| 国产午夜精品福利久久| 国产av剧情亚洲精品| 日韩精品人妻中文字幕有码视频| 鲁丝片一区二区三区免费| 亚洲性一交一乱一伦视频| 另类专区一区二区三区| 免费乱理伦片在线观看| 久久水蜜桃亚洲av无码精品麻豆 | 成人自拍短视频午夜福利| 制服丝袜美腿一区二区| 国产精品一二三区蜜臀av| 国产精品中文字幕久久| 亚洲老熟女@tubeumtv|