Подтвердить что ты не робот

Как визуализировать PNG-изображение (как поток памяти) на поверхности отчета .NET ReportViewer

У меня есть динамически созданное изображение, которое я сохраняю в потоке, чтобы я мог отображать его на поверхности ReportViewer.

Настройка:

  • Приложение Windows Client (не WebForms)
  • Источник данных отчета - объект-источник данных с динамически генерируемым потоком как свойство (CustomImage)
  • Report.EnableExternalImages = true
  • Image.Source = База данных
  • Image.MIMEType = image/png
  • Image.Value = = Поля! CustomImage.Value

Это не работает, но не сообщает о каких-либо ошибках, просто показывая пустой значок изображения на поверхности отчета. Все остальные поля отображаются правильно.

Есть ли у кого-нибудь образец рабочего кода этого сценария?

4b9b3361

Ответ 1

Я делаю что-то подобное, чтобы иметь изменяющийся логотип в отчетах, однако я использую параметры отчета для передачи значения. Я не вижу причин, почему этот общий метод не работал, если изображения были частью данных.

По сути, изображения передаются по двум полям. Первое поле - это значение типа 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)"
  • ОБНОВЛЕНИЕ:. Как говорит Херардо, источник изображения должен быть установлен в "База данных"

Ловушка для молодых игроков: Часто изображения выглядят ужасно и, как если бы они были масштабированы, даже если вы проходите изображение, которое, похоже, является "правильным размером". Это происходит потому, что отчеты отображаются для печати (300 dpi), а не на экране (обычно 72 или 92 dpi). Исправление состоит в том, чтобы отправить изображение примерно в 3 раза слишком большим, установить его правильный размер в отчете и изменить свойство "Sizing" на изображении на "FitProportional".