Muchas veces tenemos que insertar imágenes ennuestros reportes dependiendo el registro que estemos mostrando, una forma queme a funcionado muy bien es la siguiente.
Cuando diseñemos el reporte debemos insertar un campo de tipo System.Byte[] en el DataTable utilizadopara el diseño de nuestro reporte, en este campo meteremos la imagen entiempo de ejecución.


Este campo se inserta en el reporte y será dondemostraremos la imagen.

Para mostrar el reporte utilizamos lo siguiente, para llenarel campo creado.
public void CargarReporte()
{
DataTable Dt = new
DataTable();//Creo un DataTable que sera la fuente de datos de mi reporte.
Dt=clsOrdenTerceros.Get_InfoParaOrdenImpresa(NumOrden);//Lleno el DataTable
rptOrdenSalidaTercero rpt = new rptOrdenSalidaTercero();// instancio el reporte
Dt.Columns.Add("Ruta11",System.Type.GetType("System.Byte[]"));//Agrego la columna con el tipo de dato "System.Byte[]",donde guardare mi imagen.
Dt.Rows[0]["Ruta11"] = CargarImagen("C:\foto.jpg"));//Cargo La imagen
rpt.SetDataSource(Dt);//Asigno la fuente de datos a mi reporte.
}
Y esta es la función que carga la imagen.
public static Byte[]CargarImagen(string rutaArchivo)
{
if (rutaArchivo != "")
{
try
{
FileStream Archivo = new FileStream(rutaArchivo, FileMode.Open);//Creo el archivo
BinaryReader binRead = new BinaryReader(Archivo);//Cargo el Archivo en modo binario
Byte[] imagenEnBytes = new Byte[(Int64)Archivo.Length]; //Creo un Array de Bytes donde guardare la imagen
binRead.Read(imagenEnBytes,0, (int)Archivo.Length);//Cargo la imagen en el array de Bytes
binRead.Close();
Archivo.Close();
return imagenEnBytes;//Devuelvo la imagen convertida en un array de bytes
}
catch
{
return new Byte[0];
}
}
return new byte[0];
}
Espacio de nombre Usados
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;