Xamarin.Forms - Mapeo decorativo de QRCode con SkiaSharp



Existe una popular biblioteca ZXing para generar / leer códigos de barras. Puede generar y leer muchos formatos diferentes: QRCode, Aztec y otros, más de 2 docenas. Para leer códigos, tiene un control listo ZXingScannerView. Se requiere un mínimo de código para agregar esta funcionalidad a su aplicación.

Sin embargo, al usar esta biblioteca, el código se mostrará canónicamente, en blanco y negro. Considere el caso cuando necesite representar un código de aspecto personalizado, por ejemplo, coloreado, con elementos redondeados o decorado de alguna otra manera (y para que continúe siendo leído bien).

Y la verdadera libertad de creatividad se abre solo si dibuja el código usted mismo, entonces todo está completamente en sus manos. Esto es lo que haremos con el ejemplo de un código QR.

La aplicación terminada está aquí .

Este artículo implementa un algoritmo tomado del artículo: el algoritmo de generación de código QR , el dibujo usando la biblioteca SkiaSharp se ve afectado, y se proporciona un ejemplo de aplicación de un generador de código QR con algunos elementos decorativos: resaltado, suavizado de líneas y fondo de un archivo png.

Explicaciones para la implementación


Comencemos creando una aplicación Xamarin.Forms vacía. Cree un nuevo proyecto en Visual Studio como "Aplicación móvil (Xamarin.Forms)", luego seleccione la plantilla "En blanco". En la sección "Plataformas", seleccione cualquiera, SkiaSharp funciona en muchas plataformas, incluso en Android e iOS.

Los proyectos de Android y .iOS no se modifican, tenemos una implementación multiplataforma.

En un proyecto multiplataforma:
Se agregaron dos imágenes de fondo: una para toda la página y otra para el código QR. Tenga en cuenta que tienen un "recurso integrado" de "acción de compilación".
La salida está en los archivos MainPage.xaml y MainPage.xaml.cs
La clase ImageResourceExtension para usar imágenes de recursos en xaml.

Toda la lógica está en el proyecto QRCodeEncoder. Se divide entre clases:

  • Codificador: codifica una cadena de datos en una secuencia de unos y ceros
  • Renderizador: coloque correctamente la matriz de datos resultante, agregue información general y devuelva el archivo png a Stream

El algoritmo de generación de código QR tiene muchos libros de referencia con números. Lo que todos quieren decir es ver el artículo "Algoritmo de generación de código QR" (ver arriba).

La codificación kanji (para caracteres) no se implementa en la aplicación.

Skiasharp


SkiaSharp es una biblioteca de dibujo 2D multiplataforma para .NET. Se basa en la Biblioteca de gráficos Skia de Google. Disponible como paquete NuGet:

nuget install SkiaSharp 

Documentación de Microsoft: SkiaSharp en Xamarin.Forms

Todos los dibujos tienen lugar en el método Draw de la clase Renderer. Por ejemplo, algunos elementos se hacen redondos, algunos son cuadrados:

 canvas.DrawCircle() canvas.DrawRect() 

algunos se destacan:

 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 }; 

y muestra cómo suavizar la transición entre elementos adyacentes.

Ejemplos


Y finalmente, ejemplos de algunos códigos QR interesantes de Internet:

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


All Articles