Olá a todos.
estou tentando fazer um método para converter de byte[] para Image, mas quando chega numa determinada linha diz que o parametro é inválido.
quem puder me ajudar agradeço muito!
Segue o meu método que faz a conversão:
public Image byteArrayToImage(byte[] img)
{
if (img == null || img.Length == 0)
return null;
MemoryStream ms = new MemoryStream(img, 0, img.Length);
ms.Write(img, 0, img.Length);
Image imgImagen = Image.FromStream(ms, true); -- Mas quando chega aqui aparece o seguinte erro: Parâmetro inválido.
return imgImagen;
}
Desde já agradeço!
Depois do write, o ponteiro do seu Stream está no final do Stream. Assim, um novo write irá inserir dados após o último byte inserido. Para fazer a leitura, é necessário resetar esse ponteiro.
Para isso, use o comando:
Só um detalhe. Existe um jeito mais simples de fazer isso. O MemoryStream tem um construtor que aceita um Byte Array como parâmetro. E após a construção o ponteiro já estará na primeira posição do Stream:
O código fica resumido a isso:
public Image ByteArrayToImage(byte[] img)
{
return Image.FromStream(new MemoryStream(img));
}
O processo inverso eu faria na forma de um extension method. 
Após o seu conselho o meu código ficou assim:
public Image byteArrayToImage(byte[] img)
{
if (img == null || img.Length == 0)
return null;
MemoryStream ms = new MemoryStream(img, 0, img.Length);
ms.Write(img, 0, img.Length);
ms.Seek(0, SeekOrigin.Begin);
Image imgImagen = Image.FromStream(ms, true); – Mas quando chega aqui aparece o seguinte erro: Parâmetro inválido.
return imgImagen;
}
E tbm tentei assim:
public Image byteArrayToImage(byte[] img)
{
if (img == null || img.Length == 0)
return null;
return Image.FromStream(new MemoryStream(img));
}
Mas continua dando o mesmo erro, ou seja, Parameter is not valid.
Quando for postar códigos, use a tag code:
Seu código
Senão fica impossível de ler. Para isso, basta selecionar o código e pressionar o botão Code, na barra sobre a janela de edição do post.
Ok, obrigado pela dica, após o seu conselho o meu código ficou assim:
[code]public Image byteArrayToImage(byte[] img)
{
if (img == null || img.Length == 0)
return null;
MemoryStream ms = new MemoryStream(img, 0, img.Length);
ms.Write(img, 0, img.Length);
ms.Seek(0, SeekOrigin.Begin);
Image imgImagen = Image.FromStream(ms, true); – Mas quando chega aqui aparece o seguinte erro: Parâmetro inválido.
return imgImagen;
}
[/code]
E tbm tentei assim:
[code]public Image byteArrayToImage(byte[] img)
{
if (img == null || img.Length == 0)
return null;
return Image.FromStream(new MemoryStream(img));
} [/code]
Mas continua dando o mesmo erro, ou seja, Parameter is not valid.
Olá ViniGodoy, vc ainda continua acompanhando minha dúvida ou alguém que puder me ajudar, agradeço muito.