Programming 版 (精华区)

发信人: kaola (我好困呀!), 信区: Programming
标  题: 用C语言的putimage函数实现动画的技巧  
发信站: 哈工大紫丁香 (2001年09月09日12:24:13 星期天), 站内信件

计算机图形动画显示的是由一系列静止图像在不同位置上的重现。本文通过实例介绍用
C语言的putimage函数来实现动画的技巧。
----------------------------------------------------------------------------
----
正文:
用C语言的putimage函数实现动画的技巧  
  计算机图形动画显示的是由一系列静止图像在不同位置上的重现。计算机图形动画
技术一般分为画擦法和覆盖刷新法两大类。画擦法是先画T时刻的图形,然后在T+△T时
刻把它擦掉,改画新时刻的图形是由点、线、圆等基本图元组成。这种一画一擦的方法
对于实现简单图形的动态显示是比较有效的。而当需要显示比较复杂的图形时,由于画
擦图形时间相对较长,致使画面在移动时出现局部闪烁现象,使得动画视觉效果变差。
所以,为提高图形的动态显示效果,在显示比较复杂的图形时多采用覆盖刷新的方法。

  在Turbo C 的图形函数中,有几个函数可完成动画的显示:
   getimage(int left,int top,int right,int bottom,void far*buf) 函数把
屏幕图形部分拷贝到由   buf所指向的内存区域。
   imagesize() 函数用来确定存储图形所需的字节数,所定义的字节数根据实际需
要可以定义得多一些。
  putimage()函数可以把getimage()存储的图形重写在屏幕上。利用putimage()函数
中的COPY_PUT项,在下一个  要显示的位置上于屏幕中重写图像,如此重复、交替地
显示下去,即可达到覆盖刷新的目的,从而实现动画显  示。由于图形是一次性覆盖
到显示区的,并在瞬间完成,其动态特性十分平滑,动画效果较好。
下面程序就是根据上述思路而实现的。程序运行时,将在屏幕上出现一个跳动的红色小
球。
#include <stdio.h>
#include<graphics.h>
#include<alloc.h>
#include<conio.h>
void main(void)
{
int driver=DETECT,mode;
int k=0,i,m,m1;
int maXX,mayy,size;
char *buf;
initgraph(&driver,&mode," ");
maXX=getmaXX();
mayy=getmaXy();
setfillstyle(SOLID_FILL,LIGHTGRAY);
bar(1,1,maXX,mayy);
setcolor(RED);
for(i=0;i<=10;i++)
circle(150,150,i);
size=imagesize(100,100,250,200);
if(size != -1)
buf=malloc(size);
if(buf)
{
getimage(100,100,250,200,buf);
m=120;m1=m;
do{
k=k+1;
if ((m1+100)>mayy)
{
for(m=m+30;m<maXX;m=m+30)
{
m1=m1-20;
putimage(m,m1,buf,COPY_PUT);
}
}
if((m+100)>maXX)
{
m=m-100;
for(m1=m1+100;m1>=1;m1=m1-10)
{
m1=m1-19;
putimage(m,m1,buf,COPY_PUT);
}
for(m=m;m>1;m=m-30)
{
m1=m1-17;
putimage(m,m1,buf,COPY_PUT);
}
}
m1=m1+20;
m=m+20;
putimage(m,m1,buf,COPY_PUT);
}while(k!=1000);
getch();
}
restorecrtmode();
}

--
               我怕水,我怕谁?

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.247.126]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:9.571毫秒