Usuário com melhor resposta
Bitmap criado em tempo de execução como imagem para um ImageButton

Pergunta
-
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.
Respostas
-
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
- Marcado como Resposta Harley Araujo segunda-feira, 1 de outubro de 2012 11:52
Todas as Respostas
-
-
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
- Marcado como Resposta Harley Araujo segunda-feira, 1 de outubro de 2012 11:52