Existe-t-il un moyen de lier un MemoryStream au contrôle asp: image?Comment lier un MemoryStream à asp: le contrôle d'image?
Répondre
un gestionnaire peut accepter un paramètre d'URL comme toute autre demande. Ainsi, au lieu de lier votre <asp:image/>
à image.ashx
, vous le définissez sur image.ashx?ImageID=[Your image ID here]
.
Et la bibliothèque http://imageresizing.net fait cela pour vous. –
Le meilleur pari est de créer un HttpHandler qui retournerait l'image. Puis liez la propriété ImageUrl sur l'asp: Image à l'URL du HttpHandler.
Voici du code.
d'abord créer le HttpHandler:
<%@ WebHandler Language="C#" Class="ImageHandler" %>
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
public class ImageHandler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.Clear();
if (!String.IsNullOrEmpty(context.Request.QueryString["id"]))
{
int id = Int32.Parse(context.Request.QueryString["id"]);
// Now you have the id, do what you want with it, to get the right image
// More than likely, just pass it to the method, that builds the image
Image image = GetImage(id);
// Of course set this to whatever your format is of the image
context.Response.ContentType = "image/jpeg";
// Save the image to the OutputStream
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
else
{
context.Response.ContentType = "text/html";
context.Response.Write("<p>Need a valid id</p>");
}
}
public bool IsReusable
{
get
{
return false;
}
}
private Image GetImage(int id)
{
// Not sure how you are building your MemoryStream
// Once you have it, you just use the Image class to
// create the image from the stream.
MemoryStream stream = new MemoryStream();
return Image.FromStream(stream);
}
}
Ensuite, il suffit d'appeler à l'intérieur de votre page ASPX où vous utilisez le asp: Image.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Image ID="myImage" ImageUrl="~/ImageHandler.ashx?id=1" runat="server" />
</div>
</form>
</body>
</html>
Et c'est tout.
Y at-il un moyen de le faire sans HttpHandler, je n'ai pas écrire pour créer un gestionnaire dans mon projet ' –
Je suppose que vous avez besoin de générer des images dynamiques de asp.net Vous pourriez être la chance http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16449
Hanselman récemment blogué sur http://www.hanselman.com/blog/ASPNETFuturesGeneratingDynamicImagesWithHttpHandlersGetsEasier.aspx
Alors que Databinding un MemoryStream à une image est impossible , il peut être possible d'utiliser un Label/GenericControl, du Code et le data URI scheme pour incorporer des Images dans Pages, mais il y a de sérieux problèmes avec cette approche:
Inconvénients
- contenu incorporé doit être extrait et décodé avant que les modifications peuvent être apportées, puis re-codé et re-intégré par la suite.
- Les cookies ne sont pas supportés.
- Les informations intégrées plusieurs fois sont téléchargées dans le fichier conteneur et ne bénéficient donc pas du cache du navigateur.
- Les navigateurs peuvent limiter les longueurs d'URI, créant ainsi une taille de données maximale effective. Par exemple, les URI des versions antérieures d'Opera avaient des limites de 4 Ko et 32 Ko pour IE8 Beta 1 [citation requise]
- Les données sont incluses dans un flux simple et de nombreux environnements de traitement (tels que les navigateurs Web) ne prennent pas en charge les conteneurs (comme multipart/alternative ou message/rfc822) pour fournir une plus grande complexité telle que les métadonnées, la compression de données ou la négociation de contenu.
- Microsoft Internet Explorer, à travers la version 7 (environ 70% du marché à partir de 2008 Q2), manque de soutien.
La meilleure approche consiste à utiliser une page « Image.aspx » séparée TENANT et sorties votre MemoryStream, un peu comme je l'ai fait dans mon logiciel Album photo que j'ai créé quand je commencé à apprendre ASP.net :
(Don't laugh, that was my first attempt at ASP.net :-)
Edit: d'accord sur ASHX, le code ci-dessus est juste pour montrer un exemple d'implémentation. Quand je viendrai mettre à jour l'album photo, il utilisera ASHX pour cela.
@Will et Ben Griswald: au lieu de "image.aspx", utilisez "image.ashx".
Il est plus léger qu'un ASP complet.Net Page, et il est spécifiquement conçu pour gérer les types de contenu autres que text/html.
Non.
Mais vous pouvez créer une page spéciale pour diffuser cette image. , Vous définissez d'abord l'URL de l'image à la page qui effectue le streaming, y compris certains paramètres d'URL vous permettent de savoir où obtenir l'image:
<img src="GetImage.aspx?filename=foo" ... />
à GetImage.aspx, vous obtenez le nom de fichier (ou quoi que) à partir de l'URL, charger l'image dans votre MemoryStream, puis écrire le contenu de ce flux de mémoire directement au HttpResponse:
response.Expires = 0;
response.Buffer = false;
response.Clear();
response.ClearHeaders();
response.ClearContent();
response.ContentType = "image/jpeg";
response.BinaryWrite(stream);
response.Flush();
response.Close();
Vous pouvez utiliser le contrôle BinaryImage de Telerik pour ASP.net.
Plus d'info ici: http://www.telerik.com/products/aspnet-ajax/binaryimage.aspx
Pour moi, il était nécessaire d'ajouter « tampon = » false » au @Page Sinon, je garderais obtenir la même image tout le temps ...
- 1. Comment lier le résultat de DataTable.Select() à un contrôle ListBox?
- 2. ASP MVC.NET - comment lier KeyValuePair?
- 3. Comment lier le contrôle TreeView ASP.NET à une datatable?
- 4. Comment lier certaines propriétés appartenant à un contrôle personnalisé?
- 5. Exécuter un programme à partir de MemoryStream
- 6. Comment AJAXify ASP: Assistant Contrôle
- 7. Possibilité d'ajouter dynamiquement un contrôle ASP: CheckBox à un TableCell?
- 8. Comment lier xaml à un xpath dynamique?
- 9. Pouvez-vous lier des données à un contrôle TreeView?
- 10. MemoryStream vs un tableau d'octets
- 11. Comment le contrôle d'accès ASP situé dans un contrôle utilisateur via JavaScript
- 12. Comment lier un DataGridViewComboBoxColumn à un objet?
- 13. GDI + exception sauvegarde un bitmap à un MemoryStream
- 14. Trouver un contrôle dans ASP: Répéteur
- 15. Comment lier un contrôle WPF à une méthode WCF à l'aide d'un ObjectDataProvider
- 16. Comment lier un ASP.NET FormView à un seul enregistrement?
- 17. Comment lier un contrôle de répéteur ASP.NET à un IList <String>?
- 18. asp: contrôle littéral null dans le contrôle utilisateur
- 19. "Chunked" MemoryStream
- 20. Comment lier dans WPF un objet entier à un contrôle utilisateur?
- 21. Contrôle TreeView dans ASP .NET
- 22. Stockage de MemoryStream dans le cache
- 23. Comment lier des chaînes de ressources en XAML à plusieurs attributs dans le même contrôle?
- 24. memorystream - stringstream, string, autres?
- 25. Différence entre un tableau d'octets et MemoryStream
- 26. Dans un contrôle ASP, comment puis-je obtenir le texte d'une balise <Contentemplate> dans le code de contrôle?
- 27. Comment lier à la propriété SelectedItem dans un ControlTemplate?
- 28. asp: UpdatePanel/Contrôle personnalisé/RegisterClientScriptResource
- 29. Comment lier un contrôle d'arbre à une source de données dans VB .NET?
- 30. Conversion d'un asp: ButtonField en un asp: TemplateField dans un contrôle GridView
. Le http: //imageresizing.net HttpModule le rend très facile –
Merci à tout le monde pour vos réponses.J'ai aussi utilisé le httphandler pour ce problème, mais j'ai besoin d'un peu plus que cela.Je veux passer un paramètre à httphandler qui génère différentes images à une grille et la différence sera fournie par l'ID de la rangée, donc je dois passer un paramètre à ce httphandler. est-ce que cela est pratique? avoir une suggestion? –