Já precisei mostrar o logotipo da empresa em relatórios, onde o logotipo é um cadastro do usuário - uma imagem que o usuário escolhe e o programa a salva no banco de dados.
Só pra você entender melhor o que vem a seguir, eu uso o Crystal da seguinte forma. Crio um XSD que contém as tabelas e colunas para o relatório, crio um RPT a partir do XSD. Então, meu programa monta um dataset com o mesmo esquema do XSD e o entrega ao Crystal.
Para colocar o logotipo no RPT, criei uma coluna no XSD do tipo "base64binary". No RPT, é só arrastar este campo e o Crystal já trata como uma imagem. Mas a questão é o que colocar no dataset, né.
O código abaixo mostra como fiz. Mas enquanto escrevia essa resposta, percebi que vou ficar devendo uma explicação. A variável "dadosImagem" é uma imagem serializada em string na base 64. Eu uso um método de um framework proprietário aqui no trabalho. Não sei se o .NET tem algum serviço pra isso.
byte[] soPraPegarTipo = new byte[0]; //isso foi roubado; se alguém souber uma forma melhor de fazer isso, me fala, por favor.
DataTable tabLogotipo = new DataTable("Logotipo");
tabLogotipo.Columns.Add("Logotipo", soPraPegarTipo.GetType());
DataRow rowLogotipo = tabLogotipo.NewRow();
rowLogotipo[0] = Convert.FromBase64String(dadosImagem);
tabLogotipo.Rows.Add(rowLogotipo);
Espero que tenha sido útil.