IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Afficher Image en mémoire


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut Afficher Image en mémoire
    Bonsoir,

    Je génère sur mon site des images alétoires, que je ne veux pas stocker sur le disque dur (durée de vie limité à quelques secondes).

    J'ai donc créé en c# un objet qui me permet de récupérer:
    - soit un Stream qui représente l'image générée.
    - Soit un System.Drawing.Image

    Le problème, c'est que le composant Image asp.net (webcontrol), ne prends en paramètre qu'une URL sur une image.

    Est-il possible d'afficher directement dans le html, l'image sans la stocker sur le disque ?

    Autrement quelle solution puis-je envisager pour que mon image ne soit qu'un fichier temporaire ?

    Merci de vos réponses.

    Ishida

  2. #2
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Jette un oeil aux HttpHandler ;-)

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    une technique est de créer un composant (usercontrol ou webcontrol) qui effectue le rendu de l'image à partir d'un tableau de byte représentant l'image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Response.ContentType = "image/jpeg";
    Response.OutputStream.Write(tableauByte, 0, tableauByte.Length);

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut
    Merci de vos réponses.

    Les htppHandler, j'ai regardé de ce côté, mais la solution me paraissaient un peu "lourde" pour le peu que je vais avoir besoin d'afficher des images "en mémoire".

    En revanche, la solution de nico-pyright(c) me parait simple et bien suffisante pour mon image.

    Je verrais ça après les vacances , donc je considère pour l'instant que mon problème est résolu.

    Bon code!

  5. #5
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Au contraire, ce n'est pas lourd du tout, c'est le même principe que celui évoqué par nico.

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    et c'est aussi plus complet comme solution

  7. #7
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut
    Bonjour,

    Tout à fait d'accord avec vous deux sur les HttpHandlers.

    En réalité, je me suis mal exprimé: ce n'est pas lourd, mais je voulais dire plus long à mettre en place pour le peu que j'ai besoin d'afficher ces images aléatoires.

    Mais peut être que j'y viendrais quand même, si j'en ai besoin...

    Ceci étant dit, quelque soit la solution, elle ne me satisfait pas car elle remplace le contenu de la page actuelle.
    Or je veux simplement pouvoir intégrer mon image dans mon contrôle web .ascx, composé de différents composants asp.net (tels que des ComboBox liées à des ObjectDataSource par exemple...)

    Le tout intégré dans une page .aspx

  8. #8
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut
    et si tu place ton code dans un user control ?

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ca ne marchera pas non plus, dans ce cas, il faudra passer par un HttpHandler

    exemple pour lire une image depuis le server (ok, c'est con, mais c'est pour l'exemple, la lecture peut se faire depuis une BD ensuite)

    déclaration du handler dans le web.config

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          <httpHandlers>
            <add verb="*" path="displayimg" type="demoImgFromMemory.HttpHandlerImage,demoImgFromMemory"/>
          </httpHandlers>
    Handler :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    using System;
    using System.Drawing.Imaging;
    using System.IO;
    using System.Web;
     
    namespace demoImgFromMemory
    {
        public class HttpHandlerImage : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                HttpRequest request = context.Request;
                HttpServerUtility server = context.Server;
     
                string file = request.QueryString["file"];
                string filePath = server.MapPath(file);
                if (!string.IsNullOrEmpty(file) && File.Exists(filePath))
                {
                    System.Drawing.Image img = System.Drawing.Image.FromFile(filePath);
                    string contentType;
                    ImageFormat format;
                    switch(Path.GetExtension(file).ToUpper())
                    {
                        case ".GIF":
                            contentType = "image/gif";
                            format = ImageFormat.Gif;
                            break;
                        case ".JPG":
                            contentType = "image/jpeg";
                            format = ImageFormat.Jpeg;
                            break;
                        case ".PNG":
                            contentType = "image/png";
                            format = ImageFormat.Png;
                            break;
                        case ".BMP":
                            contentType = "image/bmp";
                            format = ImageFormat.Bmp;
                            break;
                        default:
                            throw new NotSupportedException("Type d'image non reconnu");
                    }
                    context.Response.ContentType = contentType;
                    img.Save(context.Response.OutputStream, format);
                }
                else
                {
                    context.Response.StatusCode = 404;
                }
            }
     
            public bool IsReusable
            {
                get { return true; }
            }
        }
    }
    fichier aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="displayimg?file=img.jpg" />

  10. #10
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Par défaut
    Ahah, ma réponse a disparue entre hier et aujourd'hui...

    Merci pour cette réponse nico-pyright(c), je vais utiliser cette solution.

    J'avais trouvé une technique, mais bon, ce n'était pas propre. Je faisais un rendu de mon flux dans une .aspx (et non dans un .ascx car cela ne fonctionne pas), et j'intégrais cet .aspx dans un autre .aspx...
    Lourd, sale, mais fonctionnel tout de même...

    J'en viens donc à la solution des HttpHandler !

    A+,

    Ishida

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/06/2009, 20h15
  2. Réponses: 9
    Dernier message: 27/01/2006, 18h00
  3. [MySQL] Afficher image stockée sous forme binaire
    Par Luffy Duck dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/12/2005, 18h30
  4. mettre une image en mémoire pour réutilisation
    Par jani dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/11/2005, 15h14
  5. afficher image
    Par sanosuke dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/10/2004, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo