- PVSM.RU - https://www.pvsm.ru -

Для вывода/чтения штрихкодов есть популярная библиотека ZXing [1]. Она умеет выводить и считывать много разных форматов: QRCode, Aztec и другие, более 2 десятков. Для считывания кодов в ней есть готовый контрол ZXingScannerView. Требуется минимум кода, чтобы добавить этот функционал в ваше приложение.
Однако, при помощи этой библиотеки код будет изображён канонически, чёрным по белому. Рассмотрим случай, когда надо изобразить код нестандартного вида, например цветной, со скруглёнными элементами или украшенный каким-либо другим способом (и чтобы он при этом продолжал хорошо считываться).
И настоящая свобода творчества открывается только если нарисовать код самому — тогда всё полностью в ваших руках. Этим и займёмся на примере QR-кода.
Готовое приложение находится здесь [2].
В данной статье реализован алгоритм, который взят из статьи: Алгоритм генерации QR-кода [3], затронуто рисование при помощи библиотеки SkiaSharp [4] и дан пример приложения генератора QR-кодов с некоторыми декоративными элементами — выделение цветом, сглаживание линий и фон из png-файла.
Начнём с создания пустого приложения Xamarin.Forms. Создаём в Visual Studio новый проект типа «Mobile App(Xamarin.Forms)» далее выбираем шаблон «Blank». В разделе «Platforms» выберите любые, SkiaSharp работает на множестве платформ, в том числе на android и iOS.
Проекты .Android и .iOS оставлены без изменений, у нас кроссплатформенная реализация.
В кроссплатформенном проекте:
добавлено два фоновых изображения — одно для всей страницы, а другое для QR-кода. Обратите внимание, что Build Action у них стоит “Embedded resource”.
Вывод осуществляется в файлах MainPage.xaml и MainPage.xaml.cs
Класс ImageResourceExtension для использования картинки из ресурсов в xaml.
Вся логика находится в проекте QRCodeEncoder. Она разделена между классами:
В алгоритме генерации QR-кода много справочников с цифрами. Что все они означают смотрите в статье «Алгоритм генерации QR-кода» (см. выше).
Кодирование кандзи (для иероглифов) в приложении не реализовано.
SkiaSharp [4] — это кроссплатформенная библиотека для 2D-рисования для .NET. Она основана на Skia Graphics Library [5] от Google. Доступна как NuGet-пакет:
nuget install SkiaSharp
Документация от Microsoft: SkiaSharp в Xamarin.Forms [6]
Всё рисование происходит в методе Draw класса Renderer. Для примера некоторые элементы сделаны круглыми, некоторые квадратными:
canvas.DrawCircle()
canvas.DrawRect()
некоторые выделены цветом:
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 };
и показано как сгладить переход между соседними элементами.
Ну и напоследок примеры некоторых интересных QR-кодов из интернета:






Автор: aleks42
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-2/335850
Ссылки в тексте:
[1] ZXing: https://github.com/Redth/ZXing.Net.Mobile
[2] здесь: https://github.com/aleks42/QRCodeDrawApp
[3] Алгоритм генерации QR-кода: https://habr.com/ru/post/172525/
[4] SkiaSharp: https://github.com/mono/SkiaSharp
[5] Skia Graphics Library: https://skia.org/
[6] SkiaSharp в Xamarin.Forms: https://docs.microsoft.com/ru-ru/xamarin/xamarin-forms/user-interface/graphics/skiasharp/
[7] Источник: https://habr.com/ru/post/474906/?utm_campaign=474906&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.