Jump to content

Converter Binário para Imagem


dianaemanuel
 Share

Recommended Posts

Bom dia,

Eu tenho uma imagem que está na base de dados como <binary data>, e queria converte la para poder visualizá-la numa página. Já encontrei vários Post sobre isto mas ainda não consegui obter sucesso.

Aqui vai o código que está no code-behind:

public static Image BinaryToImage(System.Data.Linq.Binary binaryData)
    {
        if (binaryData == null) return null;

        byte[] buffer = binaryData.ToArray();
        MemoryStream memStream = new MemoryStream();
        memStream.Write(buffer, 0, buffer.Length);
        return System.Drawing.Image.FromStream(memStream);
    }

Mas o return dá o seguinte erro: Cannot implicitly convert type 'System.Drawing.Image' to 'System.Web.UI.WebControls.Image', e não sei como resolve-lo.

na página aspx tenho a imagem com o seguinte código:

<asp:Image ID="Image1" runat="server" ImageUrl='<%# BinaryToImage(Eval("Picture")) %>'/>

Será que alguém me pode ajudar?

Cumprimentos

dianaemanuel

Link to comment
Share on other sites

Assim de repente lembro-me de 2 soluções:

- Copiar a tua imagem da base de dados para o disco e aceder a essa localização.

- Criar um handler (ashx) que recebe o id de uma imagem por query string e retorna a imagem no response do pedido.

A 2ª opção parece-me melhor.

Tens exemplos na net de como fazer os 2 casos, até os procurava, mas agora não vou ter tempo.

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Bons dias,

Eu não tenho a parte de guardar a imagem porque isso é outra aplicação que faz.

Eu criei uma página nova onde só tem a imagem, onde no load da página tem o seguinte código:

protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection cn = new SqlConnection((String)Session["StrConn"]);
        cn.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = cn;

        cmd.CommandText = "Select [Picture] From [Employee] WHERE [No_]='" + Session["Employee"] + "'";
        SqlDataReader reader = cmd.ExecuteReader();
        reader.Read();
        string imagem = Convert.ToString(reader.GetSqlBinary(0));
        
        //int buffersize = 1024 * 16;
        
        //byte[] buffer = (byte[])reader["Picture"];

        //Response.ContentType = "image/bmp";
        //Response.BinaryWrite(buffer);
   
        byteArrayToImage((byte[])reader["Picture"]);
        //BinaryToImage((byte[])reader["Picture"]);

        reader.Close();
        cn.Close();
    }

    public System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)
    {
        MemoryStream ms = new MemoryStream(byteArrayIn);
        System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms); ------> Ocorre me erro aqui, diz que o parâmetro não é válido
        return returnImage;
    }

    public static System.Drawing.Image BinaryToImage(System.Data.Linq.Binary binaryData)
    {
        if (binaryData == null) return null;

        byte[] buffer = binaryData.ToArray();
        MemoryStream memStream = new MemoryStream();
        memStream.Write(buffer, 0, buffer.Length);
        return System.Drawing.Image.FromStream(memStream);
    }


E no load da página que mostra a imagem tem este código

Image1.ImageUrl = ("~/Aspx/Exibir Imagem.aspx?id=" + Session["Employee"]);   

Quando eu corro a página dá me erro onde está assinalado, já procurei sobre este erro mas ainda não consegui o resolver.

Cumprimentos

dianamemanuel

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.