Xamarin.Forms - Mapeamento QRCode decorativo com SkiaSharp



Existe uma biblioteca ZXing popular para saída / leitura de códigos de barras. Pode produzir e ler muitos formatos diferentes: QRCode, Aztec e outros, mais de duas dúzias. Para leitura de códigos, ele possui um ZXingScannerView de controle pronto. É necessário um mínimo de código para adicionar essa funcionalidade ao seu aplicativo.

No entanto, usando esta biblioteca, o código será exibido canonicamente, em preto e branco. Considere o caso em que você precisa retratar um código de aparência personalizada, por exemplo, colorido, com elementos arredondados ou decorado de outra maneira (e para que ele continue a ser lido bem).

E a verdadeira liberdade de criatividade só se abre se você desenhar o código - tudo estará completamente em suas mãos. É o que faremos com o exemplo de um código QR.

A aplicação finalizada está aqui .

Este artigo implementa um algoritmo retirado do artigo: o algoritmo de geração de código QR , o desenho usando a biblioteca SkiaSharp é afetado e um exemplo de aplicação de um gerador de código QR com alguns elementos decorativos é fornecido - destaque, suavização de linhas e plano de fundo de um arquivo png.

Explicações para implementação


Vamos começar criando um aplicativo Xamarin.Forms vazio. Crie um novo projeto no Visual Studio, como "Aplicativo móvel (Xamarin.Forms)" e selecione o modelo "Em branco". Na seção "Plataformas", selecione qualquer, o SkiaSharp funciona em várias plataformas, incluindo Android e iOS.

Projetos .Android e .iOS permanecem inalterados, temos uma implementação de plataforma cruzada.

Em um projeto de plataforma cruzada:
duas imagens de fundo foram adicionadas - uma para a página inteira e a outra para o código QR. Observe que eles têm um "recurso incorporado" de "Ação de compilação".
A saída está nos arquivos MainPage.xaml e MainPage.xaml.cs
A classe ImageResourceExtension para usar imagens de recursos no xaml.

Toda a lógica está no projeto QRCodeEncoder. É dividido entre classes:

  • Codificador - codifica uma sequência de dados em uma sequência de uns e zeros
  • Renderer - posicione corretamente a matriz de dados resultante, adicione informações gerais e retorne o arquivo png ao Stream

O algoritmo de geração de código QR possui muitos livros de referência com números. O que todos eles significam, consulte o artigo "Algoritmo de geração de código QR" (veja acima).

A codificação Kanji (para caracteres) não é implementada no aplicativo.

Skiasharp


SkiaSharp é uma biblioteca de desenhos 2D multiplataforma para .NET. É baseado na Biblioteca Gráfica Skia do Google. Disponível como um pacote NuGet:

nuget install SkiaSharp 

Documentação da Microsoft: SkiaSharp no Xamarin.Forms

Todo desenho ocorre no método Draw da classe Renderer. Por exemplo, alguns elementos são redondos, outros são quadrados:

 canvas.DrawCircle() canvas.DrawRect() 

alguns são destacados:

 var paint1 = new SKPaint { IsAntialias = true, Style = SKPaintStyle.Fill, Color = SKColors.DeepSkyBlue }; var paint2 = new SKPaint { IsAntialias = true, Style = SKPaintStyle.Fill, Color = SKColors.Red }; var paint3 = new SKPaint { IsAntialias = true, Style = SKPaintStyle.Fill, Color = SKColors.Gold }; 

e mostra como suavizar a transição entre elementos adjacentes.

Exemplos


E, finalmente, exemplos de alguns códigos QR interessantes da Internet:

Source: https://habr.com/ru/post/pt474906/


All Articles