導航:首頁 > 編程知識 > 編程圖像動畫怎麼結合

編程圖像動畫怎麼結合

發布時間:2022-09-19 11:43:33

① 怎麼用C語言編程實現一個簡單的動畫

1.可以考慮用Turbo C的繪圖函數(附加graphic.h庫)或者用opengl+glut等來實現。2.前者一般就是純粹的畫點畫線。網上也能找到教程。3.主要說一下後者。可以導入圖片,並且二維、三維動畫都可以做,甚至是用來開發游戲。後者可以用vc6.0或者vs2005來開發。跨平台。參考教程: http://www.owlei.com/DancingWind/看你的描述要做比較偏數學的東西,那你自己得弄明白如何去實現繪制演算法。要實現的動畫本身而搭的基本框架不會很復雜的,可能100行代碼都不用。4.另外還有opencv、GDI之類的可能更適合二維圖像處理庫,但我自己不是很了解了,你也可以查一查用哪種繪圖庫比較適合你。

② 語言編程與游戲中的圖像/動畫是如何結合的,操控是怎樣實現的

開頭和結尾的動畫是做出來的視頻,加進去就可以了~
游戲過程中,有些場景是用3Dmax做出來,然後導入到程序里,有些是視頻加進去的

③ 如何利用C語言實現動畫

基於擦除法的C語言動畫設計與實現

Movie design implement in C language base on erasure way

東華理工學院計算機與通信系姜林何月順江西南昌330013

摘要:

本文介紹了程序設計語言中動畫設計的原理,在C語言中的動畫設計常用方法,並提出了在C語言中新的動畫設計方法――擦除法。闡述擦除法動畫設計的原理,並通過一個具體的實例詳細介紹了這種方法的設計實現,文中末尾總結了擦除法動畫設計的優點及適用的范圍。

關鍵字:擦除法;C語言;TurboC2.0;動畫設計;原理;實現

中圖分類號:TP312

Summary:

Through the principium of movie design in program design language, the thesis present movie design general way in C language, and bring forward new movie design way――erasure . The thesis also expatiate the principium of erasure way, particular describe the design implement of erasure by a instance. The end summarize the excellence and range of erasure way.

Key words: erasure way; C language ; TurboC 2.0; movie design; principium; implement

0. 引言

動畫技術是計算機圖形學中的重要內容,它廣泛用於游戲娛樂,輔助教學,科學實驗模擬等計算機輔助設計。用於動畫設計的程序設計語言有多種,並且有多種方法。其中C語言程序設計又廣泛用於各種軟體開發項目中。因此,掌握C語言的動畫設計方法對於軟體開發很有必要。

1. 程序設計中動畫原理

程序設計中動畫設計的原理類似電影的方法,它利用人的視覺具有暫留的生理特點,即人眼對動態圖像的變化僅能分辨出時間間隔為25毫秒左右的變化,如果圖像變化太快,則人眼無法分辨。在程序設計中我們可以在屏幕上畫出一張圖像,而將這張圖像在不同時間出現,然後一張張快速(時間間隔小於25毫秒)呈現在屏幕上,從視覺效果上看這些畫面就如同電影在連續變化一樣,給人以動的視覺感覺。

2. C語言動畫設計常用方法C語言常用動畫設計方法[1]:

2.1利用動態開辟圖視口方法

在位置動態變化,但大小不變的圖視口中(用setviewpot()函數[2]),設置固定圖形,這樣呈現在觀察者面前的是當前圖視口位置在動態變化,因而在屏上看到的圖像就好像在動態變化一樣。

2.2 利用顯示頁和編輯頁交替變化

將當前顯示頁和編輯頁分開(用setvisualpage()和setactivepage()函數),在編輯頁上

畫好圖形後,立即令該頁變為顯示頁,然後在上次顯示頁上進行畫圖,畫好後,再交換,如此反復,在觀察者的視覺上,就出現了動畫的效果。

2.3 利用畫面存儲再重放的方法

如同製作幻燈片一樣,將整個動畫過程變成一個個片斷,然後存儲到顯示緩沖區內,當把它們按順序重放到屏幕上時,就出現了動畫效果。

2.4 直接對圖像動態存儲器進行操作

利用顯示適配器上控制圖像顯示的各種寄存器和圖像存儲器VRAM,對其進行直接操作和控制,從而可以高效快速的實現動畫效果。

上述4種方法均可以實現動畫效果,但其操作比較復雜,且在程序中要對圖像不斷進行存取操作,這需要耗費大量內存資源。下面的擦除法動畫設計可以解決上述問題。

3. 擦除法動畫設計原理

