2010-04-06 13 views
0

Je génère un System.Drawing.Bitmap à la volée dans un contrôle serveur Web ASP.NET personnalisé, puis je souhaite le diffuser dans le cadre de WebResource, car je ne souhaite pas enregistrer sur l'ordinateur hôte.Incorporation d'une image bitmap dans WebResource d'ASP.NET

Existe-t-il un moyen d'indiquer à ASP.NET de servir le System.Drawing.Bitmap généré dans le cadre de WebResource? (en faisant ainsi une "ressource incorporée")

+0

Comment vous référeriez-vous à cette 'image' dans votre page? – Lazarus

+0

Puis j'obtiendrais une référence à l'image en utilisant l'url WebResource. Exemple: '/WebResource.axd? ...' –

Répondre

2

Utilisez un gestionnaire HTTP. Le gestionnaire est essentiellement un morceau de code exécuté lorsqu'une ressource avec une extension spécifiée est demandée à votre serveur. Puisque vous voulez une image générée dynamiquement, faites-le dans le code du gestionnaire et renvoyez-le en guise de réponse. L'incorporation ne fonctionnerait pas, car vous ne pouvez intégrer que des informations statiques. Voici quelques liens:

+0

+1 Excellent, exactement ce que je voulais. Merci de m'avoir corrigé en ce qui concerne le problème. J'ai utilisé l'article suivant pour résoudre mon problème: http://www.codeproject.com/KB/custom-controls/CaptchaControl.aspx –

1

Je l'ai fait dans plusieurs projets ASP.NET sans un gestionnaire HTTP. Imaginons que vous ayez une image nommée "Fingerprint.jpg" et que vous la placiez dans un sous-dossier nommé "Images" dans votre bibliothèque de contrôle Web dont l'espace de noms est "MonNamespace". Effectivement l'espace de noms calculé de votre image serait "MyNamespace.Images". Marquez cette image avec l'action de construction "Embedded Resource". Supposons maintenant que dans cette bibliothèque de contrôle Web, vous avez une classe de contrôle Web nommée "MyNamespace.SampleWebControl".

Dans AssemblyInformation.cs j'ajouté quelque chose comme ça pour chaque image:

[assemblage: System.Web.UI.WebResource ("MyNamespace.Images.Fingerprint.jpg", "image/jpg")]

où dans l'exemple ci-dessus l'image Fingerpint.jpg est stockée dans le dossier nommé "Images" juste en dessous du répertoire racine de la bibliothèque de contrôle Web.

Puis, dans la codebehind page asp.net vous pouvez utiliser quelque chose comme ceci:

string imgName = "MyNamespace.Images.Fingerprint.jpg"; 
Type ctrlType = typeof(MyNamespace.SampleWebControl); 
string imageUrl = Page.ClientScript.GetWebResourceUrl(ctrlType, imgName); 

Et vous pouvez utiliser cette valeur ImageUrl comme l'URL de l'image dans un contrôle d'image ou une balise HTML IMG.