| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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)
- {
- 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"]));
- 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;
- // 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];
- }
- }
- // 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();
- // Envoi de l'image dans le flux http de sortie
- context.Response.ContentType = "image/bitmap";
- graphique.Save(context.Response.OutputStream, ImageFormat.Gif);
- // libération des ressources
- graphique.Dispose();
- g.Dispose();
- }
- }
- }
|