HttpHandlerHistogramme.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Web.UI.HtmlControls;
  10. using System.Drawing;
  11. using System.Drawing.Imaging;
  12. namespace CG67.FicheCollege
  13. {
  14. public class HttpHandlerHistogramme : IHttpHandler
  15. {
  16. public bool IsReusable
  17. {
  18. get { return true; }
  19. }
  20. public void ProcessRequest(HttpContext context)
  21. {
  22. try
  23. {
  24. const int ecartEntreBarre = 10;
  25. const int largeurBarre = 30;
  26. // recupération des parametres
  27. //int CapaciteTheorique = Convert.ToInt32(context.Request["nbCt"]);
  28. int largeur = Convert.ToInt32(context.Request["l"]);
  29. int hauteur = Convert.ToInt32(context.Request["h"]);
  30. //Color fond = Color.FromArgb(Convert.ToInt32(context.Request["f"]));
  31. Color fond = Color.White;
  32. int nbBarre = Convert.ToInt32(context.Request["nb"]);
  33. decimal[] valeurs = new decimal[nbBarre];
  34. Color[] couleurs = new Color[nbBarre];
  35. string[] legende = new string[nbBarre];
  36. decimal valeurMaxi = decimal.MinValue;
  37. decimal valeurMini = decimal.MaxValue;
  38. // chargement des valeurs et détermination de la valeur maxi et mini (bien que cette dernière ne serve pas pour le moment)
  39. for (int i = 1; i < nbBarre + 1; i++)
  40. {
  41. valeurs[i - 1] = Convert.ToInt32(context.Request[string.Format("v{0}", i)]);
  42. couleurs[i - 1] = Color.FromArgb(Convert.ToInt32(context.Request[string.Format("c{0}", i)]));
  43. legende[i - 1] = context.Request[string.Format("t{0}", i)];
  44. if (i == 1)
  45. {
  46. valeurMaxi = valeurs[i - 1];
  47. valeurMini = valeurs[i - 1];
  48. }
  49. else
  50. {
  51. if (valeurs[i - 1] > valeurMaxi)
  52. valeurMaxi = valeurs[i - 1];
  53. if (valeurs[i - 1] < valeurMini)
  54. valeurMini = valeurs[i - 1];
  55. }
  56. }
  57. //string legendeMoyenne = "Moyenne : " + CapaciteTheorique.ToString();
  58. // calcul de l'échelle
  59. decimal echelle = (hauteur - 40) / valeurMaxi;
  60. Bitmap graphique = new Bitmap(largeur, hauteur);
  61. Graphics g = Graphics.FromImage(graphique);
  62. // affichage du fond d'écran
  63. SolidBrush pinceau = new SolidBrush(fond);
  64. g.FillRectangle(pinceau, 0, 0, largeur, hauteur);
  65. pinceau.Dispose();
  66. SolidBrush stylo = new SolidBrush(Color.Black);
  67. Font police = new Font("Arial", 10, FontStyle.Bold);
  68. // affichage des barres
  69. for (int i = 0; i < nbBarre; i++)
  70. {
  71. pinceau = new SolidBrush(couleurs[i]);
  72. g.FillRectangle(pinceau, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 20 - valeurs[i] * echelle), largeurBarre, (float)(valeurs[i] * echelle));
  73. g.DrawString(valeurs[i].ToString(), police, stylo, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 35 - valeurs[i] * echelle));
  74. pinceau.Dispose();
  75. g.DrawString(legende[i], police, stylo, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 20));
  76. }
  77. stylo.Dispose();
  78. // Affichage de la ligne moyenne
  79. Pen greenPen = new Pen(Color.Green, 3);
  80. int x1 = 0;
  81. //int y1 = (int)(hauteur - 20 - CapaciteTheorique * echelle);
  82. int x2 = largeur;
  83. //int y2 = (int)(hauteur - 20 - CapaciteTheorique * echelle);
  84. // Draw line to screen.
  85. SolidBrush styloVert = new SolidBrush(Color.Green);
  86. //g.DrawLine(greenPen, x1, y1, x2, y2);
  87. //g.DrawString(legendeMoyenne, police, styloVert, (float)(450), (float)(y1 - 20));
  88. context.Response.StatusCode = 209;
  89. // Envoi de l'image dans le flux http de sortie
  90. context.Response.ContentType = "image/gif";
  91. graphique.Save(context.Response.OutputStream, ImageFormat.Gif);
  92. // libération des ressources
  93. styloVert.Dispose();
  94. graphique.Dispose();
  95. g.Dispose();
  96. }
  97. catch (Exception e)
  98. {
  99. context.Response.StatusCode = 510;
  100. context.Response.Write(e.Message.ToString());
  101. }
  102. }
  103. }
  104. }