Segue uma dica para converter um arquivo armazenado localmente no Windows Phone (ou Universal APPs) para um objeto do tipo BitmapImage.
Em primeiro lugar devemos recuperar o arquivo da imagem e armazena-lo em um objeto do tipo StorageFile. Exemplo:
string nomeArquivo = "teste"; //O objeto folder irá representar o "sistema de arquivos" da APP StorageFolder folder = ApplicationData.Current.LocalFolder; //O objeto imgFolder irá representar o diretório onde as imagens estão armazenadas StorageFolder imgFolder = await folder.GetFolderAsync("Images"); //Supondo que os arquivos de imagens fiquem no diretório de nome Images //O objeto file representa o arquivo da imagem que você está recuperando StorageFile file = await imgFolder.GetFileAsync(nomeArquivo);
Depois de obter o arquivo e coloca-lo em um objeto do tipo StorageFile, basta fazer a conversão para BitmapImage. Claro que para isso funcionar o arquivo recuperado anteriormente tem que ser do tipo de uma imagem. Exemplo:
//Esse trecho de código é continuação do anterior e o objeto file representa o arquivo recuperado BitmapImage img = new BitmapImage(new Uri(file.Path, UriKind.Absolute));
Abraços,
Eduardo Henrique Rizo
Post Relacionado:
[twitter-follow screen_name=’eduardorizo’ show_count=’yes’]
Pingback: Free: Curso Windows Phone – Vários tópicos | Blog do Eduardo H. Rizo
Olá, tenho uma duvida: como eu salvo uma imagem na minha aplicação? Quero colocar uma foto de perfil, mas não sei como fazer isso, eu consigo abrir a galeria de fotos do Windows Phone 8.1 e escolher a imagem, mas não sei como salvar ela no aplicativo e quando voltar carregar esta imagem de novo. Por favor me ajuda, ja procurei em vários lugares.
Obs: Alguns lugares achei métodos que não funcionam no meu Visual Studio 2013. Por exemplo, o método imagem.Save ou imagem.SaveJpeg.
Obrigado!
Boa tarde Samuel, tudo bom?
Para responder a sua dúvida resolvi escrever um novo post em meu blog. Acesse https://www.eduardorizo.com.br/2015/08/08/curso-windows-phone-como-salvar-um-arquivo-de-imagem-no-sistema-de-arquivos-da-app/
Grande abraço,
Eduardo H. Rizo
Boa tarde, MUUUITO obrigado pelo post. Mas agora to tendo outro probleminha :/ eu consigo salvar e carregar a imagem, mas quando carrego ela não aparece. Não sei o que acontece mas ela carrega e pelo jeito fica toda preta porque eu consigo clicar nela. Obrigado!
Segue abaixo meu código:
private void Button_Click(object sender, RoutedEventArgs e)
{
ImagePath = string.Empty;
FileOpenPicker filePicker = new FileOpenPicker();
filePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
filePicker.ViewMode = PickerViewMode.Thumbnail;
// Filter to include a sample subset of file types
filePicker.FileTypeFilter.Clear();
filePicker.FileTypeFilter.Add(“.bmp”);
filePicker.FileTypeFilter.Add(“.png”);
filePicker.FileTypeFilter.Add(“.jpeg”);
filePicker.FileTypeFilter.Add(“.jpg”);
filePicker.PickSingleFileAndContinue();
view.Activated += viewActivated;
}
private async void viewActivated(CoreApplicationView sender, IActivatedEventArgs args1)
{
FileOpenPickerContinuationEventArgs args = args1 as FileOpenPickerContinuationEventArgs;
if (args != null)
{
if (args.Files.Count == 0) return;
view.Activated -= viewActivated;
StorageFile storageFile = args.Files[0];
var stream = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
var bitmapImage = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
await bitmapImage.SetSourceAsync(stream);
var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream);
imagemContato.Source = bitmapImage;
WriteableBitmap write = new WriteableBitmap(bitmapImage.PixelWidth, bitmapImage.PixelHeight);
SaveImage(write);
}
}
private async void SaveImage(WriteableBitmap wb)
{
try
{
//Mapeando o sistema de arquivos local da APP
StorageFolder folder = ApplicationData.Current.LocalFolder;
//Definindo diretório dentro do sistema de arquivos local que receberá as imagens
StorageFolder imgFolder = await folder.CreateFolderAsync(“imagens”, CreationCollisionOption.OpenIfExists);
//Definindo objeto do arquivo a ser persistido
StorageFile file = await imgFolder.CreateFileAsync(“teste”, CreationCollisionOption.ReplaceExisting);
//Definindo tipo de arquivo da imagem
Guid BitmapEncoderGuid = BitmapEncoder.JpegEncoderId;
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoderGuid, stream);
Stream pixelsStream = wb.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelsStream.Length];
await pixelsStream.ReadAsync(pixels, 0, pixels.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore,
(uint) wb.PixelWidth,
(uint) wb.PixelHeight,
96.0, 96.0, pixels);
await encoder.FlushAsync();
}
var dialog = new MessageDialog(“Imagem salva com sucesso!”, “Informação”);
await dialog.ShowAsync();
}
catch (Exception)
{
throw new FileNotFoundException();
}
}
private async void LoadImage()
{
string nomeArquivo = “teste”;
//O objeto folder irá representar o sistema de arquivos da APP
StorageFolder folder = ApplicationData.Current.LocalFolder;
//O objeto imgFolder irá representar o diretório da imagem
StorageFolder imgFolder = await folder.GetFolderAsync(“imagens”);
//O objeto file representa o arquivo da imagem a ser recuperado
StorageFile file = await imgFolder.GetFileAsync(nomeArquivo);
BitmapImage img = new BitmapImage(new Uri(file.Path, UriKind.Absolute));
imagemContato.Source = img;
var dialog = new MessageDialog(“Imagem carregada com sucesso!”, “Informação”);
await dialog.ShowAsync();
}