.NET

28 jul, 2010

Converter Imagem em Array e Array em Imagem

Publicidade

Olá, pessoal, hoje eu gostaria de mostrar
duas funcionalidades legais que precisei em um certo desenvolvimento. Acredito
que é de grande valia.

Requisitos:

  • Visual Studio .NET 2008
  • Linguagem: C#

Essa funcionalidade pode ser usada nas ferramentas mais antigas do Visual
Studio .NET, como 2003 e 2005; ainda não testei, mas não vejo nenhuma
restrição.

Em resumo, o que mostro é como transformar uma imagem em
Array, guardá-la em um local e depois transformar em imagem novamente. Em
breve vou escrever um artigo que visualiza imagem do tipo TIF na web e vou usar
esse código ensinado hoje.

Hoje não veremos em funcionamento, vou só lançar a idéia,
por exemplo: ao pegar uma imagem de upload ou local mesmo, transformei-a em
Array, gravei no banco de dados, XML ou TXT. Depois eu peguei esses
dados em Array e transformei na imagem novamente.

Com esse decreto do governo brasileiro de economizar papel e
transformar tudo em digital, o que mostro hoje pode ter grande valia para
projetos futuros.

É importante importar a classe System.Drawing.Imagem antes de qualquer
coisa, mas ao digitar na ferramenta será sugerido automaticamente. O código abaixo mostra essa conversão de imagem para ByteArray, passando dois
parâmetros, a imagem e o formato:

public static byte[] ConvertImageToByteArray(Image image, ImageFormat imageFormat)
{
if (image == null)
return null;

MemoryStream ms = new MemoryStream();
image.Save(ms, imageFormat);
return ms.ToArray();
}

Note que o método retorna um Array de byte.

Já o outro método que faz o inverso: 

public static Image ConvertByteArrayToImage(byte[] byteArray)
{
if (byteArray == null || byteArray.Length == 0)
{
return (null);
}

return (Image.FromStream(new MemoryStream(byteArray)));
}

Note que o código acima recebe apenas o byteArray e transforma em imagem. O tipo de
retorno é Image.

Bom, agora basta chamar o código normalmente, veja o exemplo abaixo:

byte[] arrayImagem = ConvertImageToByteArray(SUA_IMAGEM, ImageFormat.Gif);

Depois disso, o código é retornado automaticamente; basta depois inserir no banco de dados.

Para voltar com a imagem, também é simples: faça um select no banco de dados e o retorno em array de byte passo para o outro método.

Image img = ConvertByteArrayToImage(imagem_do_banco);

Bom, eu fico por aqui. Qualquer dúvida pode entrar em contato pelo site.