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

   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的命名空间.也算是一个方法,对付图表生成图片是绰绰有余的.小技巧分享一下

Visifire是一个流行的数据可视化工具,提供了丰富的图表样例,以方便开发人员创建各种图表。以下是一些Visifire图表样例的简介。 1. 折线图:Visifire提供了多种折线图样例,可以展示时间序列数据、趋势分析等。开发人员可以根据自己的需求选择不同的样式和设置。 2. 柱状图:Visifire的柱状图样例适用于展示不同类别的数据比较。开发人员可以自定义柱状图的颜色、宽度和注释等属性。 3. 饼图:Visifire的饼图样例可以用于展示百分比数据或者不同类别之间的比例关系。开发人员可以设置饼图的大小、颜色和标签位置等。 4. 散点图:Visifire的散点图样例适合展示二维数据的相关性。开发人员可以设置散点图的标记形状、大小和颜色,以及添加趋势线等。 5. 热力图:Visifire的热力图样例可以用于展示二维数据的密度分布,特别适用于大量数据的可视化。开发人员可以自定义热力图的颜色渐变、数值范围和标签等。 6. 金字塔图:Visifire的金字塔图样例适用于展示层级结构或者阶段比例。开发人员可以调整金字塔图的颜色、尺寸和标签位置等。 7. 股票图:Visifire的股票图样例可以展示股票价格的变化趋势。开发人员可以设置股票图的时间范围、坐标轴刻度和数据点样式等。 总之,Visifire提供了众多图表样例,可以满足不同类型和需求的数据可视化。开发人员可以根据自己的需求选择合适的样例并进行自定义设置,以实现令人印象深刻且有吸引力的数据可视化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值