2009-06-08 8 views
1

J'ai une DLL qui va retourner un objet (bitmap) et je dois le passer au navigateur. Tout en mémoire, pas d'accès au disque. Je sais comment le faire avec asp.net webform mais je n'ai aucune idée de MVC.si vous avez une DLL créant un bitmap en mémoire, comment le renvoyer au navigateur?

avec formulaire en ligne,

depuis que j'ai le contrôle de la dll, je hériter de la classe avec le webcontrol.image.

dans la page ASPX je créer un lien simple img comme:

<img src="Handler1.ashx> 

dans le Handler1.ashx je code comme:

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 
    context.Response.Clear() 
    Dim bmp As Bitmap = Nothing 
    Dim dll As New myDll.Class 

    dll.drawPicture(bmp) 

    context.Response.ContentType = "image/jpeg" 
    bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg) 
    context.Response.End() 
End Sub 

(j'ai enlevé les trucs de nettoyage/code inutile de garder court)

modifier

solution

est

Function img() As FileResult 
    Dim bmp As Bitmap = Nothing 
    Dim dll As New myDll.myClass 
    dll.DrawPicture(bmp) 

    Dim imgStream As New IO.MemoryStream 
    bmp.Save(imgStream, ImageFormat.Png) 
    imgStream.Position = 0 

    bmp.Dispose() 
    dll.Dispose() 
    bmp = Nothing 
    dll = Nothing 

    Return File(imgStream.ToArray, "image/png") 
End Function 

Je n'ai aucun problème en cours d'exécution du code de nettoyage sur tout sauf le MemoryStream, est-il une chance pour un memoryleak là? (Je pense que oui)

+0

Pourriez-vous poster le code que vous utilisez avec WebForms? – CoderDennis

+0

@Dennis Palner, fait – Fredou

Répondre

3

Utilisation action du contrôleur qui retourne FileResult avec la méthode Controller.File().

+0

très belle solution: vous donne une méthode de contrôleur, vous pouvez tester unitaire. – russau

+0

ont encore une question sur la fuite de mémoire, si vous connaissez – Fredou

0

Utilisez un gestionnaire générique et enregistrer le fichier bitmap (.Save) avec Response.OutputStream

+0

On dirait que vous avez déjà fait ça! – ScottE

+0

Donc, ce serait la même chose que webform? – Fredou

Questions connexes