Aquí hay un gráfico generado a partir de los datos del conjunto de datos.
Mi conjunto de datos son los datos leídos de la tabla Sendrec. Hay varios campos como Id, Sendid (número de pedido), Sendtime (tiempo de grabación) y Sendnum (cantidad enviada por unidad de tiempo/cinco minutos en mi caso)
. como sigue:
sorteo público vacío (página página, conjunto de datos ds, int Tnum) {}
La página se utiliza para pasar la página que hace referencia a este proceso, de modo que la página pueda enviar directamente el gráfico de curva generado al cliente en modo JPG.
ds es el conjunto de datos extraídos.
Tnum es solo un parámetro que quiero usar aquí. No quiero que esta clase quede expuesta al proceso de lectura, así que tomo el monto total del pedido directamente y se lo paso.
usando Sistema;
usando System.Data;
usando System.Configuration;
usando System.Web;
utilizando System.Web.Security;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.HtmlControls;
usando System.Drawing.Drawing2D;
usando System.Drawing.Imaging;
usando System.Drawing;
usando System.IO;
imgdraw de clase pública
{
dibujo público()
{
}
sorteo público vacío (página página, conjunto de datos ds, int Tnum)
{
//Obtener el número de registros
int recuento = ds.Tables[0].Rows.Count;
//Calcular el ancho del gráfico
int wd = 80 + 20 * (cuenta - 1);
//Establece el ancho mínimo en 800
si (wd < 800) wd = 800;
//Generar objeto de mapa de bits
Imagen de mapa de bits=nuevo mapa de bits(wd,400);
//Generar objeto de dibujo
Gráficos g = Graphics.FromImage(img);
//Definir pincel negro
Pen Bp = bolígrafo nuevo (Color.Negro);
//Definimos el pincel rojo
Pluma Rp = nueva pluma (Color.Rojo);
//Definir pincel gris plateado
Pen Sp = bolígrafo nuevo (Color.Plata);
//Definir la fuente del título
Fuente Bfont = nueva fuente("Arial", 12, FontStyle.Bold);
//Definir fuente general
Fuente fuente = nueva fuente ("Arial", 6);
//Definir una fuente más grande
Fuente Tfont = nueva fuente ("Arial", 9);
//Dibujar color de fondo
g.DrawRectangle(new Pen(Color.White, 400), 0, 0, img.Width, img.Height);
//Definir pincel de transición negro
Pincel LinearGradientBrush = nuevo LinearGradientBrush (nuevo Rectángulo (0, 0, img.Width, img.Height), Color.Black, Color.Black, 1.2F, verdadero);
//Definir pincel de transición azul
LinearGradientBrush Bluebrush = nuevo LinearGradientBrush (nuevo Rectángulo (0, 0, img.Width, img.Height), Color.Blue, Color.Blue, 1.2F, verdadero);
//Dibuja el título grande
g.DrawString(ds.Tables[0].Rows[0]["sendid"].ToString() + "Curva de estado de entrega del pedido", Bfont, brush, 40, 5);
//Obtener el volumen de envío actual
números int=0;
para (int i = 0; i < contar; i++)
{
nums+=Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]);
}
//Dibujar resumen informativo
string info="Hora de envío del pedido:"+ds.Tables[0].Rows[0]["sendtime"].ToString()+" Hora de generación de la curva: "+DateTime.Now.ToString()+" Importe total del pedido : "+Tnum.ToString()+" Monto total actual enviado: "+nums.ToString();
g.DrawString(información, Tfont, Bluebrush, 40, 25);
//Dibujar el borde de la imagen
g.DrawRectangle(Bp, 0, 0, img.Width - 1, img.Height - 1);
//Dibujar línea de coordenadas vertical;
para (int i = 0; i < contar; i++)
{
g.DrawLine(Sp, 40+20 * i, 60, 40+20 * i, 360);
}
//Dibujar etiquetas de coordenadas de la línea de tiempo
para (int i = 0; i < contar; i+=2)
{
string st = Convert.ToDateTime(ds.Tables[0].Rows[i]["sendtime"]).ToString("hh:mm");
g.DrawString(st, fuente, pincel, 30 + 20 * i, 370);
}
//Dibuja la línea de coordenadas horizontal
para (int i = 0; i < 10; i++)
{
g.DrawLine(Sp, 40, 60+30*i, 40+20*(cuenta-1), 60+30*i);
int s = 2500 - 50 * yo * 5;
//Dibuja la etiqueta de coordenadas del eje de cantidad de envío
g.DrawString(s.ToString(), fuente, pincel, 10, 60 + 30 * i);
}
//Dibuja el eje vertical
g.DrawLine(Bp, 40, 55, 40, 360);
//dibuja el eje horizontal
g.DrawLine(Bp, 40, 360, 45 + 20 * (count - 1), 360);
//Definir el punto de inflexión de la curva.
Punto[] p = nuevo Punto[recuento];
para (int i = 0; i < contar; i++)
{
p[i].X = 40 + 20 * i;
p[i].Y = 360- Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]) / 5*3/5;
}
//Dibujar curva de envío
g.DrawLines(Rp, p);
para (int i = 0; i < recuento; i++)
{
// Extrae el monto de envío del punto de registro de envío
g.DrawString(ds.Tables[0].Rows[i]["sendnum"].ToString(), fuente, Bluebrush, p[i].X, p[i].Y - 10);
//Dibuja el punto de registro de envío
g.DrawRectangle(Rp, p[i].X - 1, p[i].Y - 1, 2, 2);
}
//Dibujar título de coordenadas verticales
g.DrawString("Enviar importe", Tfont, pincel, 5, 40);
//Dibuja el título en abscisas
g.DrawString("Hora de envío", Tfont, pincel, 40, 385);
//Guarda la imagen dibujada
Flujo de MemoryStream = nuevo MemoryStream();
img.Save(flujo, ImageFormat.Jpeg);
// Salida de imagen
página.Respuesta.Clear();
page.Response.ContentType = "imagen/jpeg";
)
;
}
¡Oye! Publicar esto es solo un registro de cómo hacer un dibujo. Todavía hay muchos errores aquí, espero que puedas darme algún consejo.
http://www.cnblogs.com/aowind/archive/2006/11/23/569536.html