[Desenvolvimento] Como salvar um arquivo de imagem no sistema de arquivos da APP

0

Olá pessoal, tudo bom?

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
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)

MCP

Post Relacionado: 

Share.

About Author

Bacharel em Ciência da Computação pela FIPP/Unoeste, Pós-Graduado em Desenvolvimento de Sistemas Web, Segurança da Informação e Avaliação do Ensino e da Aprendizagem, Professor universitário e responsável pelo setor de desenvolvimento de sistemas web da Universidade do Oeste Paulista. MCP e MCPS pela Microsoft e nas horas vagas dedica um pouco do seu tempo escrevendo posts técnicos sobre desenvolvimento de sistemas web, windows phone, gerenciamento de servidores e outros assuntos para a comunidade.