云图动画,就是将一组序列图以动画的形式进行轮播,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);
效果图: