Aqui está um gráfico gerado a partir dos dados do conjunto de dados.
Meu Dataset são os dados lidos da tabela Sendrec. Existem vários campos como Id, Sendid (número do pedido), Sendtime (tempo de gravação) e Sendnum (quantidade enviada por unidade de tempo/cinco minutos no meu caso)
. do seguinte modo:
public void draw(Página página,DataSet ds,int Tnum){}
A página é usada para passar a página que faz referência a esse processo, para que a página possa enviar diretamente o gráfico de curva gerado para o cliente no modo JPG.
ds é o conjunto de dados extraído.
Tnum é apenas um parâmetro que quero usar aqui. Não quero que essa classe fique exposta ao processo de leitura, então pego o valor total do pedido diretamente e passo para ela.
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Web;
usando System.Web.Security;
usando 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 classe pública
{
imgdraw público()
{
}
sorteio de void público (página página, DataSet ds, int Tnum)
{
//Obtém o número de registros
contagem int = ds.Tables[0].Rows.Count;
//Calcula a largura do gráfico
int wd = 80 + 20 * (contagem - 1);
//Define a largura mínima para 800
se (wd < 800) wd = 800;
//Gera objeto Bitmap
Bitmap img=novo Bitmap(wd,400);
//Gera objeto de desenho
Gráficos g = Graphics.FromImage(img);
//Define o pincel preto
Caneta Bp = nova Caneta(Cor.Preta);
//Define o pincel vermelho
Caneta Rp = nova Caneta(Color.Red);
//Define o pincel cinza prateado
Caneta Sp = nova Caneta(Cor.Prata);
//Define a fonte do título
Fonte Bfont = new Font("Arial", 12, FontStyle.Bold);
//Definir fonte geral
Fonte fonte = new Fonte("Arial", 6);
//Define uma fonte maior
Fonte Tfont = new Fonte("Arial", 9);
//Desenha a cor de fundo
g.DrawRectangle(new Pen(Color.White, 400), 0, 0, img.Width, img.Height);
//Define o pincel de transição preto
Pincel LinearGradientBrush = novo LinearGradientBrush (novo Rectangle (0, 0, img.Width, img.Height), Color.Black, Color.Black, 1.2F, true);
//Define o pincel de transição azul
LinearGradientBrush Bluebrush = novo LinearGradientBrush(novo retângulo(0, 0, img.Width, img.Height), Color.Blue, Color.Blue, 1.2F, true);
//Desenhe o grande título
g.DrawString(ds.Tables[0].Rows[0]["sendid"].ToString() + "Curva de status de entrega do pedido", Bfont, pincel, 40, 5);
//Obtém o volume de envio atual
int números=0;
for (int i = 0; i < contagem; i++)
{
nums+=Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]);
}
// Desenhar briefing informativo
string info="Hora de envio do pedido:"+ds.Tables[0].Rows[0]["sendtime"].ToString()+" Tempo de geração da curva: "+DateTime.Now.ToString()+" Valor total do pedido : "+Tnum.ToString()+" Valor total atual enviado: "+nums.ToString();
g.DrawString(info, Tfont, Bluebrush, 40, 25);
//Desenha a borda da imagem
g.DrawRectangle
(Bp, 0, 0, img.Width - 1, img.Height - 1);
for (int i = 0; i < contagem; i++)
{
g.DrawLine(Sp, 40+20 * i, 60, 40+20 * i, 360);
}
//Desenha rótulos de coordenadas da linha do tempo
for (int i = 0; i < contagem; i+=2)
{
string st = Convert.ToDateTime(ds.Tables[0].Rows[i]["sendtime"]).ToString("hh:mm");
g.DrawString(st, fonte, pincel, 30 + 20 * i, 370);
}
//Desenha a linha de coordenadas horizontais
para (int i = 0; i < 10; i++)
{
g.DrawLine(Sp, 40, 60+30*i, 40+20*(contagem-1), 60+30*i);
ints = 2500 - 50 * i * 5;
//Desenhe o rótulo da coordenada do eixo do valor de envio
g.DrawString(s.ToString(), fonte, pincel, 10, 60 + 30 * i);
}
//desenha o eixo vertical
g.DrawLine(Bp, 40, 55, 40, 360);
//desenha o eixo horizontal
1
), 360);
Ponto[] p = novo Ponto[contagem];
for (int i = 0; i < contagem; i++)
{
p[i].X = 40 + 20 * eu;
p[i].Y = 360- Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]) / 5*3/5;
}
//Desenha a curva de envio
g.DrawLines(Rp, p);
for (int i = 0; i < contagem; i++)
{
//Desenha o valor de envio do ponto de registro de envio
g.DrawString(ds.Tables[0].Rows[i]["sendnum"].ToString(), fonte, Bluebrush, p[i].X, p[i].Y - 10);
//Desenha o ponto de registro de envio
g.DrawRectangle(Rp, p[i].X - 1, p[i].Y - 1, 2, 2);
}
//Desenha o título da coordenada vertical
g.DrawString("Valor Enviado", Tfont, pincel, 5, 40);
//Desenhe o título da abcissa
g.DrawString("Hora de envio", Tfont, pincel, 40, 385);
//Salva a imagem desenhada
Fluxo MemoryStream = novo MemoryStream();
img.Save(fluxo, ImageFormat.Jpeg);
//Saída de imagem
page.Response.Clear();
page.Response.ContentType = "imagem/jpeg";
página.Response.BinaryWrite(stream.ToArray()
}
);
}
Ei! Postar isso é apenas um registro de como fazer um desenho. Ainda há muitos erros aqui, espero que você possa me dar alguns conselhos.
http://www.cnblogs.com/aowind/archive/2006/11/23/569536.html