none
Bitmap criado em tempo de execução como imagem para um ImageButton

    Question

  • Bom dia.

    Gostaria de saber como faço para usar um bitmap criado em tempo de execução como background de um ImageButton.

    A situação é a seguinte. Eu pego uma imagem que eu tenho guardada, escrevo informações nela. Logo após eu preciso que esta imagem já escrita seja o background de meu ImageButton, também criado em tempo real.

    É possível usar a propriedade ImageUrl do ImageButton para usar este bitmap recém criado, ou é necessário que eu guarde esse bitmap em disco e depois o chame na propriedade ImageUrl? Algo como "img/bitmap1.bmp".

    Se tiverem ideias diferentes de como solucionar o problema, sou todo ouvidos.

    Obrigado pela atenção.

    Thursday, September 27, 2012 3:39 PM

Answers

  • Olá Eric,

    A solução mais directa é usar a nova possibilidade de injectar a imagem em base64 directamente no markup:

        Byte[] bytes = imageBytes;
     
        string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
                     
        imageButton.ImageUrl = "data:image/bmp;base64," + base64String;

    Esta solução tem a desvantagem de não permitir uso da cache entre postbacks (o base64 tem que ser sempre enviado).

    Outra solução muito usada é guardar a imagem em Cache com uma chave gerada (pode ser um Guid) e criar um HttpHandler que recebe o tal Guid, extrai a imagem da Cache e devolve o conteudo com o mime type adequado:

        Byte[] bytes = imageBytes;
     
        string key = Guid.NewGuid().ToString("B");
        Cache[key] = bytes;
        imageButton.ImageUrl = "images.ashx?k="+key;

    e o httphandler teria algo semelhante a:

        string imageKey = HttpContext.Current.Request.Params["k"];
        byte[] buffer = Cache[imageKey];
        context.Response.ContentType = "image/bmp";
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);


    Nuno Gomes http://nunogomes.net

    Friday, September 28, 2012 12:15 AM

All replies

  • Erick acho que o mais fácil é vc salvar em uma pasta temporária e usar a mesma

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    Thursday, September 27, 2012 5:42 PM
  • Olá Eric,

    A solução mais directa é usar a nova possibilidade de injectar a imagem em base64 directamente no markup:

        Byte[] bytes = imageBytes;
     
        string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
                     
        imageButton.ImageUrl = "data:image/bmp;base64," + base64String;

    Esta solução tem a desvantagem de não permitir uso da cache entre postbacks (o base64 tem que ser sempre enviado).

    Outra solução muito usada é guardar a imagem em Cache com uma chave gerada (pode ser um Guid) e criar um HttpHandler que recebe o tal Guid, extrai a imagem da Cache e devolve o conteudo com o mime type adequado:

        Byte[] bytes = imageBytes;
     
        string key = Guid.NewGuid().ToString("B");
        Cache[key] = bytes;
        imageButton.ImageUrl = "images.ashx?k="+key;

    e o httphandler teria algo semelhante a:

        string imageKey = HttpContext.Current.Request.Params["k"];
        byte[] buffer = Cache[imageKey];
        context.Response.ContentType = "image/bmp";
        context.Response.OutputStream.Write(buffer, 0, buffer.Length);


    Nuno Gomes http://nunogomes.net

    Friday, September 28, 2012 12:15 AM