偷天换日让Silverlight支持图表转图片
创始人
2024-04-12 10:20:28
0

VisifireChart数据图

 所以实现图表转图片可以分一下几步走.

一.写一份WPF客户端程序

思路很简单

1.1定义一个定时器,然后检测某目录的xml文件,这里暂定目录名字为chart

  1. timer = new DispatcherTimer();  
  2. timer.Interval = new TimeSpan(0, 0, 2);  
  3. timer.Tick += new EventHandler(timer_Tick);  
  4. timer.Start();  
  5. void timer_Tick(object sender, EventArgs e)  
  6. {  
  7. string[] files = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "chart");  
  8. if (files.Length > 0)  
  9. {  
  10. }  

1.2如果有的话,则进行反序列化成Chart对象进行呈现

  1. void timer_Tick(object sender, EventArgs e)  
  2. {  
  3. string[] files = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "chart");  
  4. if (files.Length > 0)  
  5. {  
  6. LoadXml(files[0]);  
  7. }  
  8. }  
  9. private void LoadXml(string xmlFile)  
  10. {  
  11. XmlDocument doc = new XmlDocument();  
  12. doc.Load(xmlFile);  
  13. StringReader stringReader = new StringReader(doc.InnerXml);  
  14. XmlReader xmlReader = XmlReader.Create(stringReader);  
  15. Chart chart = XamlReader.Load(xmlReader) as Chart;  
  16. chart.AnimationEnabled = false;  
  17. stringReader.Close();  
  18. xmlReader.Close();  
  19. this.Content=chart;  

1.3呈现好以后进行截图

  1. void timer_Tick(object sender, EventArgs e)  
  2. {  
  3. string[] files = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "chart");  
  4. if (files.Length > 0)  
  5. {  
  6. LoadXml(files[0]);  
  7. PrintPicture(files[0]);  
  8. }  
  9. }  
  10. private void PrintPicture(string fileName)  
  11. {  
  12. this.Dispatcher.BeginInvoke(new Action(() => 
  13. {  
  14. int Height = (int)this.ActualHeight;  
  15. int Width = (int)this.ActualWidth;  
  16. RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);  
  17. bmp.Render(this);  
  18. string file = "C:\\temp\\a.jpg";  
  19. BitmapEncoder encoder;  
  20. encoder = new JpegBitmapEncoder();  
  21. encoder.Frames.Add(BitmapFrame.Create(bmp));  
  22. using (Stream stm = File.Create(file))  
  23. {  
  24. encoder.Save(stm);  
  25. }  
  26. File.Delete(fileName);  
  27. }), System.Windows.Threading.DispatcherPriority.Render);  

1.4转换成图片完毕则删除此xml文件

二.将编译好的wpf程序放置在web根目录,然后启动此程序

三.使用ajax交互将当前显示出来的xml传送到chart目录下

前端

  1. $.ajax({  
  2. type: "POST",  
  3. url: "ajaxServer.aspx",  
  4. data: "name=" + vChart.dataUri,  
  5. success: function(msg) {  
  6. alert("Success");  
  7. }  
  8. }); 

后端

拷贝xml文件或者其他处理方式把xml弄到chart目录下

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3. File.Copy(Server.MapPath(this.Request["name"]), Server.MapPath("../chart/" + this.Request["name"]));  

注意点:转换的时候注意wpf和silverlight的命名空间.也算是一个方法,对付图表生成图片是绰绰有余的.小技巧分享一下

【编辑推荐】

  1. 微软7月发布Silverlight 3最终版 新增50多项功能
  2. 浅谈Silverlight 3中在线与离线状态检测
  3. Silverlight 3数据存取功能简析
  4. 图解Silverlight 3的7个新功能
  5. 用Silverlight 3的位图API实现可写位图

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...