欢迎光临
我们一直在努力

laiyiling-.NET教程,评论及其它

建站超值云服务器,限时71元/月

多页图像是指图像中包含有多个图形页。每页可以看作图像帧。这些图像帧通过连续的显示就形成了一副动画。比如gif文件。

  gdi+的image对象提供了直接的对gif、tif文件格式的支持。调用image对象的成员函数getframedimensionscount可以得到image对象的dimension数。每个dimension通过一个guid标示。函数getframedimensionslist可以返回所有dimension的guid值。第一个guid值保存在函数参数pdimensionsids数组的索引0处。getframecount可以得到每个dimension里有多少个frame。简单示例代码:
   image* image = new image(l”multiframe.gif”);
   uint count = 0;
   count = image->getframedimensionscount();
   guid *pdimensionids=(guid*)new guid[count];
   image->getframedimensionslist(pdimensionids, count);
   wchar strguid[39];
   stringfromguid2(pdimensionids[0], strguid, 39);
   uint framecount=image->getframecount(&pdimensionids[0]);
   delete []pdimensionids;   
   并不是所有的gif文件都是含有多帧的,所以我们在显示gif的时候可以通过上面的代码根据framecount的值判断这个gif文件是否有多个帧。
   在确认有多个帧的图像以后,还要得到每帧图像显示的间隔时间。gdi+的image对象提供了 getpropertyitem获取图像的属性。getpropertyitem函数需要用户传递数据返回缓冲区和大小。所以在使用前先用getpropertyitemsize得到需要的缓冲区大小,分配空间后再取得属性数据。  
   //propertytagframedelay是gdi+中预定义的一个gig属性id值,表示标签帧数据的延迟时间
  int size = getpropertysize(propertytagframedelay);
       propertyitem* pitem = null;
       pitem = (propertyitem*)malloc(size);
       image->getpropertyitem(propertytagframedelay,size,pitem);
       这样就把所有和propertytagframedelay属性相关的数据取到了pitem中。然后通过pitem访问结构中的value。每两帧图像之间的间隔时间是不一定相同的,所以还需要得到当前正显示的帧图像的索引值。最后调用image对象的drawimage函数把每帧图像画出来。简单代码如下:
int     fcount=0;
//guid的值在显示gif为framedimensiontime,显示tif时为framedimensionpage
guid    guid = framedimensiontime;
while(thue)
{
        graphics gh(hdc); //hdc是外部传入的画图dc
        gh.drawimage(image,0,0,image->getwidth(),image->getheight());
        //重新设置当前的活动数据帧
        image->selectactiveframe(&guid,fcount++);
        if(fcount == framecount) //framecount是上面getframecount返回值
               fcount= 0;     //如果到了最后一帧数据又重新开始
        //计算此帧要延迟的时间
        long lpause = ((long*)pitem->value)[fcount]*10;
        sleep(lpause);         //这里简单使用了sleep
}
赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » laiyiling-.NET教程,评论及其它
分享到: 更多 (0)