导航:首页 > 编程知识 > 编程图像动画怎么结合

编程图像动画怎么结合

发布时间: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();
}

阅读全文

与编程图像动画怎么结合相关的资料

热点内容
如何破坏所有的excel文件 浏览:766
数据大屏壁纸哪里可以找到 浏览:235
融学大数据APP 浏览:938
win10共享不了文件夹权限访问 浏览:808
qq头像可爱卡通超萌 浏览:804
院内文件具体有哪些 浏览:337
大数据公链 浏览:653
苹果ios描述文件下载 浏览:237
哪个网站卖动物 浏览:72
投标文件如何导入excel 浏览:775
计算器编程序怎么学 浏览:500
如何知道橱窗卖出的商品是哪个app的 浏览:56
大众宝来点火线圈数据流通道号是多少 浏览:981
手机后台网络怎么关闭 浏览:537
大数据安徽 浏览:563
iphone锁屏密码能破解吗 浏览:964
电信运营商大数据征信 浏览:699
怎么u盘里的文件打不开 浏览:97
如何发word文件怎么打开 浏览:176
惠普还原系统win10教程 浏览:167

友情链接