Duvida - Como converter de byte[] para Image em C# 2012?

3 respostas
csharpbytes
B

estou tentando fazer um método para converter de byte[] para Image em c# 2012, mas quando chega numa determinada linha diz que o parametro é inválido.
quem puder me ajudar agradeceria 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); 
    ms.Seek(0, SeekOrigin.Begin);
    Image imgImagen = Image.FromStream(ms, true); 
    return imgImagen; 
}

3 Respostas

D

Utilize esses dois códigos:

public byte[] ImageToByte(Image img)
{
	ImageConverter converter = new ImageConverter();
	return (byte[])converter.ConvertTo(img, typeof(byte[]));
}
public Image ByteToImage(byte[] imageArray)
{
	ImageConverter converter = new ImageConverter();
	return (Image)converter.ConvertFrom(imageArray);
}
B

Tentei desta maneiro como postaste mesmo assim o mesmo erro continua Dragoon.
Eu esto a programar em 3 camadas Observe ainda o código:

1º Metodo: Que permite apresentar os dados do banco de dados nos objectos do formulário através da classe BLL

private void mCarregarCampos()
    {
        clsFuncionarioDTO Funcionario = new clsFuncionarioDTO();
        if (this.Text == "FUNCIONÁRIOS")
        {
            if (cbxCodFuncionario.Text != "")
            {  
                bll.CarregarFuncionario(Funcionario, int.Parse(cbxCodFuncionario.Text));
            }
        }
        txtFuncionario.Text = Funcionario.Funcionario;
        txtEmail.Text = Funcionario.Email;
        txtSkype.Text = Funcionario.Skepe;
        ptbFoto.Image = null;
        if (Funcionario.Foto != null && Funcionario.Foto.Length > 0)
        {
            ptbFoto.Image = ByteToImage(Funcionario.Foto)
        }

2º Metodo: que se encontra na classe BLL que contém a intrução SQL

public void CarregarFuncionario(clsFuncionarioDTO Funcionario,int comboBox)
    {
        string comando = "SELECT Funcionario,Email,Skype,Foto FROM tblFuncionarios WHERE  tblFuncionarios.CodFuncionario = " + comboBox + " ";
        string campo = "Funcionario"; 
        string campo1 = "Email";
        string campo2 = "Skype";
        string campo3 = "Foto";
        SqlDataReader seleccione = mMostrarDados(comando);
        while (seleccione.Read())
        {
            Funcionario.Funcionario = seleccione[campo].ToString();
            Funcionario.Email = seleccione[campo1].ToString();
            Funcionario.Skepe = seleccione[campo2]ToString(); 
            if (seleccione[campo3] != System.DBNull.Value)
                Funcionario.Foto = (byte[])seleccione[campo3];
        }  
        seleccione.Close();  
   }

3º Metodo: Que comunica diretamente com o banco de dados

class clsABD
{
    public SqlConnection conexao;
    private SqlCommand comando;
    private SqlCommandBuilder comandoB;
    private SqlDataAdapter seleccione;
    private SqlDataReader seleccione1;
    private DataTable tabela; 
    private string caminho = String.Format("Data Source=Dario;Initial Catalog=DB_EMPRESA;Integrated Security=True");
    public void LigarBD()
    {
        if (conexao != null)
            conexao.Close();
        try
        {
            conexao = new SqlConnection(caminho);
            conexao.Open();
        }
        catch (Exception ex)
        { 
            throw new Exception ("Erro! Aplicação não conseguio ligar a Base de Dados!"+ex.Message);
        }  
    }
    public void DesligarBD()
    {
        try
        {
            conexao = new SqlConnection(caminho);
            conexao.Close();
        }
        catch (Exception ex)
        {      
            throw new Exception ("Erro ao tentar desligar a Base de Dados!"+ex.Message);
        }    
    }
    public void mExecutarComandos(string comandoSQL)
    {
        LigarBD();
        comando = new SqlCommand(comandoSQL,conexao);
        try
        {
            comando.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw new Exception("Erro ao executar camandoSQL!" + ex.Message);
        }
        finally
        {
            DesligarBD();  
       }
    }
    public DataTable mCriarTabela(string comandoSQL)
    {
        LigarBD();
        tabela = new DataTable();
        seleccione = new SqlDataAdapter(comandoSQL,conexao);
        comandoB = new SqlCommandBuilder(seleccione);
        seleccione.Fill(tabela);
        DesligarBD();  
        return tabela; 
    }
    public SqlDataReader mCriarTabelaLeitura(string comandoSQL)
    {
        LigarBD();
        comando = new SqlCommand(comandoSQL, conexao);
        seleccione1  = comando.ExecuteReader();
        //DesligarBD(); 
        return seleccione1;  
    }
}

Esta tudo em conforme, carrega todos campos menos o campo Fotográria na PictureBox mais na hora de executar apresentea o seguinte erro:
Paramento Invalido exatamente no método que converte o byte para imagem.

D

Complicado, porque, sem ver o que está na base de dados e como foi gravado é complicado mesmo saber!

Criado 8 de janeiro de 2017
Ultima resposta 9 de jan. de 2017
Respostas 3
Participantes 2