Bonjour à tous,

Voilà mon problème :

J'ai une page ASP qui crée un graphique à partir d'une liste de valeur :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 private static Bitmap CreateCourbe(int p1, int p2, int p3, int p4, int p5, int p6, int p7)
    {
//Ici je crée ma courbe et retourne l'image correspondante
        Bitmap bmp = new Bitmap(194, 123);
        Graphics g = Graphics.FromImage(bmp);
 
           Brush vBrush;
        if (p7 < 10)
        { vBrush = Brushes.MediumBlue; }
        else if (p7 < 25)
        { vBrush = Brushes.SteelBlue; }
        else if (p7 < 50)
        { vBrush = Brushes.CornflowerBlue; }
        else if (p7 < 75)
        { vBrush = Brushes.LightBlue; }
        else { vBrush = Brushes.White; }
 
        g.FillRectangle(Brushes.Gray, new Rectangle(0, 0, 194, 123));
        g.FillRectangle(vBrush, new Rectangle(0, 0, 150, 100));
 
        //Coordonnées courbe
        PointF[] points = new PointF[8];
        points[0].X = 0; points[0].Y = 100 - 0; points[1].X = 5; points[1].Y = 100 - p1;
        points[2].X = 10; points[2].Y = 100 - p2; points[3].X = 20; points[3].Y = 100 - p3;
        points[4].X = 40; points[4].Y = 100 - p4; points[5].X = 60; points[5].Y = 100 - p5;
        points[6].X = 90; points[6].Y = 100 - p6; points[7].X = 150; points[7].Y = 100 - p7;
        //Lignes
        Pen vPenLine = new Pen(Brushes.LightGray);
        g.DrawLine(vPenLine, new PointF(0, 25), new PointF(150, 25)); g.DrawLine(vPenLine, new PointF(0, 50), new PointF(150, 50));
        g.DrawLine(vPenLine, new PointF(0, 75), new PointF(150, 75));// g.DrawLine(vPenLine, new PointF(25, 0), new PointF(25, 100));
        //courbe 
        Pen vPen = new Pen(Brushes.Black);
        g.DrawCurve(vPen, points, 0.4F);
        //Légende
        g.DrawString("5", new Font("Arial", 7), Brushes.White, new PointF(2, 105)); g.DrawString("20", new Font("Arial", 7), Brushes.White, new PointF(16, 105));
        g.DrawString("40", new Font("Arial", 7), Brushes.White, new PointF(36, 105)); g.DrawString("60", new Font("Arial", 7), Brushes.White, new PointF(56, 105));
        g.DrawString("90", new Font("Arial", 7), Brushes.White, new PointF(86, 105)); g.DrawString("90+", new Font("Arial", 7), Brushes.White, new PointF(132, 105));
        g.DrawString("25%", new Font("Arial", 7), Brushes.White, new PointF(155, 72)); g.DrawString("50%", new Font("Arial", 7), Brushes.White, new PointF(155, 47));
        g.DrawString("75%", new Font("Arial", 7), Brushes.White, new PointF(155, 22)); g.DrawString("Secondes", new Font("Arial", 7), Brushes.Black, new PointF(151, 105));
        g.DrawString("Nb %", new Font("Arial", 7), Brushes.Black, new PointF(160, 5));
 
        return bmp;  
    }
Auparavant j'enregistrer cette image dans un fichier image sur le server ce qui marchait très bien mais inutilisable pour l'avenir quand plusieurs personnes utiliseront la page.

Aujourd'hui je procède comme ceci:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
//Ici j'appelle ma création de courbe et fais le Save
CreateCourbe(vTabAverage[0], vTabAverage[1], vTabAverage[2], vTabAverage[3], vTabAverage[4], vTabAverage[5], vTabAverage[6]).Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg) ;
J'appelle donc ma fonction et fais le
Response.OutputStream

Mon problème est que je voudrais afficher cette courbe dans un panel (par exemple) sur cette même page en gardant ma mise en forme, seulement pour l'instant je réaffiche ma page avec l'image de la courbe seulement.

J'ai pensé enregistrer cette image de courbe sur une autre page et mettre sur mon panel un BackgroundUrl visant la page. Est-ce une bonne solution?

J'ai essayé des MemoryStream au lieu du Response.OutputStream,
mais je m'y prend mal et ne sais pas trop comment faire.

Si quelqu'un à une idée. Merci beaucoup