|
|
 |
ASP.NET动态创建图象 |
热 ★★★★ |
|
ASP.NET动态创建图象 |
|
作者:闵涛 文章来源:闵涛的学习笔记 点击数:3253 更新时间:2009/4/23 10:48:39  |
|
|
bsp;= Color.White; Font myFont = new Font("Arial", 10); this.DrawChart(g, r, myBackColor, myForeColor, myFont, chartData); return newBitmap; } public void DrawChart(Graphics g, Rectangle r, Color backColor, Color foreColor, Font baseFont, ChartData chartData) { this.chartData = chartData; this.g = g; this.r = r; this.backColor = backColor; this.foreColor = foreColor; this.baseFont = baseFont; this.legendFont = new Font(baseFont.FontFamily, (baseFont.Size * 2/3), baseFont.Style | FontStyle.Bold); g.SmoothingMode = SmoothingMode.AntiAlias; CalculateChartDimensions(); DrawBackground(); InternalDrawChart() ; }
private void CalculateChartDimensions() { right = r.Width - 5; top = 5 * baseFont.Size ; bottom = r.Height - baseFont.Size * 2; tickCount = chartData.YMin ; yCount = (chartData.YMax-chartData.YMin) / chartData.YTickSize ; hspacing = (bottom-top) / yCount; vspacing = (right) / chartData.XAxisTitles.Length; //Left depends on width of text - for simplicities sake assume that largest yvalue is the biggest //Take into account the first X Axis title float maxYTextSize = g.MeasureString(chartData.YMax.ToString(), baseFont).Width; float firstXTitle = g.MeasureString(chartData.XAxisTitles[0], baseFont).Width; left = (maxYTextSize > firstXTitle) ? maxYTextSize : firstXTitle ; left = r.X + left + 5 ; //Calculate size of legend box float maxLegendWidth = 0 ; float maxLegendHeight = 0 ; //Work out size of biggest legend foreach (ChartLine cl in chartData.Lines) { float currentWidth = g.MeasureString(cl.Title, legendFont).Width; float currentHeight = g.MeasureString(cl.Title, legendFont).Height; maxLegendWidth = (maxLegendWidth > currentWidth) ? maxLegendWidth : currentWidth ; maxLegendHeight = (maxLegendHeight > currentHeight) ? maxLegendHeight : currentHeight ; } legendRect = new RectangleF(r.X+2, r.Y+2, maxLegendWidth + 25 + 5, ((maxLegendHeight+2)*chartData.Lines.Count) + 3) ; } private void DrawBackground() { LinearGradientBrush b = new LinearGradientBrush(r, Color.SteelBlue, backColor,LinearGradientMode.Horizontal); g.FillRectangle(b, r); b.Dispose(); } private void InternalDrawChart() { DrawGrid() ; foreach (ChartLine cl in chartData.Lines) { DrawLine(cl); } DrawLegend() ; //Draw time on chart string timeString = "Generated:" + DateTime.Now.ToLongTimeString() ; SizeF textsize = g.MeasureString(timeString,baseFont); g.DrawString(timeString, baseFont, new SolidBrush(foreColor), r.Width - textsize.Width - 5, textsize.Height * 2 / 3) ; } private void DrawGrid() { Pen gridPen = new Pen(chartData.GridColor) ;
//Vertical - include tick desc''''s if (chartData.ShowVGridLines) { for (int i = 0 ; (vspacing * i) < right; i++) { float x = left + (vspacing *i); string desc = chartData.XAxisTitles[i]; g.DrawLine(gridPen, x,top,x,bottom +(baseFont.Size*1/3)); SizeF textsize = g.MeasureString(desc,baseFont); g.DrawString(desc, baseFont, new SolidBrush(chartData.GridColor), x-(textsize.Width/2), bottom + (baseFont.Size*2/3)) ;  上一页 [1] [2] [3] [4] [5] 下一页 [C语言系列]NET 中C#的switch语句的语法 [系统软件]托拽Explore中的文件到VB.net的窗口 [系统软件]Boost库在XP+Visual C++.net中的安装 [常用软件]新配色面板:Paint.Net3.0RC1官方下载 [常用软件]用内建的“Net Meeting”聊天 [VB.NET程序]Henry的VB.NET之旅(三)—共享成员 [VB.NET程序]Henry的VB.NET之旅(二)—构造与析构 [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体 [VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET) [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
|
|
| 教程录入:mintao 责任编辑:mintao |
|
|
上一篇教程: 如何在ASP.Net中取得环境变量的值 下一篇教程: VB6.0使用ADO对象连接数据库: |
|
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网] |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| |
|
|
|
|
|
 |
同类栏目 |
 |
 |
赞助链接 |
 |
|
500 - 内部服务器错误。
|
|
|
|
|
|