A transição entre o Windows Phone 7, 7.5, 8, 8.1 e agora o Windows Phone 10 (também se encaixam aqui as Universal APPs) trouxe mudanças no modo como codificamos alguns recursos para as APPs, sendo um deles, o método para armazenamento de arquivos no StorageFolder (IsolatedStorageFile) da própria aplicação.
Dada essa situação e também para responder a dúvida de um leitor, resolvi escrever esse post que tem por objetivo demonstrar como armazenar um arquivo de imagem no StorageFolder da APP.
PS: O procedimento para armazenar outros tipos de arquivos seria similar a esse
A codificação abaixo parte do pressuposto que você já possui um arquivo de imagem instanciado em um objeto da classe WriteableBitmap e que o mesmo é passado por parâmetro para nosso método que irá persisti-lo no sistema de arquivos da APP. Vejamos:
async private void SaveImage(WriteableBitmap wb)
{
try
{
//Mapeando o sistema de arquivos local da APP
StorageFolder folder = ApplicationData.Current.LocalFolder;
//Definindo o diretório dentro sistema de arquivos local que receberá as imagens
StorageFolder imgFolder = await folder.CreateFolderAsync("Images", CreationCollisionOption.OpenIfExists);
//Definindo o objeto do arquivo a ser persistido
StorageFile file = await imgFolder.CreateFileAsync("file_name", CreationCollisionOption.ReplaceExisting);
//Definindo o tipo do arquivo de imagem
Guid BitmapEnconderGuid = BitmapEncoder.JpegEncoderId;
//Gravando o arquivo
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEnconderGuid, stream);
Stream pixelStream = wb.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
await pixelStream.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("Image stored successfully.", "Information");
await dialog.ShowAsync();
}
catch (Exception)
{
throw new FileNotFoundException();
}
}
Abraços,
Eduardo Henrique Rizo (@eduardorizo)
Post Relacionado:
Comentários