擦除法動畫設計方法在很多的動畫製作工具(如flash)中大量使用,但在程序設計中卻鮮有人用。它的設計原理是:利用同色原理,當圖形色與背景色相同時人眼不能感知。在動畫設計中,當在一個位置畫了一張圖像時,使圖像色與背景色相異,然後再到另一個位置畫一張圖像並使圖像色與背景色也相異,此時將先前畫的圖像在原位置再畫一張,並使圖像色與背景色相同,這樣人眼只能看到新畫的一張圖像而看不到先前畫的圖像,從而先前畫的圖像感覺被擦除了。這樣連續畫多張圖像並在每畫一張新的圖像,將原來的圖像擦除,從而在觀察者來看就實現了動畫的效果。

4. 擦除法的動畫設計實現

下面以一個上下翻滾的圓作為一個例子來講解在TurboC2.0開發環境下用C語言來實現動畫的設計過程,其中動畫設計的方法是擦除法。具體的實現步驟如下:

4.1 TC的圖形系統的初始化

TurboC2.0為用戶提供了一個功能強大的畫圖軟體庫,它包括圖形庫文件(graphics.lib),圖形頭文件(graphics.h)和許多圖形顯示器的驅動程序。在TurboC2.0開始進行圖形設計前必須對之進行初始化,使系統知道要用什麼類型的圖形顯示器的驅動程序,採用什麼模式的圖形方式,以及該適配器驅動程序的尋找路徑名。這個初始化的函數是initgraph()。在本程序中的初始化如下:
gdriver=DETECT;
initgraph(&gdriver, &gmode, "");//圖形顯示器、顯示模式、路徑自動檢測

4.2 畫圖
setcolor(LIGHTRED);//設置圓的線條顏色為淡紅色

setlinestyle(0,0,1);//設置線條為形狀為實線,線寬為一點寬
setfillstyle(1, 10);//設置圓的填充式樣為以實填充,填充色為淡綠色
circle(300, 10+10*y,15);//畫一個圓心在坐標(300,10+10y),半徑為15的圓
這個地方我們需要畫一個圓(用draw()函數實現),並且設置圓的圓周線條的顏色(用setcolor()函數),設置線條類型(用setlinestyle()函數),設置圓的填充色和填充模式(用setfillstyle()函數),設置圓的填充色(用floodfill()),最後是畫圓(用circle()函數)。在本程序(draw()函數)中的代碼如下:
floodfill(300, 10+10*y, 12);//給圓填充如上stfillstyle中的淡綠色

為了實現擦除操作需在同一個位置再畫一個圓(用clear()函數實現),該操作只需將上面的畫圓函數(draw()函數)改動兩個設置即可,如下示:

setcolor(BLUE);//設置圓的線條顏色為藍色(與背景色相同)
setfillstyle(1, 10);//設置圓的填充式樣為以實填充,填充色為淡綠色

4.3 動畫實現

本部分是核心部分,先設置背景色為藍色(用setbkcolor()函數),再在屏幕上畫一個填充色為淡綠色的圓(draw()函數)。設置一個循環控制語句實現在屏幕上不同的位置畫圓,同時在每畫一個圓後作一個時間的延遲(用delay()函數),再在延遲後實現擦除操作,即調用clear()函數。其流程圖及代碼如下:
setbkcolor(BLUE);//設置背景色為藍色

for(j=20;j>0;j=j-4)//控制動畫實現的次數為20次

{ for(i=j;i<30;i++)//實現動畫從上向下閃爍

{ draw(i);//畫圓

delay(100000);//延遲0.1秒

clear(i);//擦除已畫的圓

}

for(i=30;i>j;i--)//實現動畫從下向上閃爍

{ draw(i);//畫圓

delay(100000);//延遲0.1秒

clear(i);//擦除已畫的圓

}

}

動畫實現後的最後效果圖如下示。

4.4 關閉圖形系統

當圖形實現結束後需要關閉圖形系統,利用函數closegraph()即可實現。

5. 總結

擦除法動畫設計原理易於理解,便於操作。並且它的程序運行所需內存空間也比上述四種常用方法要少得多,因為它在程序執行過程中不需將圖形存入內存再從內存調出,這節省了大量的內存空間。如果程序運行在內存緊張的環境中,如嵌入式系統中,這種方法尤其適用

④ 如何編程動態生成GIF圖片

jpg是靜態的,你說的是gif格式,有很多軟體可以做GIF動畫的。
初學者可以使用GIF Movie Gear做。

http://www.8080.net/html/200412/p291754300.html

GIF Movie Gear是一款異常小巧的GIF製作軟體。僅僅2M不到的一個小軟體卻具備了GIF製作軟體所需要的所有常見功能。另外它還可以在各種圖像以及AVI文件之間隨意轉換。下面我們一起來領略一下GIF Movie Gear的強大功能。

