Voici un graphique généré à partir des données du Dataset.
Mon ensemble de données correspond aux données lues dans la table Sendrec. Il existe plusieurs champs tels que Id, Sendid (numéro de commande), Sendtime (durée d'enregistrement) et Sendnum (montant envoyé par unité de temps/cinq minutes dans mon cas)
. comme suit:
public void draw (page page, DataSet ds, int Tnum) {}
La page est utilisée pour transmettre la page qui fait référence à ce processus, afin que la page puisse directement afficher le graphique de courbe généré au client en mode JPG.
ds est l'ensemble de données extrait.
Tnum est juste un paramètre que je souhaite utiliser ici. Je ne veux pas que cette classe soit exposée au processus de lecture, donc je prends directement le montant total de la commande et je le lui transmets.
utiliser le système ;
en utilisant System.Data ;
en utilisant System.Configuration ;
en utilisant System.Web ;
en utilisant System.Web.Security ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.HtmlControls ;
en utilisant System.Drawing.Drawing2D ;
en utilisant System.Drawing.Imaging ;
en utilisant System.Drawing ;
en utilisant System.IO ;
imgdraw de classe publique
{
public imgdraw()
{
}
public void draw (page page, DataSet ds, int Tnum)
{
//Obtenir le nombre d'enregistrements
int count = ds.Tables[0].Rows.Count;
//Calculer la largeur du graphique
int wd = 80 + 20 * (compte - 1);
//Définit la largeur minimale à 800
si (wd < 800) wd = 800 ;
//Générer un objet Bitmap
Bitmap img=nouveau Bitmap(wd,400);
//Générer un objet de dessin
Graphiques g = Graphics.FromImage(img);
//Définir le pinceau noir
Stylo Bp = nouveau stylo (couleur. noir);
//Définit le pinceau rouge
Stylo Rp = nouveau stylo (couleur. rouge);
//Définir le pinceau gris argenté
Stylo Sp = nouveau stylo (couleur. argent);
//Définit la police du titre
Police Bfont = new Font("Arial", 12, FontStyle.Bold);
//Définir la police générale
Police font = new Font("Arial", 6);
//Définit une police plus grande
Police Tfont = new Font("Arial", 9);
//Dessiner la couleur d'arrière-plan
g.DrawRectangle (nouveau stylo (couleur. Blanc, 400), 0, 0, img. Largeur, img. Hauteur);
//Définir le pinceau de transition noir
Pinceau LinearGradientBrush = nouveau LinearGradientBrush (nouveau Rectangle (0, 0, img.Width, img.Height), Color.Black, Color.Black, 1.2F, true);
//Définir le pinceau de transition bleu
LinearGradientBrush Bluebrush = nouveau LinearGradientBrush (nouveau Rectangle (0, 0, img.Width, img.Height), Color.Blue, Color.Blue, 1.2F, true);
//Dessine le grand titre
g.DrawString(ds.Tables[0].Rows[0]["sendid"].ToString() + "Courbe d'état de livraison des commandes", Bfont, brush, 40, 5);
//Obtenir le volume d'envoi actuel
nombres int=0 ;
pour (int i = 0; i < nombre; i++)
{
nums+=Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]);
}
//Dessiner un briefing d'information
string info="Heure d'envoi de la commande :"+ds.Tables[0].Rows[0]["sendtime"].ToString()+" Heure de génération de la courbe : "+DateTime.Now.ToString()+" Montant total de la commande : "+Tnum.ToString()+" Montant total actuel envoyé : "+nums.ToString();
g.DrawString(info, Tfont, Bluebrush, 40, 25) ;
//Dessiner une bordure d'image
g.DrawRectangle(Bp, 0, 0, img.Width - 1, img.Height - 1);
//Dessiner une ligne de coordonnées verticales
pour (int i = 0; i < nombre; i++)
{
g.DrawLine(Sp, 40+20 * i, 60, 40+20 * i, 360);
}
//Dessiner des étiquettes de coordonnées de la chronologie
pour (int i = 0; i < nombre; i+=2)
{
string st = Convert.ToDateTime(ds.Tables[0].Rows[i]["sendtime"]).ToString("hh:mm");
g.DrawString(st, police, pinceau, 30 + 20 * i, 370);
}
//Dessine la ligne de coordonnées horizontale
pour (int i = 0; i < 10; i++)
{
g.DrawLine(Sp, 40, 60+30*i, 40+20*(count-1), 60+30*i);
int s = 2500 - 50 * je * 5 ;
//Dessine l'étiquette de coordonnée de l'axe du montant d'envoi
g.DrawString(s.ToString(), police, pinceau, 10, 60 + 30 * i);
}
//Dessine l'axe vertical
g.DrawLine(Bp, 40, 55, 40, 360);
//Dessine l'axe horizontal
g.DrawLine(Bp, 40, 360, 45 + 20 * (count - 1), 360);
//Définir le point d'inflexion de la courbe
Point[] p = nouveau Point[compte];
pour (int i = 0; i < nombre; i++)
{
p[je].X = 40 + 20 * je;
p[i].Y = 360- Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]) / 5*3/5;
}
//Dessiner la courbe d'envoi
g.DrawLines(Rp, p);
pour (int i = 0; i < nombre; i++)
{
//Dessine le montant d'envoi du point d'enregistrement d'envoi
g.DrawString(ds.Tables[0].Rows[i]["sendnum"].ToString(), font, Bluebrush, p[i].X, p[i].Y - 10);
//Dessine le point d'enregistrement d'envoi
g.DrawRectangle(Rp, p[i].X - 1, p[i].Y - 1, 2, 2);
}
//Dessiner le titre des coordonnées verticales
g.DrawString("Envoyer le montant", Tfont, pinceau, 5, 40);
//Dessine le titre en abscisse
g.DrawString("Heure d'envoi", Tfont, pinceau, 40, 385);
//Enregistre l'image dessinée
Flux MemoryStream = new MemoryStream();
img.Save(flux, ImageFormat.Jpeg);
//Sortie d'image
page.Response.Clear();
page.Response.ContentType = "image/jpeg";
)
;
}
Hé ! Publier ceci n'est qu'un enregistrement de la façon de dessiner une image. Il y a encore beaucoup d'erreurs ici, j'espère que vous pourrez me donner quelques conseils.
http://www.cnblogs.com/aowind/archive/2006/11/23/569536.html