День QR-кодов. Три в одном
Сегодняшнее сообщение посвящено не одному проекту, а трем. Да, три в один день...
Мы все видели QR-коды, они встречаются на сайтах, наклейках, телевидении и даже татуировках. Несколько месяцев назад мы рассказывали о том, как использовать их в приложениях Windows Phone 7.1(5), «Window Phone 7.5, ZXing и QR-коды». Сегодня мы собираемся поговорить о трех других проектах с QR-кодами, один поможет вам создавать их, а два других предоставят иные способы их использования в приложениях Windows Phone 7.1(5).
Описание проекта
Цель проекта – создать простую в использовании полностью управляемую .Net-библиотеку, обеспечивающую работу с QR-кодами в соответствии со стандартом ISO/IEC 18004. Планировалось реализовать следующие возможности: кодирование, рендеринг (на экран, в файл и в поток), декодирование, определение и распознавание, художественные QR-коды.Цель проекта
Цель проекта – создать простую в использовании управляемую .Net-библиотеку для:
- Создания битовой матрицы QR-кода из текста – кодирование.
- Рендеринг битовой матрицы QR-кода на экран, в файл изображения или поток.
- Рендеринг так называемых «художественных» QR-кодов (см. ниже)
- Декодирование QR-кода, заданного битовой матрицей.
- Обнаружение и распознавание QR-кодов.
- Библиотека должна поддерживать Windows Phone 7 и Silverlight
Только что начат еще один проект с открытым кодом QrCode.Net на qrcodenet.codeplex.com.
Основы
Недавно я искал реализацию генератора QR-кодов на .NET. Большинство компонентов либо использовало онлайн-сервисы для генерации или распознавания QR-кода, либо реализация не была достаточно хороша для моих целей. Наиболее популярная и мощная реализация на Java пришла из отрытого проекта Google code.google.com/p/zxing под названием ZXing (Zebra Crossing => Z=Zebra + X=Cross + ing).
Там я обнаружил портирование «один в один» на С# более ранней версии. Проект сосредоточился на дополнительных возможностях и дальнейшем развитии в Java, поэтому никто не позаботился о ветке C#.
Так я решил начать этот проект QRCode.Net – qrcodenet.codeplex.com.
Сначала я продвинул вперед портирование на C# гуглевской реализации QR-кода проекта. Я написал оболочку и демонстрационное приложение, способное генерировать QR-код из набираемого текста и сохранять его в файл.
Кроме того оно содержало очень простую реализацию генерации «художественного» QR-кода. На самом высоком уровне коррекции ошибок возможно создание «художественного» QR-кода, который правильно сканируется, но содержит умышленные ошибки, чтобы сделать его более читаемым или привлекательным для человеческого глаза, например, вставить цвета, логотипы и другие фенечки в блок QR-кода.
Вот снимок работающего приложения:
И решение с последней версией (которое без проблем запустилось с первого раза);
Теперь, когда у нас есть QR-код, давайте прочитаем его…
Создание приложения для Windows Phone 7, читающего QR -код
Если у вас обновленный Windows Phone 7.5, вы могли заметить, что у него имеется прекрасная встроенная функциональность для чтения QR-кода, использующая поиск Bing Vision. После нескольких проб, я заинтересовался, как это можно использовать в приложении, и сразу же разочаровался, не найдя доступных для внешних разработчиков API, позволяющих воспользоваться этой возможностью.
После недолгих поисков, я обнаружил прекрасную библиотеку, которую можно использовать в качестве альтернативы, и построил на ее основе простой ридер. Вот основные шаги для самостоятельного создания программы:
- Создатьновыйпроект Windows Phone в Visual Studio
- Обновить манифест приложения
- Создать окно QR -ридера и область вывода
- Инструкции и переменные
- Управление навигацией
- Добавитьобработчики событий камеры
- Скачать библиотеку штрих-кодов
- Добавить библиотеку штрих-кодов в проект
- Декодировать изображение QR -кода
- Скомпилировать и развернуть
В проекте используется библиотека штрих-кодов, которую я никогда до сих пор не видел – messagingtoolkit-barcode.
Библиотека штрих-кодов MessagingToolkit Barcode это библиотека на C#,которую можно использовать в самостоятельных Windows-приложениях, приложениях ASP.NET и WP-приложениях.
Сейчас библиотека обеспечивает кодирование и декодирование следующих типов штрих-кодов:
Кодирование
- QR Code
- Data Matrix
- PDF 417
- Bookland/ISBN
- Codabar
- Code 11
- Code 128
- Code 128-A
- Code 128-B
- Code 128-C
- Code 39
- Code 39 Extended
- Code 93
- EAN-13
- EAN-8
- FIM
- Interleaved 2 of 5
- ITF-14
- LOGMARS
- MSI 2 Mod 10
- MSI Mod 10
- MSI Mod 11
- PostNet
- Standard 2 of 5
- Telepen
- UPC 2 Digit Ext.
- UPC 5 Digit Ext.
- UPC-A
- UPC-E
Декодирование
- UPC-A
- UPC-E
- EAN-8
- EAN-13
- Code 39
- Code 93
- Code 128
- QR Code
- ITF
- Codabar
- RSS-14
- Data Matrix
- PDF 417
- Aztec
Она основывается на библиотеке zxing, но имеет некоторые дополнительные возможности, которых нет в исходной библиотеке. Ее можно свободно использовать в некоммерческих целях. Чтобы иметь возможность применять ее в коммерческих проектах, пожалуйста, рассмотрите возможность сделать платеж в поддержку проекта вот здесь.
И последний, но не менее интересный третий сегодняшний проект – простой и повторно используемый управляющий элемент QR-кода, добавляющий возможности работы с QR-кодом в приложениях Windows Phone с простотой «перетащи и вставь».
Простой элемент управления для чтения QR -кодов в WindowsPhone
Существуют замечательные библиотеки, написанные или портированные на С#, которые позволяют нам, разработчикам, действовать, стоя на плечах гигантов. Вот один такой проект.
Разработчик для телефона, также являющийся энтузиастом квадратов, предложил возможность, которую я должен добавить в будущие выпуски, и обеспечил примером кода, основанном на библиотеке штрих-кодов zxing и ее портировании на Silverlight. Я начал работать над включением новых возможностей.
В процессе я осознал, что представился прекрасный случай предоставить этот простой, но полезный элемент управления сообществу разработчиков для телефона, поэтому я двинулся в этом направлении и поместил реализацию и рефакторинг этого элемента на GitHub. Его можно найти по адресу https://github.com/jeffwilcox/wpqr-control.
Особое спасибо Михаэлю Остеге (Michael Osthege – @theCake, blog) за инициативу, пример кода и поощрение.
Этот элемент замечателен:
- Поместите его на конструируемую поверхность
- Привяжите событие ScanComplete (и факультативно событие Error)
- Элемент управляет всеми базовыми манипуляциями с изображением, сканированием, инициализацией камеры и т. п.
Вот как простое приложение выглядит в действии. Элемент включает по умолчанию такие свойства как толщина и цвет рамочки вокруг кодового квадрата, использующий бросающийся в глаза цвет, который обеспечивает хороший визуальный разделитель:
Создание приложения-примера
Все что я сделал, так это перетащил элемент в проект нового приложения Windows Phone и подключил его. Вот так.
К счастью, с этими тремя проектами, информацией и ресурсами, которые они обеспечивают, добавление поддержки QR-кодов в ваши приложения должно стать гораздо проще…