Csharp/C#教程:c# 曲线图生成代码分享

代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
usingSystem.IO;
usingSystem.Drawing.Imaging;
usingSystem.Collections;
namespaceCurve
{
publicclassCurveDrawing
{
stringtitle,title2,ytitle,xtitle;
///<summary>
///X坐标的标题
///</summary>
publicstringXtitle
{
get{returnxtitle;}
set{xtitle=value;}
}
///<summary>
///Y坐标的标题
///</summary>
publicstringYtitle
{
get{returnytitle;}
set{ytitle=value;}
}
///<summary>
///副标题
///</summary>
publicstringTitle2
{
get{returntitle2;}
set{title2=value;}
}
///<summary>
///主标题
///</summary>
publicstringTitle
{
get{returntitle;}
set{title=value;}
}
doubleyMax,yMin;
List<ArrayList>itemlist;
publicCurveDrawing(List<ArrayList>itemlist,stringtitle,stringtitle2=””)
{
this.itemlist=itemlist;
this.title=title;
this.title2=title2;
yMax=-100000000;
yMin=100000000;
for(inti=0;i<itemlist.Count;i++)
{
if(Convert.ToDouble(itemlist[i][1])>yMax)
yMax=Convert.ToDouble(itemlist[i][1]);
if(Convert.ToDouble(itemlist[i][1])<yMin)
yMin=Convert.ToDouble(itemlist[i][1]);
}
}
///<summary>
///创建并输出图片
///</summary>
///<returns>生成的文件路径</returns>
publicstringDraw()
{
#region基础定义
//取得记录数量
intcount=itemlist.Count;
//记算图表宽度
intwd=80+50*(count-1);
//设置最小宽度为640
if(wd<640)wd=640;
//生成Bitmap对像
Bitmapimg=newBitmap(wd,400);
//定义黑色画笔
PenBp=newPen(Color.Black);
//加粗的黑色
PenBBp=newPen(Color.Black,2);
//定义红色画笔
PenRp=newPen(Color.Red);
//定义银灰色画笔
PenSp=newPen(Color.Silver);
//定义大标题字体
FontBfont=newFont(“黑体”,12,FontStyle.Bold);
//定义一般字体
Fontfont=newFont(“Arial”,8);
//定义大点的字体
FontTfont=newFont(“Arial”,9);
//定义黑色过渡型笔刷
LinearGradientBrushbrush=newLinearGradientBrush(newRectangle(0,0,img.Width,img.Height),Color.Black,Color.Black,1.2F,true);
//定义蓝色过渡型笔刷
LinearGradientBrushBluebrush=newLinearGradientBrush(newRectangle(0,0,img.Width,img.Height),Color.Blue,Color.Blue,1.2F,true);
LinearGradientBrushSilverbrush=newLinearGradientBrush(newRectangle(0,0,img.Width,img.Height),Color.Silver,Color.Silver,1.2F,true);
#endregion
//生成绘图对像
try
{
using(Graphicsg=Graphics.FromImage(img))
{
#region绘制图表
//绘制底色
g.DrawRectangle(newPen(Color.White,400),0,0,img.Width,img.Height);
//绘制大标题
g.DrawString(title,Bfont,brush,wd/2-title.Length*10,5);
//绘制小标题
g.DrawString(title2,Tfont,Silverbrush,wd/2-title.Length*10+40,25);
//绘制图片边框
g.DrawRectangle(Bp,0,0,img.Width-1,img.Height-1);
//绘制Y坐标线
for(inti=0;i<(count<12?12:count);i++)
g.DrawLine(Sp,40+50*i,60,40+50*i,360);
//绘制X轴坐标标签
for(inti=0;i<count;i++)
g.DrawString(itemlist[i][0].ToString(),font,brush,30+50*i,370);
//绘制X坐标线
for(inti=0;i<11;i++)
{
g.DrawLine(Sp,40,60+30*i,40+50*((count<12?12:count)-1),60+30*i);
doubles=yMax-(yMax+Math.Abs(yMin))/10*i;//最大的Y坐标值
g.DrawString(Math.Floor(s).ToString(),font,brush,10,55+30*i);
}

//绘制Y坐标轴
g.DrawLine(BBp,40,50,40,360);
//绘制X坐标轴
g.DrawLine(BBp,40,360,40+50*((count<12?12:count)-1)+10,360);
#endregion
#region绘制曲线
//定义曲线转折点
Point[]p=newPoint[count];
for(inti=0;i<count;i++)
{
p[i].X=40+50*i;
p[i].Y=360-(int)(((Convert.ToDouble(itemlist[i][1])+Math.Abs(yMin))/((yMax+Math.Abs(yMin))/10))*30);
}
//绘制发送曲线
g.DrawLines(Rp,p);
for(inti=0;i<count;i++)
{
//绘制发送记录点的数值
g.DrawString(itemlist[i][1].ToString(),font,Bluebrush,p[i].X+5,p[i].Y-10);
//绘制发送记录点
g.DrawRectangle(Rp,p[i].X-2,p[i].Y-2,4,4);
}
#endregion
//绘制Y坐标标题
g.DrawString(ytitle,Tfont,brush,10,40);
//绘制X坐标标题
g.DrawString(xtitle,Tfont,brush,30,385);
//图片质量
g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//保存绘制的图片
stringbasePath=HttpContext.Current.Server.MapPath(“/Curve/”),
fileName=Guid.NewGuid()+”.jpg”;
using(FileStreamfs=newFileStream(basePath+fileName,FileMode.CreateNew))
{
if(!System.IO.Directory.Exists(basePath))
System.IO.Directory.CreateDirectory(basePath);
img.Save(fs,ImageFormat.Jpeg);
return”/Curve/”+fileName;
}
}
}
catch(Exception)
{
throw;
}
}
}
}
您可能感兴趣的文章:C#绘制曲线图的方法C#画笔Pen绘制光滑模式曲线的方法C#画笔Pen绘制曲线的方法C#实现鼠标移动到曲线图上显示值的方法UGUI绘制多点连续的平滑曲线

标签: c#

C语言使用stdlib.h库函数的二分查找和快速排序的实现代码

C++中不能被重载的运算符介绍

上述就是C#学习教程:c# 曲线图生成代码分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/904282.html

(0)
上一篇 2021年10月21日
下一篇 2021年10月21日

精彩推荐