2008-08-31 43 views
12

我有一個動態創建的圖像,我將其保存到一個流中,以便我可以將其顯示在ReportViewer表面上。如何將PNG圖像(作爲內存流)呈現到.NET ReportViewer報告表面上

設置:

  • Windows客戶端應用(未的WebForms)
  • 報告數據源是一個數據源對象,具有動態生成的流作爲一個屬性(CustomImage)
  • Report.EnableExternalImages =真
  • Image.Source =數據庫
  • Image.MIMEType = image/png
  • Image.Value = = Fields!CustomI mage.Value

這不起作用,但不報告任何錯誤,只是在報告表面顯示一個空的圖像圖標。所有其他字段顯示正確。

有沒有人有這種情況下的工作代碼示例?

回答

26

我正在做類似的事情,以便在報告上有變化的標誌,但我利用報告參數傳遞值。如果圖像是數據的一部分,我不認爲這種通用方法不起作用的原因。

本質上,圖像通過兩個字段。第一個字段是MIME類型值,第二個字段是包含圖像內容的Base64編碼字符串。

第1步:將您的圖像轉換爲Base64編碼。 (我們的代碼總是通過ImageFormat.Png這種方法使MIME類型容易)

private static string ConvertImageToBase64(Image image, ImageFormat format) 
{ 
    byte[] imageArray; 

    using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream()) 
    { 
     image.Save(imageStream, format); 
     imageArray = new byte[imageStream.Length]; 
     imageStream.Seek(0, System.IO.SeekOrigin.Begin); 
     imageStream.Read(imageArray, 0, imageStream.Length); 
    } 

    return Convert.ToBase64String(imageArray); 
} 

步驟2:將圖像和MIME類型的報告。

reportParams[0] = new ReportParameter("ReportLogo", base64Logo); 
reportParams[1] = new ReportParameter("ReportLogoMimeType", "image/png"); 

_reportViewer.LocalReport.SetParameters(reportParams); 

步驟3:在報告設置的圖像上的以下性質(沒有引號):

  • mime類型:" =Parameters!ReportLogoMimeType.Value "
  • 值:" =System.Convert.FromBase64String(Parameters!ReportLogo.Value) "
  • UPDATE: As Ger ARDO的說下面的圖像源必須設置爲「數據庫」

陷阱年輕球員: 通常情況下,圖像看起來可怕,就像他們一直在縮小,即使你傳遞的圖像這似乎是「正確的尺寸」。這是因爲報告呈現爲打印(300 dpi)而不是屏幕(通常爲72或92 dpi)。修復方法是發送大約3倍大的圖像,在報告中設置正確大小,並將圖像上的「Sizing」屬性更改爲「FitProportional」。

+0

Thnx很多,非常幫助我! – Martijn 2009-02-23 14:53:24