2012-11-26 65 views
3

我有一個潛在的問題。我有存儲在數據庫中的圖像,然後我用我的應用程序中的C#方法獲取圖像,並將其存儲在看起來像這樣的自定義類:在HTML標記中使用System.Drawing.Image

public class MyImage 
{ 
public System.Drawing.Image myImageFromDB; 
public string imageName; 
public int imageNumberInCollection; 
} 

我的問題是這樣的:我可以/如何我可以在HTML圖片標籤中使用此類中的圖片嗎?我曾嘗試以下,但它只是返回一個框有紅色X它:

//myImageFromDBCollection is a list of MyImage objects 
foreach(var ind in myImagesFromDBCollection) 
{ 
    table += String.Format("<image src={0} />", ind.myImageFromDB); 
} 

什麼我做錯了任何想法?

+1

你需要服務的形象。您不能只將圖像數據粘貼在頁面中。你可以對它進行64位編碼,但這種方法存在侷限性,它不適用於除圖標之類的任何東西。 – Brad

+0

運行你的網站,右鍵單擊並查看源代碼,看看有什麼。你的瀏覽器也可能有一個錯誤控制檯(我知道firefox至少),你也應該檢查錯誤。 –

+0

你使用的是什麼樣的ASP? – GolfWolf

回答

7

我最終用Brads去解決這個問題(請參閱問題的評論)我最終創建了一個方法,它接受一個System.Drawing.Image並將其轉換爲一個字節數組,然後將該字節數組編碼爲獲取圖像。代碼如下所示:

byte[] imgBytes = turnImageToByteArray(ind.ind.myImageFromDB); 
string imgString = Convert.ToBase64String(imgBytes); 
table += String.Format("img src=\"data:image/Bmp;base64,{0}\">", imgString); 

private byte[] turnImageToByteArray(System.Drawing.Image img) 
{ 
    MemoryStream ms = new MemoryStream(); 
    img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); 
    return ms.ToArray(); 
} 

目前這個工作,我的目的,所以,謝謝你給大家,他們的建議,一如既往每個人在,但並有助於:-)

+0

我使用此解決方案動態創建HtmlImage對象,如上所述分配Src屬性,並最後將新對象添加到現有面板控件。 – sonyisda1

1

如果我是你,我會將圖像文件保存在磁盤上,並在你的數據庫中有圖像文件名。

如果您在使用圖像格式時遇到問題,那麼只需查看源代碼並確保它是正確的。

1

如果您必須將圖像存儲在數據庫中,則查看它們的簡單方法是使用圖像處理程序。

基本上,您可以創建一個ASHX處理程序,該處理程序接受數據庫中Image ID的查詢字符串,並返回圖像內容以及正確的MIME類型。這在C#中很簡單。

然後,您可以將<img />標記指向具有指定標識的處理程序。類似於

table += String.Format("<image src='/ViewImage.ashx?id={0}' />", ind.myImageId); 

Here is a basic tutorial讓你開始。

常見的性能改進是將圖像緩存在處理程序中的磁盤上。

2

圖像可以使用通用的處理程序(ashx的文件)送達:

public class StickerHandler : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "image/png"; 
     context.Response.Cache.SetCacheability(HttpCacheability.Public); 
     context.Response.BufferOutput = false; 

     //TODO: link your MyImage to iSource using imageId query parameter... 
     Image iSource = null; 
     MemoryStream ms = new MemoryStream(); 
     iSource.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
     byte[] data = ms.ToArray(); 
     ms.Dispose(); 
     g.Flush(); 
     g.Dispose(); 
     iSource.Dispose(); 

     context.Response.BinaryWrite(data); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return true; 
     } 
    } 

} 

更多有關通用處理器可以在這裏找到:

http://msdn.microsoft.com/en-us/library/bb398986(v=vs.100).aspx

裏面你的形象:

<img src='StickerHandler.ashx?img=imageId' /> 

快樂編碼!