偷天换日让Silverlight支持图表转图片

开发 后端
Silverlight不支持打印,不支持将元素转图片,所以很麻烦。所以采取一种取巧的做法。目前我们用VisifireChart来作为图表呈现,这个开源软件同时支持Silverlight和WPF,Silverlight不能办到的事情,但WPF可以。

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实现可写位图
责任编辑:彭凡 来源: cnblogs
相关推荐

2009-02-17 14:22:40

Windows Emb

2009-12-30 15:08:04

Silverlight

2009-07-16 14:58:16

Windows Emb

2009-12-31 09:13:14

Silverlight

2009-12-30 14:44:04

Silverlight

2009-03-31 08:36:10

Windows MobSilverlight移动OS

2009-08-18 09:32:21

Silverlight

2009-12-31 14:25:19

Silverlight

2009-12-30 14:51:47

Silverlight

2009-02-19 09:42:01

SliverlightChrome微软

2021-11-15 18:00:39

JVMJavaAgent代理

2009-12-31 10:43:48

Silverlight

2009-09-24 14:36:25

Moblin操作系统

2022-03-14 12:26:45

微信图片开源

2010-10-12 13:57:43

GoogleWebP

2011-05-16 10:41:43

MYSQL

2020-10-14 12:29:51

开源图表 开发

2011-09-02 09:58:34

Silverlight

2009-07-30 14:40:15

Silverlight

2009-10-21 16:53:46

MAC OS XWindows
点赞
收藏

51CTO技术栈公众号