[Dúvida] Conversão de bytes[] para Image (C#)!

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. :slight_smile:

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.