none
Problema ao exibir imagem... RRS feed

  • Pergunta

  • Olá a todos! Sou novato em silverlight e estou criando um projeto que me retorna uma imagem de um banco de dados. Ja descobri como salvar a imagem, mas na hora de buscar a imagem e exibí-la em um "Image Control", estou recebendo a seguinte mensagem:

    Error HRESULT E_FAIL has been returned from a call to a COM component.

    Uso a seguinte função para transformar o array de byte[] em bitmap:

    public static BitmapImage GetImage(byte[] rawImageBytes) 
        { 
          BitmapImage imageSource = null; 
          MemoryStream stream = new MemoryStream(rawImageBytes); 
          stream.Seek(0, SeekOrigin.Begin); 
          BitmapImage b = new BitmapImage(); 
          b.SetSource(stream); 
          imageSource = b; 
    
          return imageSource; 
        }

    e no evento "completed" do retorno da foto:

    void Busca_Foto_Completed(object sender, Busca_FotoCompletedEventArgs e)
        {
          foreach (Cls_Foto foto in e.Result.ToList())
          {
            BitmapImage image = Converter.GetImage(foto.Foto);
            DocImg.Source = image;
          }
        }
    

    Quando debugo no Fiddler, os dados binarios são todos retornados, mas não são exibidos no controle Image.

    Se pudere me ajudar...;

    Obs.: Estou usando WCF e MySql com Silverlight

    Muito obrigado...

    sexta-feira, 11 de março de 2011 01:32

Respostas

  • Boa noite Americo!

    Desculpe a demora para responder a primeira resposta. Estava curtindo minha filhinha que hoje (25/03) faz um mês de vida, e acabei ficando um pouco fora.

    Mas, respondendo a pergunta anterior; sim. Consegui resolver. Da forma que fiz, e a forma que me mostrou estão corretas. O fato é que estava trazendo as imagens do banco, através de WCF. Mas quando estava gravando as fotos no banco, elas estavam salvando com erros. Por isso não conseguia buscá-las.

    Agradeço muito pela resposta..., até breve.

    sábado, 26 de março de 2011 00:17

Todas as Respostas

  • Olá v-lob

    Qual o tipo de arquivo que você está tentando mostrar é uma imagem de que tipo?

    Tentei utilizar seu exemplo com FileDialog e funcionou perfeitamente mas somente para arquivos do tipo jpg e png. Veja exemplo:

    <UserControl x:Class="MostrarImagemStream.MainPage"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
     <Grid x:Name="LayoutRoot">
      <Grid.RowDefinitions>
       <RowDefinition/>
       <RowDefinition/>
      </Grid.RowDefinitions>
    
      <Image x:Name="docImg" Grid.Row="1" Width="500" Height="500" ></Image>
      <Button x:Name="btn" Grid.Row="0" Click="btn_Click"></Button>
    
     </Grid>
    </UserControl>
    

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.IO;
    
    namespace MostrarImagemStream
    {
     public partial class MainPage : UserControl
     {
      public MainPage()
      {
       InitializeComponent();
      }
    
      
    
      
      public static BitmapImage GetImage(byte[] rawImageBytes)
      {   
       MemoryStream stream = new MemoryStream(rawImageBytes);
       stream.Seek(0, SeekOrigin.Begin);      
       BitmapImage imageSource = new BitmapImage();   
       imageSource.SetSource(stream);
       return imageSource;
      }
    
      private void btn_Click(object sender, RoutedEventArgs e)
      {
    
       //Criar e instanciar objeto tipo caixa file dialog
       OpenFileDialog ofd = new OpenFileDialog(); 
       
       //Filtrar os tipos Imagens
       ofd.Filter = "Image Files|*.jpg;*.png;*.jpeg|All Files|*.*"; 
       ofd.FilterIndex = 1; 
       
       //Verificar se a caixa file dialog está aberta
       if (true == ofd.ShowDialog()) {    
        
       //Armazenar o stream da imagem em um arquivo tipo filestream
       FileStream fs = ofd.File.OpenRead();   
       
       //Criar e instanciar um objeto tipo byte com o tamanho do arquivo
       byte[] ByteArray = new Byte[fs.Length];      
       
       //Ler o arquivo para transforma-lo em Array
       fs.Read(ByteArray, 0, ByteArray.Length);
           
       //Criar e instanciar o objeto tipo BitmapImage
           
       BitmapImage img = GetImage(ByteArray);
       docImg.Width = img.PixelWidth;
       docImg.Height = img.PixelHeight;
    
       docImg.Source = img;  
       }
      }   
    
    
     }
    }
    
    

    ref http://forums.silverlight.net/forums/p/95609/219040.aspx


    Américo Arvani
    MCP Frw web 2.0
    MCP Frw web/win 3.5
    Se ajudou , marque como resposta.
    http://americoarvani.blogspot.com

    • Sugerido como Resposta Américo Arvani sexta-feira, 25 de março de 2011 12:02
    quarta-feira, 16 de março de 2011 13:53
  • Bom dia, v-lob

    Conseguiu resolver o problema ?


    Américo Arvani
    MCP Frw web 2.0
    MCP Frw web/win 3.5
    Se ajudou , marque como resposta.
    http://americoarvani.blogspot.com
    sexta-feira, 25 de março de 2011 11:42
  • Boa noite Americo!

    Desculpe a demora para responder a primeira resposta. Estava curtindo minha filhinha que hoje (25/03) faz um mês de vida, e acabei ficando um pouco fora.

    Mas, respondendo a pergunta anterior; sim. Consegui resolver. Da forma que fiz, e a forma que me mostrou estão corretas. O fato é que estava trazendo as imagens do banco, através de WCF. Mas quando estava gravando as fotos no banco, elas estavam salvando com erros. Por isso não conseguia buscá-las.

    Agradeço muito pela resposta..., até breve.

    sábado, 26 de março de 2011 00:17
  • Olá, v-lob

    Deseje um feliz aniversário de 1 mês para sua filha, até a próxima!!!


    Américo Arvani
    MCP Frw web 2.0
    MCP Frw web/win 3.5
    Se ajudou , marque como resposta.
    http://americoarvani.blogspot.com
    sábado, 26 de março de 2011 11:57