COMO MOSTRAR IMAGEM SALVA NO MSQL SERVER
Ola pessoal.
Eu salvei uma imagem numa tabela no banco de dados (sql server).
Agora (numa consulta) gostaria de mostrar essa imagem numa webpage num objeto image.
O exemplo que tenho abaixo mostra como fazer, entretanto o exemplo é para aplicação windows e não é para web.
O image1 (projeto web) não tem a propriedade .image como no (projeto windows). Ver destaque em negrito.
Como devo proceder?
Grato
if(MainForm.conn.State.Equals(ConnectionState.Closed))
MainForm.conn.Open ();
SqlCommand cmd=new SqlCommand ("Select picture from images where picname like '"+image+"';",MainForm.conn);
byte [] content = (byte[] )cmd.ExecuteScalar();
try
{
MemoryStream stream = new MemoryStream(content);
pic1.Image= Image.FromStream(stream);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
MessageBox.Show(ex.StackTrace.ToString ());
MainForm.conn.Open ();
SqlCommand cmd=new SqlCommand ("Select picture from images where picname like '"+image+"';",MainForm.conn);
byte [] content = (byte[] )cmd.ExecuteScalar();
try
{
MemoryStream stream = new MemoryStream(content);
pic1.Image= Image.FromStream(stream);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
MessageBox.Show(ex.StackTrace.ToString ());
Sidney Mendonça/
Curtidas 0
Respostas
Luiz Maia
12/02/2010
Ola,
Faça o seguinte:
SqlConnection c = new SqlConnection(“Data Source=NOTEBOOK;Initial Catalog=IMAGEM;Integrated Security=True;Pooling=False”);
c.Open();
SqlCommand k = new SqlCommand(“SELECT BINARIO FROM IMAGENS WHERE NOME = @NOME”, c);
k.Parameters.Add(“@NOME”, SqlDbType.VarChar, 50);
k.Parameters[“@NOME”].Value = comboBox1.Text;
byte[] imagemEmBytes = (byte[])k.ExecuteScalar();
MemoryStream ms = new MemoryStream();
ms.Write(imagemEmBytes, 0, imagemEmBytes.Length);
pictureBox1.Image = Image.FromStream(ms); Aguardo seu retorno. Abraços Att Luiz Maia
c.Open();
SqlCommand k = new SqlCommand(“SELECT BINARIO FROM IMAGENS WHERE NOME = @NOME”, c);
k.Parameters.Add(“@NOME”, SqlDbType.VarChar, 50);
k.Parameters[“@NOME”].Value = comboBox1.Text;
byte[] imagemEmBytes = (byte[])k.ExecuteScalar();
MemoryStream ms = new MemoryStream();
ms.Write(imagemEmBytes, 0, imagemEmBytes.Length);
pictureBox1.Image = Image.FromStream(ms); Aguardo seu retorno. Abraços Att Luiz Maia
GOSTEI 0
Sidney Mendonça/
12/02/2010
Olá Luiz.
No desenvolvimento web eu não achei esse pictureBox1.Image.
Eu estou usando o <asp:Image ID="Image1" runat="server" /> e esse não tem a propriedade .Image.
Que objejo é esse?
Grato
Sidney
GOSTEI 0
Luiz Maia
12/02/2010
Sydnei, veja esta novo exemplo:
No evento Load da página ExibirImagem.aspx vamos incluir o seguinte código que irá recuperar a imagem a partir do id obtido na rotina que devera fazer para recuperar a imagem que deseja, e exibi-la:
Esta pagina recebe o ID da imagem, recupera na base de dados e renderiza na pagina.
protected void Page_Load(object sender, EventArgs e)
{
try
{
int imagemID = Convert.ToInt32(Request.QueryString["id"]);
//nomeArquivo], [horaUpload], [MIME], [imagem]
using (SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
const string SQL = "SELECT [MIME], [imagem] FROM [Imagens] WHERE [id] = @id";
SqlCommand myCommand = new SqlCommand(SQL, Conn); myCommand.Parameters.AddWithValue("@id", imagemID); Conn.Open();
SqlDataReader myReader = myCommand.ExecuteReader();
if (myReader.Read()) { Response.ContentType = myReader["MIME"].ToString(); Response.BinaryWrite((byte[])myReader["imagem"]); } myReader.Close(); Conn.Close(); } } catch (Exception ex) { Response.Write(ex.ToString()); } } Aguardo seu retorno caso tenha alguma dificuldade. Abraços Att Luiz Maia
SqlCommand myCommand = new SqlCommand(SQL, Conn); myCommand.Parameters.AddWithValue("@id", imagemID); Conn.Open();
SqlDataReader myReader = myCommand.ExecuteReader();
if (myReader.Read()) { Response.ContentType = myReader["MIME"].ToString(); Response.BinaryWrite((byte[])myReader["imagem"]); } myReader.Close(); Conn.Close(); } } catch (Exception ex) { Response.Write(ex.ToString()); } } Aguardo seu retorno caso tenha alguma dificuldade. Abraços Att Luiz Maia
GOSTEI 0
Sidney Mendonça/
12/02/2010
Olá Luiz.
Em primeiro lugar obrigado pela atenção.
O último exemplo que você me enviou eu já tinha utilizado, obtendo exemplos que consegui na internet.
Entretanto o response abre uma nova tela para exibir a imagem.
O que eu gostaria de fazer era de usar o Control Image ou algo parecido, pois com ele eu poderia formatar a tela, ter vários Control Image, e até formatar o Control Image do tamanho que eu quiser.
Grato
GOSTEI 0
Luiz Maia
12/02/2010
Ola Sidney, neste caso so terá como fazê-lo usando o recurso de Bitmap.
Crie um bitmapImagem e faça dele o source do controle Imagem.
É um pouco mais complicado, segue um exemplo do proprio site da MSDN:
static T loadResource<T>(string path)
{
T c = default(T);
StreamResourceInfo sri = Application.GetResourceStream(new Uri(path, UriKind.Relative));
if (sri.ContentType == "application/xaml+xml")
{
c = (T)XamlReader.Load(sri.Stream);
}
else if (sri.ContentType.IndexOf("image") >= 0)
{
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = sri.Stream;
bi.EndInit();
if (typeof(T) == typeof(ImageSource))
{
c = (T)((object)bi);
}
else if (typeof(T) == typeof(Image))
{
Image img = new Image();
img.Source = bi;
c = (T)((object)img);
}
}
sri.Stream.Close();
sri.Stream.Dispose();
return c;
}
Abraços e aguardo sua reposta se der algo errado, ok?
Att
Luiz Maia
GOSTEI 0
Sidney Mendonça/
12/02/2010
Olá Luiz.
Algumas dúvidas:
1) O que devo passar como parâmetro (no string path) da loadResource?
2) Como atribuir o retorno ao Control image do webform. Grato
1) O que devo passar como parâmetro (no string path) da loadResource?
2) Como atribuir o retorno ao Control image do webform. Grato
GOSTEI 0
Luiz Maia
12/02/2010
Na verdade não precisa de todo o metodo não, so mandei como referencia.
Você vai precisar somente de :
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = sri.Stream;
bi.EndInit();
imgagem1.Source = bi;
Qualquer coisa, me avise....
Abraços
Att
Luiz Maia
GOSTEI 0
Sidney Mendonça/
12/02/2010
Olá Luiz.
Entendi o que faz o método numa boa, só não consigo entender como eu o utilizo para mostrar essa imagem na tela.
1) Estou trabalhando com WEBFORM
2) Tenho um Control Image no WEBFORM
3) E o Control Image só tem a propriedade URL. Não tem nada parecido com .Source.
Se estamos falando da mesma coisa?
[]s
Sidney
GOSTEI 0
Luiz Maia
12/02/2010
Sydnei,
Você pode tentar usar um metodo que converte para Imagem, como abaixo:
Voce passa o array e ele te retorna a Imagem:
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
Outra forma, testada e funcionando corretamente, ja te sugeri.
É vc fazer uma pagina generica para transformar os bits em Imagem, segue exemplo:
Crie um WebForm... chamado por exemplo LoadImage.aspx
Cole o codigo abaixo:
if (Request.QueryString["Id"] != null)
{
int Id = Convert.ToInt32(Request.QueryString["Id"].ToString());
byte[] image = null;
//You will have to add your connection information and grab the image from the database
// ToDo: Load binary image into image variable;
if (image!=null)
{
MemoryStream ms = new MemoryStream(image);
Bitmap b = new Bitmap(Image.FromStream(ms));
Response.ContentType = "image/jpeg";
b.Save(Response.OutputStream, ImageFormat.Jpeg);
}
else
{
Bitmap b = new Bitmap(Image.FromFile(Server.MapPath("images/noimage.png")));
Response.ContentType = "image/jpeg";
b.Save(Response.OutputStream, ImageFormat.Jpeg);
}
}
else
{
Bitmap b = new Bitmap(Image.FromFile(Server.MapPath("images/noimage.png")));
Response.ContentType = "image/jpeg";
b.Save(Response.OutputStream, ImageFormat.Jpeg);
}Na pagina que vc quer dar o bind na imagem, altere o ImageUrl seguindo a instrução abaixo:
Image1.ImageUrl = "LoadImage.aspx?Id=1";
Aguardo retorno.AttLuiz Maia
Cole o codigo abaixo:
if (Request.QueryString["Id"] != null)
{
int Id = Convert.ToInt32(Request.QueryString["Id"].ToString());
byte[] image = null;
//You will have to add your connection information and grab the image from the database
// ToDo: Load binary image into image variable;
if (image!=null)
{
MemoryStream ms = new MemoryStream(image);
Bitmap b = new Bitmap(Image.FromStream(ms));
Response.ContentType = "image/jpeg";
b.Save(Response.OutputStream, ImageFormat.Jpeg);
}
else
{
Bitmap b = new Bitmap(Image.FromFile(Server.MapPath("images/noimage.png")));
Response.ContentType = "image/jpeg";
b.Save(Response.OutputStream, ImageFormat.Jpeg);
}
}
else
{
Bitmap b = new Bitmap(Image.FromFile(Server.MapPath("images/noimage.png")));
Response.ContentType = "image/jpeg";
b.Save(Response.OutputStream, ImageFormat.Jpeg);
}Na pagina que vc quer dar o bind na imagem, altere o ImageUrl seguindo a instrução abaixo:
Image1.ImageUrl = "LoadImage.aspx?Id=1";
Aguardo retorno.AttLuiz Maia
GOSTEI 0
Sidney Mendonça/
12/02/2010
Você tinha
GOSTEI 0
Sidney Mendonça/
12/02/2010
Você tinha esquecido
GOSTEI 0
Sidney Mendonça/
12/02/2010
Você tinha esquecido de
GOSTEI 0
Sidney Mendonça/
12/02/2010
Você tinha esquecido de mencionar
GOSTEI 0
Sidney Mendonça/
12/02/2010
Você tinha esquecido de mencionar esse
GOSTEI 0
Sidney Mendonça/
12/02/2010
Olá Luiz
Você tinha esquecido de mencionar o seguinte detalhe, que você mencionou no último Post:
Na pagina que vc quer dar o bind na imagem, altere o ImageUrl seguindo a instrução abaixo:
Image1.ImageUrl = "LoadImage.aspx?Id=1"; Por isso que eu não estava entendendo. Vou testar e darei retorno. Grato Sidney
Image1.ImageUrl = "LoadImage.aspx?Id=1"; Por isso que eu não estava entendendo. Vou testar e darei retorno. Grato Sidney
GOSTEI 0
Luiz Maia
12/02/2010
Ok Sydnei, fico no aguardo.
Abraços
Att
Luiz Maia
GOSTEI 0
Sidney Mendonça/
12/02/2010
Grato.
Chamado fechado.
GOSTEI 0