PIE SDK云图动画导出

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

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

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

    一、加载序列时数据(能够查看打开长时间序列数据this

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

   云图动画由一帧帧的画面组合,也便是加载的序列图的图层数,将云图动画导出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     //一、设置保存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     //二、将每一帧图都以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     //三、将临时文件夹下的每一帧图片保存成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 }

代码路径:code

项目名称orm

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

数据路径htm

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

视频路径

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

注意:

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

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

效果图: 

 

 

相关文章
相关标签/搜索