2013-04-23 25 views
0

我使用生成從DICOM文件上飛圖片:asp.net MVC內存流DICOM圖像會話變量

public ActionResult Generatemage() 
     { 
      FileContentResult data; 
..... 
    objImage = im.Bitmap(outputSize, PixelFormat.Format24bppRgb, m); 

    using (var memStream = new MemoryStream()) 
    { 
     objImage.Save(memStream, ImageFormat.Png); 
     data = this.File(memStream.GetBuffer(), "image/png"); 
    } 
     return data; 
     } 

我可以將圖像存儲爲一個會話變量,所以我可以用三維點修改呢? 我試着使用:

Bitmap data = (Bitmap)Session["newimage"]; 

得到這兩個錯誤:

Cannot implicitly convert type 'System.Drawing.Bitmap' to 'System.Web.Mvc.FileContentResult' and 
A local variable named 'data' is already defined in this scope 

我會感激你的建議,在此先感謝。

回答

0

我可以將圖像存儲爲會話變量,因此我可以使用 Point3D對其進行修改嗎?

我建議不要這樣做。如果你還沒有read Nathanael's post on image resizing pitfalls那麼我建議你現在就這樣做。它可能是在談論調整大小,但它也暗示瞭如何使用圖像一般。在第3點上它說:

通過將文件加載到內存中來從磁盤提供文件。考慮一下你的服務器有多大的RAM,單個圖像有多大,在用戶下載它之前有多長時間,以及有多少 用戶請求圖像。

在您的特定情況下,可以更換「用戶下載完之前,」「三維點處理完前映像」。所以,我建議你得到該文件的句柄,比如說有一個Id可以唯一標識每個用戶的文件,使用Id來檢索該文件,以便在用Point3D處理文件時將其加載到MemoryStream(假設Point3D可以使用mem。stream),處理它,然後處理它。用這種方式,你只能在「Point3D處理」期間保持圖像。

無法隱式轉換類型「System.Drawing.Bitmap」到 「System.Web.Mvc.FileContentResult」和一個局部變量命名爲「數據」 已經在此範圍內

定義可能是最,因爲你已經定義data這樣:

FileContentResult data; 

,然後你正在做一個:

Bitmap data = (Bitmap)Session["newimage"]; 

同一範圍內兩種不同類型的相同變量。

+0

謝謝馮,我必須弄清楚如何做到這一點,但它是每個文件都有唯一標識的正確方法。 – hncl 2013-04-25 19:07:13