silverlight Visifire图表转图片--偷天换日的做法

本文介绍了一种在Silverlight中无法直接实现图表转图片的情况下,通过WPF客户端程序间接完成的方法。具体步骤包括:利用定时器检测指定目录中的XML文件,将其反序列化为图表并展示,然后截图保存为图片格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   silverlight不支持打印,不支持将元素转图片,所以很麻烦。所以采取一种取巧的做法.

目前我们用VisifireChart来作为图表呈现,这个开源软件同时支持silverlight和wpf,sl不能办到的事情,但wpf可以.

image

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

一.写一份wpf客户端程序

 

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

timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 2);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();

 

void timer_Tick(object sender, EventArgs e)
{
string[] files = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "chart");
if (files.Length > 0)
{
}
}


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

void timer_Tick(object sender, EventArgs e)
{
string[] files = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "chart");
if (files.Length > 0)
{
LoadXml(files[0]);
}
}
private void LoadXml(string xmlFile)
{
XmlDocument doc = new XmlDocument();
doc.Load(xmlFile);
StringReader stringReader = new StringReader(doc.InnerXml);
XmlReader xmlReader = XmlReader.Create(stringReader);
Chart chart = XamlReader.Load(xmlReader) as Chart;
chart.AnimationEnabled = false;
stringReader.Close();
xmlReader.Close();
this.Content=chart;
}


1.3呈现好以后进行截图

void timer_Tick(object sender, EventArgs e)
{
string[] files = System.IO.Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "chart");
if (files.Length > 0)
{
LoadXml(files[0]);
PrintPicture(files[0]);
}
}
private void PrintPicture(string fileName)
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
int Height = (int)this.ActualHeight;
int Width = (int)this.ActualWidth;
RenderTargetBitmap bmp = new RenderTargetBitmap(Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(this);
string file = "C://temp//a.jpg";
BitmapEncoder encoder;
encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (Stream stm = File.Create(file))
{
encoder.Save(stm);
}
File.Delete(fileName);
}), System.Windows.Threading.DispatcherPriority.Render);
}


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

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

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

前端

$.ajax({
type: "POST",
url: "ajaxServer.aspx",
data: "name=" + vChart.dataUri,
success: function(msg) {
alert("Success");
}
});

 

后端

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

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值