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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top