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 CapaciteTheorique = Convert.ToInt32(context.Request["nbCt"]); 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; // 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]; } } //string legendeMoyenne = "Moyenne : " + CapaciteTheorique.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 - CapaciteTheorique * echelle); int x2 = largeur; //int y2 = (int)(hauteur - 20 - CapaciteTheorique * 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()); } } } }