| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- using System;
- using System.Data;
- using System.Configuration;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- using System.Drawing;
- using System.Drawing.Imaging;
- namespace CG67.FicheCollege
- {
- public class HttpHandlerHistogramme : IHttpHandler
- {
- public bool IsReusable
- {
- get { return true; }
- }
- public void ProcessRequest(HttpContext context)
- {
- try
- {
- const int ecartEntreBarre = 10;
- const int largeurBarre = 30;
- // recupération des parametres
- int largeur = Convert.ToInt32(context.Request["l"]);
- int hauteur = Convert.ToInt32(context.Request["h"]);
- //Color fond = Color.FromArgb(Convert.ToInt32(context.Request["f"]));
- Color fond = Color.White;
- int nbBarre = Convert.ToInt32(context.Request["nb"]);
- decimal[] valeurs = new decimal[nbBarre];
- Color[] couleurs = new Color[nbBarre];
- string[] legende = new string[nbBarre];
- decimal valeurMaxi = decimal.MinValue;
- decimal valeurMini = decimal.MaxValue;
- decimal moyenne = 0;
- // chargement des valeurs et détermination de la valeur maxi et mini (bien que cette dernière ne serve pas pour le moment)
- for (int i = 1; i < nbBarre + 1; i++)
- {
- valeurs[i - 1] = Convert.ToInt32(context.Request[string.Format("v{0}", i)]);
- couleurs[i - 1] = Color.FromArgb(Convert.ToInt32(context.Request[string.Format("c{0}", i)]));
- legende[i - 1] = context.Request[string.Format("t{0}", i)];
- if (i == 1)
- {
- valeurMaxi = valeurs[i - 1];
- valeurMini = valeurs[i - 1];
- }
- else
- {
- if (valeurs[i - 1] > valeurMaxi)
- valeurMaxi = valeurs[i - 1];
- if (valeurs[i - 1] < valeurMini)
- valeurMini = valeurs[i - 1];
- }
- moyenne += valeurs[i - 1];
- }
- moyenne = moyenne / nbBarre;
- moyenne = Math.Round(moyenne, 2);
- string legendeMoyenne = "Moyenne : " + moyenne.ToString();
- // calcul de l'échelle
- decimal echelle = (hauteur - 40) / valeurMaxi;
- Bitmap graphique = new Bitmap(largeur, hauteur);
- Graphics g = Graphics.FromImage(graphique);
- // affichage du fond d'écran
- SolidBrush pinceau = new SolidBrush(fond);
- g.FillRectangle(pinceau, 0, 0, largeur, hauteur);
- pinceau.Dispose();
- SolidBrush stylo = new SolidBrush(Color.Black);
- Font police = new Font("Arial", 10, FontStyle.Bold);
- // affichage des barres
- for (int i = 0; i < nbBarre; i++)
- {
- pinceau = new SolidBrush(couleurs[i]);
- g.FillRectangle(pinceau, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 20 - valeurs[i] * echelle), largeurBarre, (float)(valeurs[i] * echelle));
- g.DrawString(valeurs[i].ToString(), police, stylo, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 35 - valeurs[i] * echelle));
- pinceau.Dispose();
- g.DrawString(legende[i], police, stylo, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 20));
- }
- stylo.Dispose();
- // Affichage de la ligne moyenne
- Pen greenPen = new Pen(Color.Green, 3);
- int x1 = 0;
- int y1 = (int)(hauteur - 20 - moyenne * echelle);
- int x2 = largeur;
- int y2 = (int)(hauteur - 20 - moyenne * echelle);
- // Draw line to screen.
- SolidBrush styloVert = new SolidBrush(Color.Green);
- g.DrawLine(greenPen, x1, y1, x2, y2);
- g.DrawString(legendeMoyenne, police, styloVert, (float)(450), (float)(y1 - 20));
- context.Response.StatusCode = 209;
- // Envoi de l'image dans le flux http de sortie
- context.Response.ContentType = "image/gif";
- graphique.Save(context.Response.OutputStream, ImageFormat.Gif);
- // libération des ressources
- styloVert.Dispose();
- graphique.Dispose();
- g.Dispose();
-
- }
- catch (Exception e)
- {
- context.Response.StatusCode = 510;
- context.Response.Write(e.Message.ToString());
- }
- }
- }
- }
|