Как использовать System.Drawing.Image в управлении изображениями RDLC?

Можно ли использовать System.Drawing.Image в RDLC Image Control? Все, что я читал, было 3 метода:

  • база данных
  • встроенный ресурс
  • внешний файл

Спасибо Спасибо.

РЕДАКТИРОВАТЬ: Следуя этой библиотеке .NET или C# для Формат CGM (метафайл компьютерной графики)? Теперь я получил изображение в формате System.Drawing.Image и хочу отобразить его как часть отчета (как изображение) --- это то, что я хочу сделать.


person Jake    schedule 11.02.2011    source источник


Ответы (3)


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

Что-то вроде:

 ReportDataSource logoDataSource = new ReportDataSource();
 logoDataSource.Name = "LogoDS";
 logoDataSource.Value = new List<LogoWrapper>() { yourLogoWrapper };
 localReport.DataSources.Add(logoDS);

В отчете вы потом можете изображение как бы из базы данных

 =First(Fields!LogoByteArrayProperty.Value, "LogoDS")

Обертка выглядит примерно так:

 class LogoWrapper{
   ...
   public byte[] LogoByteArrayProperty{
      get{ 
         // Return here the image data
      }
   }
 }

Я использую это довольно часто. У него есть то преимущество, что мне не нужно добавлять изображение в базу данных или добавлять его в качестве ресурса каждого отчета. И, кроме того, приложение может сказать, какое изображение следует использовать. Обратите внимание, данный формат изображения должен быть известен из rdlc-engine. Последний вопрос будет заключаться в том, как преобразовать system.drawing.image в массив байтов. Я работаю с WPF и поэтому не знаю. Но я уверен, что Google ответит на этот вопрос очень достоверно.

person HCL    schedule 11.02.2011
comment
Это интересно .. я сначала попробую, а потом вернусь. Спасибо. - person Jake; 11.02.2011
comment
Спасибо, это сработало! Просто хочу добавить, что похоже, что элемент управления изображением RDLC также принимает массив byte[] в качестве значения, если тип mime элемента управления установлен правильно. Это будет четвертый способ сделать это. - person Jake; 12.02.2011

Вы можете использовать параметр источника «База данных» вместе с параметрами для динамической установки источника изображения из байтовых массивов.

Код позади:

var param2 = new ReportParameter()
               {
                   Name = "CompanyLogo",
                   Values = { Convert.ToBase64String(*ByteArrayImageObject*) }
               };
                ReportViewer1.LocalReport.SetParameters(param2);

rdlc-файл:

1- Добавьте текстовые параметры «CompanyLogo» и «MIMEType»

2- Установите свойство Value изображения на =System.Convert.FromBase64String(Parameters!CompanyLogo.Value)

3- Установите для свойства типа MIME значение

=Parameters!MIMEType.Value

4- Используйте «Базу данных» в качестве источника

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

person Muhammad Omar ElShourbagy    schedule 25.02.2013
comment
Я сделал все, как вы сказали, безрезультатно. Что может происходить? - person Felix Aballi; 24.08.2016


я не совсем уверен, что вы хотите с этим делать, но в целом это невозможно. Управление изображением — это просто держатель изображения в файлах RDLC. Эти 3 параметра указывают место, откуда элемент управления изображением берет изображение. из чего отображать базу данных, встроенный ресурс или внешний файл. Если вы дадите мне больше информации о том, чего вы хотите достичь, я могу дать вам какое-то решение.
С наилучшими пожеланиями,
Иордан

person IordanTanev    schedule 11.02.2011
comment
Привет, Лордан, я только что отредактировал свой пост. Это довольно просто, просто хочу использовать изображение в качестве изображения! Так что я могу динамически генерировать изображения для печати. - person Jake; 11.02.2011