動畫實際上是連續的靜態畫面,因此在製作動畫之前,我們要首先准備好動畫播放過程中的一系列單幀圖像。可以先利用其它平面繪圖軟體製作好單幀圖像之後再利用GIF Movie Gear來將其製作成GIF動畫。

打開GIF Movie Gear之後我們看到的主界面上有「打開」以及「插入幀」的按鈕,

「打開」按鈕的作用等同於「文件」菜單下「導入」選項的功能。在「導入」選項之中可以看到GIF Movie Gear支持的文件格式還是相當之多的。

我們可以將這些所支持格式的圖片文件合並或者製作成動態的GIF圖片。
一次選擇多張已經製作好的單幀圖像。

導入單幀圖像後的界面。此時也可以通過「幀」菜單對單幀的畫面進行調整和編輯。

點擊工具欄的三角形播放按鈕即可預覽動畫。

經過預覽會發現此時的動畫速度過快,可以從「動畫」菜單打開「屬性設置」。在「全局幀」選項卡裡面將播放速度設置為50每幀持續1/100秒,也就是說每幀的顯示時間為50毫秒,即半秒的時間。

另外在「屬性設置」的「動畫」選項卡里,還可以對播放次數等做出設置,當播放次數設置為0的時候,意即循環播放。

對動畫設置好之後並且預覽滿意之後即可保存為GIF動畫。實際上GIF Movie Gear對於GIF以及圖片格式的轉換非常之簡單,在保存的時候選擇相應的格式即可。

OK!大功告成了:

GIF Movie Gear亦可以直接導入AVI視頻格式的文件將其轉換為GIF格式,從「文件」菜單「導入」AVI文件,經過一段處理過程之後,我們可以在軟體界面里看到AVI視頻文件被分解成一個個單幀圖像,並可以作為GIF格式預覽。一般來說,為了避免生成的GIF圖片文件體積過於龐大,我們只會截取極少的一部分來製作成GIF圖片,選取一個片斷的連續單幀,將其它的多餘幀刪除。

一般AVI影片的原始解析度都比較大,在「動畫」菜單選擇「調整大小」,即可以對最終生成的GIF解析度作精確調整。調整之後預覽滿意之後即可將文件另存為GIF格式的圖片。

為了GIF圖片便於瀏覽,我們要避免太復雜的幀數過多的圖像造成圖片體積過大,另外在保存之前可以利用「動畫」菜單的「精簡顏色」和「優化動畫」兩個功能來縮減GIF圖片的體積。

===================
一般的人可以使用UGA

個人認為Ulead GIF Animator v5.05 不錯!!!
友立公司出版的動畫GIF製作軟體,內建的Plugin有許多現成的特效可以立即套用,可將AVI文件轉成動畫GIF文件,而且還能將動畫GIF圖片最佳化,能將你放在網頁上的動畫GIF圖檔減肥,以便讓人能夠更快速的瀏覽網頁。
http://www.crsky.com/soft/14.html

=======================
高手可以使用photoshop中的Adobe ImageReady 。

骨灰都用Fireworks MX 2004 做。

Macromedia Flash MX2004 7.01簡體中文版(矢量動畫)

Flash是互動式矢量圖和Web動畫的標准。網頁設計者使用Flash能創建漂亮的、可改變尺寸的、以及極其緊密的導航界面、技術說明以及其他奇特的效果。完全漢化版,實用於測試正式版!本次更新的內容:漢化95%的函數,更改部分不確切的地方,希望你使用的時候有什麼問題,能及時反映給我好嗎?Flash MX 2004中的編程特性有很大突破,令人有耳目一新的感覺,Developer甚至可以掉去Tool Bar繪圖工具和Timeline

軟體大小:77279KB
軟體語言:簡體中文
運行環境:Win9x/Me/NT/2000/XP
下載頁面:http://www.onlinedown.net/soft/9866.htm

⑤ 有什麼軟體可以把動態圖片和靜態的圖片拼在一起

photoshop cs6程序可以把動態圖片和靜態的圖片拼在一起、

1、首先打開ps cs6應用程序,

⑥ 如何用C語言編寫有圖形動畫類的程序

C做圖形很不好使,效果也次。建議用turbo c , 它有個graphic.h 頭文件 ,聲明了很多圖形函數,可以直接用,具體用法查資料慢慢看吧。 我給你一個常式吧(用turbo c 編譯) :

