GARANTIR DESCONTO

Fórum COMO MOSTRAR IMAGEM SALVA NO MSQL SERVER #15619

12/02/2010

0

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 ());
Sidney Mendonça/

Sidney Mendonça/

Responder

Posts

12/02/2010

Luiz Maia

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  
Responder

Gostei + 0

12/02/2010

Sidney Mendonça/

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  
Responder

Gostei + 0

18/02/2010

Luiz Maia

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
Responder

Gostei + 0

18/02/2010

Sidney Mendonça/

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
Responder

Gostei + 0

18/02/2010

Luiz Maia

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  
Responder

Gostei + 0

18/02/2010

Sidney Mendonça/

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
Responder

Gostei + 0

19/02/2010

Luiz Maia

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
Responder

Gostei + 0

23/02/2010

Sidney Mendonça/

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
Responder

Gostei + 0

23/02/2010

Luiz Maia

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
Responder

Gostei + 0

23/02/2010

Sidney Mendonça/

Você tinha
Responder

Gostei + 0

23/02/2010

Sidney Mendonça/

Você tinha esquecido
Responder

Gostei + 0

23/02/2010

Sidney Mendonça/

Você tinha esquecido de
Responder

Gostei + 0

23/02/2010

Sidney Mendonça/

Você tinha esquecido de mencionar
Responder

Gostei + 0

23/02/2010

Sidney Mendonça/

Você tinha esquecido de mencionar esse
Responder

Gostei + 0

23/02/2010

Sidney Mendonça/

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar