Salvando o Inkcanvas.
-
15-09-2020 - |
Pergunta
Na minha aplicação, o usuário pode criar vários objetos (chamados desenhos) cada um dos quais tem um surfercanvas, muito parecido com o PhotoPad (o aplicativo Photo Paint) nos sdksamples (fornecido pelo SDK MS Surface SP1). Qual seria a melhor maneira de salvar o conteúdo do Inkcanvas (o objeto de desenho), dado o fato de que pode haver dezenas ou mesmo centenas delas criadas.
Após alguma pesquisa, uma opção apareceu: convertê-lo para uma imagem, jpg ou png, mas esse método não parece tão escalável IMO.
seria possível armazenar os pontos em um banco de dados (preferencialmente sqlite)?
O objetivo é ser capaz de restaurar os desenhos (conteúdos dos inkcanvas) para edição posterior após o carregamento.
Solução 2
Já há um formato que a Microsoft usa para salvar os traços, que é ISF - de pé para o formato serializado de tinta que salva a coleção de traços em um arquivo.
No entanto em Este exemplo Cada desenho é salvo em um separado(mas pequeno tamanho). FACT FILE que pode ser facilmente carregado de volta para edição adicional ou mesmo convertendo (exportando) para o bitmap.
Então, um bom método seria salvar cada desenho em arquivos (mesmo que isso seja um pouco mais caro, time-sábio, do que simplesmente armazená-lo em um SQLite DB) e salvar o caminho de cada um, juntamente com um ID nobanco de dados para identificar cada sessão. Qualquer sugestão para otimizar mais este método a partir de um ponto de vista de escalabilidade?
Outras dicas
Salvar para uma imagem não é realmente viável para o que parece que você quer fazer porque restaurar linhas vetoriais de um bitmap é muito mais difícil e potencialmente perdido que o vetor da conversão de bitmap, além de não ser muito eficiente de umPerspectiva de densidade de dados.
Você pode escrever algum código para salvar e restaurar a coleção de linhas armazenadas na propriedade de traços.Isso permitiria que você reduza o tamanho dos seus dados até um mínimo e armazene facilmente em um banco de dados.Cada derrame tem alguns dados sobre como a linha se parece e um conjunto de pontos que compõem a linha.É bastante simples extrair e restaurar esses dados para outro inkcanvas ao recarregar.
Você também pode ser capaz de usar Xamlwriter / XamlReader para apenas serializar todo o Inkcanvas inteiras para XML, mas você precisaria colocar a nova instância desserializada em sua interface do usuário e certifique-se de que não haja nenhuma nomeação ou complicações de recurso emseu XAML que tende a causar erros com este método.