#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define N 200
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戲速度自己調整*/
struct Food
{
int x;/*食物的橫坐標*/
int y;/*食物的縱坐標*/
int yes;/*判斷是否要出現食物的變數*/
}food;/*食物的結構體*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的節數*/
int direction;/*蛇移動方向*/
int life;/* 蛇的生命,0活著,1死亡*/
}snake;
void Init(void);/*圖形驅動*/
void Close(void);/*圖形結束*/
void DrawK(void);/*開始畫面*/
void GameOver(void);/*結束游戲*/
void GamePlay(void);/*玩游戲具體過程*/
void PrScore(void);/*輸出成績*/
/*主函數*/
void main(void)
{
Init();/*圖形驅動*/
DrawK();/*開始畫面*/
GamePlay();/*玩游戲具體過程*/
Close();/*圖形結束*/
}
/*圖形驅動*/
void Init(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
cleardevice();
}
/*開始畫面,左上角坐標為(50,40),右下角坐標為(610,460)的圍牆*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設置線型*/
for(i=50;i<=600;i+=10)/*畫圍牆*/
{
rectangle(i,40,i+10,49); /*上邊*/
rectangle(i,451,i+10,460);/*下邊*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /*左邊*/
rectangle(601,i,610,i+10);/*右邊*/
}
}
/*玩游戲具體過程*/
void GamePlay(void)
{
randomize();/*隨機數發生器*/
food.yes=1;/*1表示需要出現新食物,0表示已經存在食物*/
snake.life=0;/*活著*/
snake.direction=1;/*方嚮往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇頭*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*節數*/
PrScore();/*輸出得分*/
while(1)/*可以重復玩游戲,壓ESC鍵結束*/
{
while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/
{
if(food.yes==1)/*需要出現新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;

while(food.x%10!=0)/*食物隨機出現後必須讓食物能夠在整格內,這樣才可以讓蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*畫面上有食物了*/
}
if(food.yes==0)/*畫面上有食物了就要顯示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}

for(i=snake.node-1;i>0;i--)/*蛇的每個環節往前移動,也就是貪吃蛇的關鍵演算法*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右,左,上,下四個方向,通過這個判斷來移動蛇頭*/
switch(snake.direction)
{
case 1:snake.x[0]+=10;break;
case 2: snake.x[0]-=10;break;
case 3: snake.y[0]-=10;break;
case 4: snake.y[0]+=10;break;
}

for(i=3;i<snake.node;i++)/*從蛇的第四節開始判斷是否撞到自己了,因為蛇頭為兩節,第三節不可能拐過來*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();/*顯示失敗*/
snake.life=1;
break;
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
snake.y[0]>455)/*蛇是否撞到牆壁*/
{
GameOver();/*本次游戲結束*/
snake.life=1; /*蛇死*/
}
if(snake.life==1)/*以上兩種判斷以後,如果蛇死就跳出內循環,重新開始*/
break;
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以後*/
{
setcolor(0);/*把畫面上的食物東西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10);
snake.x[snake.node]=-20;snake.y[snake.node]=-20;
/*新的一節先放在看不見的位置,下次循環就取前一節的位置*/
snake.node++;/*蛇的身體長一節*/
food.yes=1;/*畫面上需要出現新的食物*/
score+=10;
PrScore();/*輸出新得分*/
}
setcolor(4);/*畫出蛇*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最後一節*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循環*/
break;
key=bioskey(0);/*接收按鍵*/
if(key==ESC)/*按ESC鍵退出*/
break;
else
if(key==UP&&snake.direction!=4)
/*判斷是否往相反的方向移動*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4;
}/*endwhile(1)*/
}
/*游戲結束*/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/*輸出成績*/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/*圖形結束*/
void Close(void)
{
getch();
closegraph();
}

閱讀全文

與編程圖像動畫怎麼結合相關的資料

熱點內容
蘋果數據線頭歪了 瀏覽:135
ghostwin764位系統鏡像文件 瀏覽:443
感測器視頻教程下載 瀏覽:95
flash源文件賀卡下載 瀏覽:434
如何提高網路扶貧的效果 瀏覽:654
飛車軟體文件夾叫什麼 瀏覽:242
刷ec用什麼編程器 瀏覽:765
方菱數控u盤文件格式 瀏覽:260
編程為什麼輸出兩個變數 瀏覽:490
衛星大鍋2017用升級嗎 瀏覽:113
玉米win10系統下載 瀏覽:134
fgo技能升級減cd嗎 瀏覽:129
什麼記賬app免費好用 瀏覽:441
網路檢測可以檢測到什麼 瀏覽:504
sip協議教程 瀏覽:832
編程哪裡可以接項目 瀏覽:119
孤島驚魂win10 瀏覽:246
網路HRV是什麼意思 瀏覽:918
word框中打勾 瀏覽:577
tcl筆試題java 瀏覽:467

友情鏈接