实现数据图表牛

2021-08-24 淮安装修公司

三.在中实现数据图表的完整源代码和运行界面:

在掌握了产生图片,在给图片上色、在图片上输出字符、和画线等基本操作过以后,充分的利用各种基本操作,就可以得的在中实现数据图表的完整程序,下图是运行界面:

图05:在中实现数据图表的运行界面

下面是在中实现数据图表的完整代码(px),如下:

<%@ Import Namespace = \"System\" %>

<%@ Import Namespace = \"awing\" %>

<%@ Import Namespace = \"awing2D\" %>

<%@ Import Namespace = \"aging\" %>

<script language = \"C#\" runat = \"server\" >

class LineChart

{

public Bitmap b ;

public string Title = \"在中实现数据图表\" ;

public ArrayList chartValues = new ArrayList ( ) ;

public float Xorigin = 0 , Yorigin = 0 ;

public float ScaleX , ScaleY ;

public float Xdivs = 2 , Ydivs = 2 ;

private int Width , Height ;

private Graphics g ;

private Page p ;

struct datapoint {

public float x ;

public float y ;

public bool valid ;

}

//初始化

public LineChart ( int myWidth , int myHeight , Page myPage ) {

Width = myWidth ; Height = myHeight ;

ScaleX = myWidth ; ScaleY = myHeight ;

b = new Bitmap ( myWidth , myHeight ) ;

g = Graphics . FromImage ( b ) ;

p = myPage ;

}

public void AddValue ( int x , int y ) {

datapoint myPoint ;

myPoint . x = x ;

myPoint . y = y ;

myPoint . valid = true ;

chartValues . Add ( myPoint ) ;

}

public void Draw ( ) {

int i ;

float x , y , x0 , y0 ;

string myLabel ;

Pen blackPen = new Pen ( Color . Blue , 2 ) ;

Brush blackBrush = new SolidBrush ( Color . Black ) ;

Font axesFont = new Font ( \"arial\" , 10 ) ;

//首先要创建图片的大小

p . Response . ContentType = \"image/jpeg\" ;

g . FillRectangle ( new SolidBrush ( Color . LightGreen ) , 0 , 0 , Width , Height ) ;

int ChartInset = 50 ;

int ChartWidth = Width - ( 2 * ChartInset ) ;

int ChartHeight = Height - ( 2 * ChartInset ) ;

g . DrawRectangle ( new Pen ( Color . Black , 1 ) , ChartInset , ChartInset , ChartWidth , ChartHeight ) ;

//写出图片上面的图片内容文字

g . DrawString ( Title , new Font ( \"arial\" , 14 ) , blackBrush , Width / 3 , 10 ) ;

//沿X坐标写入X标签

for ( i = 0 ; i <= Xdivs ; i++ ) {

x = ChartInset + ( i * ChartWidth ) / Xdivs ;

y = ChartHeight + ChartInset ;

myLabel = ( Xorigin + ( ScaleX * i / Xdivs ) ) . ToString ( ) ;

g . DrawString ( myLabel , axesFont , blackBrush , x - 4 , y + 10 ) ;

g . DrawLine ( blackPen , x , y + 2 , x , y - 2 ) ;

}

//沿Y坐标写入Y标签

for ( i = 0 ; i <= Ydivs ; i++ )

{

x = ChartInset ;

y = ChartHeight + ChartInset - ( i * ChartHeight / Ydivs ) ;

myLabel = ( Yorigin + ( ScaleY * i / Ydivs ) ) . ToString ( ) ;

g . DrawString ( myLabel , axesFont , blackBrush , 5 , y - 6 ) ;

g . DrawLine ( blackPen , x + 2 , y , x - 2 , y ) ;

}

g . RotateTransform ( 180 ) ;

g . TranslateTransform ( 0 , - Height ) ;

g . TranslateTransform ( - ChartInset , ChartInset ) ;

g . ScaleTransform ( - 1 , 1 ) ;

//画出图表中的数据

datapoint prevPoint = new datapoint ( ) ;

prevPoint . valid = false ;

foreach ( datapoint myPoint in chartValues ) {

if ( prevPoint . valid == true ) {

x0 = ChartWidth * ( prevPoint . x - Xorigin ) / ScaleX ;

y0 = ChartHeight * ( prevPoint . y - Yorigin ) / ScaleY ;

x = ChartWidth * ( myPoint . x - Xorigin ) / ScaleX ;

y = ChartHeight * ( myPoint . y - Yorigin ) / ScaleY ;

g . DrawLine ( blackPen , x0 , y0 , x , y ) ;

g . FillEllipse ( blackBrush , x0 - 2 , y0 - 2 , 4 , 4 ) ;

g . FillEllipse ( blackBrush , x - 2 , y - 2 , 4 , 4 ) ;

}

prevPoint = myPoint ;

}

//最后以图片形式来浏览

加速中国物流行业的发展。 b . Save ( p . Response . OutputStream , ImageFormat . Jpeg ) ;

}

~LineChart ( ) {

g . Dispose ( ) ;

b . Dispose ( ) ;

}

}

void Page_Load ( Object sender , EventArgs e )

{

LineChart c = new LineChart ( 640 , 480 , Page ) ;

c . Title = \" 在中实现数据图表\" ;

c . Xorigin = 0 ; c . ScaleX = 500 ; c . Xdivs = 5 ;

c . Yorigin = 0 ; c . ScaleY = 1000 ; c . Ydivs = 5 ;

c . AddValue ( 0 , 150 ) ;

c . AddValue ( 50 , 50 ) ;

c . AddValue ( 100 , 700 ) ;

c . AddValue ( 200 , 150 ) ;

c . AddValue ( 300 , 450 ) ;

c . AddValue ( 400 , 75 ) ;

c . AddValue ( 450 , 450 ) ;

c . AddValue ( 500 , 250 ) ;

c . Draw ( ) ;

}

</script >

四. 总结:

实现图表始终是互联编程的一个难点,本文介绍了在页面中如何实现数据图表,在没有什么好的组件可以利用的前提下,利用.Net FrameWork SDK GDI+中提供的各种用以操作图形的方法,这样的过程虽然有点烦杂,但对实现复杂的图表是非常有用的。希望本文不仅能够帮助读者解决在互联上的图表问题,也能够对读者的针对GDI+也有所了解。

查看本文来源

艾得辛能长期服用吗
反流性胃炎怎么治疗
南通妇科哪好
为你推荐