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

6 respostas
I

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!

6 Respostas

V

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:

V

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:

I

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.

V

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.

I

Ok, obrigado pela dica, 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.

I

Olá ViniGodoy, vc ainda continua acompanhando minha dúvida ou alguém que puder me ajudar, agradeço muito.

Criado 28 de maio de 2010
Ultima resposta 31 de mai. de 2010
Respostas 6
Participantes 2