PIE SDK云图动画导出

    云图动画,就是将一组序列图以动画的形式进行轮播,PIE SDK可以将云图动画以gif或avi格式进行导出,本文示例以云图动画导出gif为例,这样只需要点开gif文件就可以浏览云图动画。

    下面来介绍下实现的主要代码:

    要实现云图动画导出GIF步骤:

    1、加载序列时数据(可以查看打开长时间序列数据

    2、如何将云图动画导出GIF文件;

   云图动画由一帧帧的画面组合,也即是加载的序列图的图层数,将云图动画导出GIF,主要是先将每一帧画面保存为图片的格式,本文选择png格式,然后将保存完的图片通过第三方插件Gif.Components.dll生成GIF文件

 1 /// <summary>
 2 /// 云图动画导出GIF
 3 /// </summary>
 4 /// <param name="sender"></param>
 5 /// <param name="e"></param>
 6 private void tbn_Export2GIF_Click(object sender, EventArgs e)
 7 {
 8     if (m_AnimationLayer.GetAnimationState() != 1 && m_AnimationLayer == null) return;
 9     //1、设置保存GIF的路径                   
10     if (!this.Enabled) return;
11     SaveFileDialog saveFileDialog = new SaveFileDialog();
12     saveFileDialog.Title = "请选择保存路径";
13     saveFileDialog.Filter = "GIF Files|*.gif;";
14     if (saveFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
15     string filePath = saveFileDialog.FileName;
16 
17     DevExpress.Utils.WaitDialogForm waitDialogForm = new DevExpress.Utils.WaitDialogForm("正在生成GIF动画,请耐心等候……", "生成GIF");
18 
19     //2、将每一帧图都以png的格式保存在临时文件夹下
20     string filePath_D = Path.Combine(@"..\Data\Temp\Pic", DateTime.Now.ToString("yyyyMMddhhmmss"));
21     Directory.CreateDirectory(filePath_D);
22     Export2PicSilent(filePath_D);
23 
24     //3、将临时文件夹下的每一帧图片保存成GIF格式
25     string[] filePaths = Directory.GetFiles(filePath_D);
26     Parames_GeneralGIF para = new Parames_GeneralGIF();
27     para.WaitDialogFormA = waitDialogForm;
28     para.PicPaths = filePaths;
29     para.GIFPath = filePath;
30     GeneralGif(para);
31 }
32 
33 /// <summary>
34 /// 将每一帧动画保存为png图
35 /// </summary>
36 /// <param name="folder">存放图片的文件夹</param>
37 public void Export2PicSilent(string folder)
38 {
39     if (mapControlMain == null) return;
40     m_AnimationLayer.Stop();
41     Image image = null;
42     for (int i = 0; i <= m_AnimationLayer.LayerCount - 1; i++)
43     {
44         m_AnimationLayer.SetCurrentFrameIndex(i);
45         mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
46         System.Threading.Thread.Sleep(100);
47         image = mapControlMain.GetScreenshot();
48         image.Save(folder + "\\" + i + ".png");
49     }
50     m_AnimationLayer.Start();
51 }
52 
53 /// <summary>
54 /// 将帧图片生成GIF
55 /// </summary>
56 /// <param name="param"></param>
57 public void GeneralGif(object param)
58 {
59     if (param == null) return;
60     Parames_GeneralGIF param_GeneralGIF = param as Parames_GeneralGIF;
61     if (param_GeneralGIF == null) return;
62 
63     //生成gif图片实例化
64     Gif.Components.AnimatedGifEncoder gifEncoder = new Gif.Components.AnimatedGifEncoder();
65     gifEncoder.Start(param_GeneralGIF.GIFPath);
66     gifEncoder.SetDelay(300);//每帧播放时间
67     gifEncoder.SetRepeat(0); //-1:不重复,0:重复
68 
69     for (int i = 0; i < param_GeneralGIF.PicPaths.Length; i++)
70     {
71         gifEncoder.AddFrame(System.Drawing.Image.FromFile(param_GeneralGIF.PicPaths[i]));
72     }
73     gifEncoder.Finish();
74     param_GeneralGIF.WaitDialogFormA.Invoke(new Action(() =>
75     {
76         param_GeneralGIF.WaitDialogFormA.Close();
77     }));
78 }

代码路径:

项目名称

百度云盘地址下/PIE示例程序/13.小工具集锦/云图动画导出/AnimationLayerExportToGIF

数据路径

百度云盘地址下/PIE示例数据/栅格数据/05.长时间序列数据

视频路径

百度云盘地址下/PIE视频教程/13.小工具集锦/云图动画导出.avi

注意:

    在地图初始化的时候,图层树控件需要手动绑定地图控件:

    tocControlMain.SetBuddyControl(mapControlMain as PIE.Carto.IPmdContents);

效果图: 

 

 

 

转载于:https://www.cnblogs.com/PIESat/p/10307409.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值