WEB开发网
开发学院软件开发VC VC.NET简单实现GIF动画 阅读

VC.NET简单实现GIF动画

 2006-07-23 11:34:36 来源:WEB开发网   
核心提示: ........不过嘛,呵呵,VC.NET简单实现GIF动画(2),大家仔细观察会发现,图片一闪一闪的,在属性页中删除所有文字即可自动删除代码}是不是也很简单啊?这样就把图像的闪烁问题也解决了,部分图片的效果如下,很不好看.....那怎么办呢?用双缓冲方法?非也,根本就不是一码事!图片闪铄

........不过嘛,呵呵,大家仔细观察会发现,图片一闪一闪的,很不好看.....那怎么办呢?用双缓冲方法?非也,根本就不是一码事!图片闪铄的问题几乎每天都能在论坛上看到,我在这里顺便说一下原因。数据量大时的闪动是因为计算机来不及载入数据,这时可以用双缓冲法;但是数据量不大时图片闪动是因为当程序置屏幕无效时框架会用背景色来擦除,这样就会闪一下,这时用双缓冲法就无效了。后者在MFC中我们可以响应OnEraseBkgnd()来解决;可是在.net中找不到这个消息,怎么办呢?其实只要避开屏幕无效就好了,请往下看:

private:
  Image *image;
  Graphics *p;//添加一个用来显示的变量
private: System::Void Form1_Load(System::Object * sender, System::EventArgs * e)
{
  image=Image::FromFile(L"测试图片.GIF");//按路径读入文件
  p=Graphics::FromHwnd(this->Handle);//按窗口句柄创建Graphics
  ImageAnimator::Animate(image, new EventHandler(this,OnPaintGIF));//启动动画
}
private: System::Void Form1_Closed(System::Object * sender, System::EventArgs * e)
{
  if(p) p->Dispose();
  if(image) image->Dispose();
}
private: System::Void OnPaintGIF(Object* o, EventArgs* e)
{
  p->DrawImage(image,0,0,image->Width,image->Height);//显示图片
  ImageAnimator::UpdateFrames();//将图片向后翻一页,由于OnPaintGIF()本身就是按时间启动的,所以UpdateFrames()要不要参数无所谓了
}
private: System::Void Form1_Paint(System::Object * sender, System::Windows::Forms::PaintEventArgs * e)
{
  //呵呵,这个可以不要了,在属性页中删除所有文字即可自动删除代码
}

是不是也很简单啊?这样就把图像的闪烁问题也解决了。部分图片的效果如下,图像文件打包在代码文件夹里了,代码包里的程序可以读取多种图片并且可以点击任意位置拖动

Tags:VC NET 简单

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接