HttpHandlerHistogramme.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. const int ecartEntreBarre = 10;
  23. const int largeurBarre = 30;
  24. // recupération des parametres
  25. int largeur = Convert.ToInt32(context.Request["l"]);
  26. int hauteur = Convert.ToInt32(context.Request["h"]);
  27. Color fond = Color.FromArgb(Convert.ToInt32(context.Request["f"]));
  28. int nbBarre = Convert.ToInt32(context.Request["nb"]);
  29. decimal[] valeurs = new decimal[nbBarre];
  30. Color[] couleurs = new Color[nbBarre];
  31. decimal valeurMaxi = decimal.MinValue;
  32. decimal valeurMini = decimal.MaxValue;
  33. // chargement des valeurs et détermination de la valeur maxi et mini (bien que cette dernière ne serve pas pour le moment)
  34. for (int i = 1; i < nbBarre + 1; i++)
  35. {
  36. valeurs[i - 1] = Convert.ToInt32(context.Request[string.Format("v{0}", i)]);
  37. couleurs[i - 1] = Color.FromArgb(Convert.ToInt32(context.Request[string.Format("c{0}", i)]));
  38. if (i == 1)
  39. {
  40. valeurMaxi = valeurs[i - 1];
  41. valeurMini = valeurs[i - 1];
  42. }
  43. else
  44. {
  45. if (valeurs[i - 1] > valeurMaxi)
  46. valeurMaxi = valeurs[i - 1];
  47. if (valeurs[i - 1] < valeurMini)
  48. valeurMini = valeurs[i - 1];
  49. }
  50. }
  51. // calcul de l'échelle
  52. decimal echelle = (hauteur - 40) / valeurMaxi;
  53. Bitmap graphique = new Bitmap(largeur, hauteur);
  54. Graphics g = Graphics.FromImage(graphique);
  55. // affichage du fond d'écran
  56. SolidBrush pinceau = new SolidBrush(fond);
  57. g.FillRectangle(pinceau, 0, 0, largeur, hauteur);
  58. pinceau.Dispose();
  59. SolidBrush stylo = new SolidBrush(Color.Black);
  60. Font police = new Font("Arial", 10, FontStyle.Bold);
  61. // affichage des barres
  62. for (int i = 0; i < nbBarre; i++)
  63. {
  64. pinceau = new SolidBrush(couleurs[i]);
  65. g.FillRectangle(pinceau, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 20 - valeurs[i] * echelle), largeurBarre, (float)(valeurs[i] * echelle));
  66. g.DrawString(valeurs[i].ToString(), police, stylo, ecartEntreBarre + ((largeurBarre + ecartEntreBarre) * i), (float)(hauteur - 35 - valeurs[i] * echelle));
  67. pinceau.Dispose();
  68. }
  69. // Envoi de l'image dans le flux http de sortie
  70. context.Response.ContentType = "image/bitmap";
  71. graphique.Save(context.Response.OutputStream, ImageFormat.Gif);
  72. // libération des ressources
  73. graphique.Dispose();
  74. g.Dispose();
  75. }
  76. }
  77. }