Usuário com melhor resposta
Problema ao exibir imagem...

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.
- Marcado como Resposta Fábio ---- v-lob sábado, 26 de março de 2011 00:18
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.comsexta-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.
- Marcado como Resposta Fábio ---- v-lob sábado, 26 de março de 2011 00:18
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.comsábado, 26 de março de 2011 11:57