<%@ WebHandler Language="C#" Class="DrawLine1" %>
using System;
using System.Web;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Drawing.Imaging;
public class DrawLine1 : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
List<Point> points = GetPointArray1();
using (Bitmap ChartingImage = new Bitmap(320, 240))
{
using (Graphics g = Graphics.FromImage(ChartingImage))
{
// 指定使用平滑化处理(又称为反锯齿功能)。
g.SmoothingMode = SmoothingMode.AntiAlias;
g.FillRectangle(new LinearGradientBrush(new Rectangle(0, 0, 320, 240), Color.DeepPink, Color.YellowGreen, LinearGradientMode.Vertical), new Rectangle(0, 0, 320, 240));
using (Pen p = new Pen(Color.Yellow, 2))
{
if (points.Count > 1)
{
int startX = points[0].X;
int startY = points[0].Y;
for (int i = 1; i < points.Count; i++)
{
g.DrawLine(p, startX, startY, points[i].X, points[i].Y);
startX = points[i].X;
startY = points[i].Y;
}
g.DrawString("深圳 A 股:" + Convert.ToString(240 - points[points.Count - 1].Y), new Font("标楷体", 20), Brushes.Yellow, 0, 0);
}
}
using (Pen p = new Pen(Color.Red, 2))
{
if (points.Count > 1)
{
int startX = points[0].X+20;
int startY = points[0].Y-10;
for (int i = 1; i < points.Count; i++)
{
g.DrawLine(p, startX, startY, points[i].X+20, points[i].Y-10);
startX = points[i].X+20;
startY = points[i].Y-10;
}
}
}
context.Response.ContentType = "Image/png";
context.Response.Cache.SetNoStore();
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetExpires(DateTime.Now);
context.Response.Cache.SetValidUntilExpires(false);
using (MemoryStream ms = new MemoryStream())
{
ChartingImage.Save(ms, ImageFormat.Png);
ms.Flush();
context.Response.BinaryWrite(ms.GetBuffer());
}
}
}
}
private List<Point> GetPointArray1()
{
List<Point> Points = (List<Point>)(HttpContext.Current.Cache["PointArray1"]);
if (Points == null)
{
Points = new List<Point>();
Points.Add(new Point(0, 120)); // 加入第一个坐标点 (0, 120)。
HttpContext.Current.Cache["X1"] = 0;
HttpContext.Current.Cache["Y1"] = 120;
}
Random r = new Random();
int x = Convert.ToInt32(HttpContext.Current.Cache["X1"]) + 10;
int y = Convert.ToInt32(HttpContext.Current.Cache["Y1"]);
if (x == 320)
{
x = 0;
y = 120;
Points.Clear();
}
if (y % 2 == 0)
{
y += r.Next(0, 11);
}
else
{
y -= r.Next(0, 11);
}
Points.Add(new Point(x, y));
HttpContext.Current.Cache["PointArray1"] = Points;
HttpContext.Current.Cache["X1"] = x;
HttpContext.Current.Cache["Y1"] = y;
return Points;
}
public bool IsReusable
{
get
{
return false;
}
}
}