如何将PNG图像(作为内存流)呈现到.NET ReportViewer报表界面

时间:2008-08-31 08:42:18

标签: .net image reportviewer

我有一个动态创建的图像,我将其保存到流中,以便我可以在ReportViewer表面上显示它。

设定:

  • Windows客户端应用程序(不是WebForms)
  • 报告数据源是一个对象数据源,动态生成的流作为属性(CustomImage)
  • Report.EnableExternalImages = true
  • Image.Source = Database
  • Image.MIMEType = image / png
  • Image.Value = = Fields!CustomImage.Value

这不起作用,但没有报告任何错误,只是在报表面上显示空图像图标。所有其他字段都正确显示。

有没有人有这种情况的工作代码示例?

1 个答案:

答案 0 :(得分: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:在报告中为图像设置以下属性(不带引号):

  • MIMEType:“=Parameters!ReportLogoMimeType.Value
  • 价值:“=System.Convert.FromBase64String(Parameters!ReportLogo.Value)
  • 更新:正如Gerardo所说,图片来源必须设置为'数据库'

年轻球员的陷阱: 通常情况下,这些图像看起来很糟糕,就像它们已经被缩放一样,即使你传递的图像似乎是“正确的尺寸”。这是因为报告是为了打印(300 dpi)而不是屏幕(通常是72或92 dpi)。修复方法是将图片发送大约3倍太大,在报告中设置正确的尺寸,并将图片上的“Sizing”属性更改为“FitProportional”。