если у вас есть DLL, создающая растровое изображение в памяти, как вернуть ее в браузер? - PullRequest
1 голос
/ 08 июня 2009

У меня есть DLL, которая собирается вернуть объект (растровое изображение), и я должен передать его в браузер.

Все в памяти, нет доступа к диску.

Я знаю, как это сделать с помощью веб-формы asp.net, но я не знаю, с MVC.

с веб-формой,

так как у меня есть контроль над dll, я наследую класс с помощью webcontrol.image.

На странице aspx я создаю простую ссылку img, например:

   <img src="Handler1.ashx>

в Handler1.ashx у меня есть такой код:

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

(я убрал чистящие средства / бесполезный код, чтобы сократить его)

редактировать

решение

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

У меня нет проблем с запуском кода очистки на всем, кроме потока памяти, есть ли вероятность утечки памяти? (Думаю да)

Ответы [ 2 ]

3 голосов
/ 08 июня 2009

Использовать действие контроллера, которое возвращает FileResult с Controller.File () метод.

0 голосов
/ 08 июня 2009

Используйте универсальный обработчик и сохраните растровое изображение (.Save) с Response.OutputStream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...