День QR-кодов. Три в одном

Грэг Дункан

Сегодняшнее сообщение посвящено не одному проекту, а трем. Да, три в один день...

clip_image002

Мы все видели QR-коды, они встречаются на сайтах, наклейках, телевидении и даже татуировках. Несколько месяцев назад мы рассказывали о том, как использовать их в приложениях Windows Phone 7.1(5), «Window Phone 7.5, ZXing и QR-коды». Сегодня мы собираемся поговорить о трех других проектах с QR-кодами, один поможет вам создавать их, а два других предоставят иные способы их использования в приложениях Windows Phone 7.1(5).

QrCode . Net

Описание проекта
Цель проекта – создать простую в использовании полностью управляемую .Net-библиотеку, обеспечивающую работу с QR-кодами в соответствии со стандартом ISO/IEC 18004. Планировалось реализовать следующие возможности: кодирование, рендеринг (на экран, в файл и в поток), декодирование, определение и распознавание, художественные QR-коды.

Цель проекта

Цель проекта – создать простую в использовании управляемую .Net-библиотеку для:

  1. Создания битовой матрицы QR-кода из текста – кодирование.
  2. Рендеринг битовой матрицы QR-кода на экран, в файл изображения или поток.
  3. Рендеринг так называемых «художественных» QR-кодов (см. ниже)
  4. Декодирование QR-кода, заданного битовой матрицей.
  5. Обнаружение и распознавание QR-кодов.
  6. Библиотека должна поддерживать 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.Netqrcodenet.codeplex.com.

Сначала я продвинул вперед портирование на C# гуглевской реализации QR-кода проекта. Я написал оболочку и демонстрационное приложение, способное генерировать QR-код из набираемого текста и сохранять его в файл.

Кроме того оно содержало очень простую реализацию генерации «художественного» QR-кода. На самом высоком уровне коррекции ошибок возможно создание «художественного» QR-кода, который правильно сканируется, но содержит умышленные ошибки, чтобы сделать его более читаемым или привлекательным для человеческого глаза, например, вставить цвета, логотипы и другие фенечки в блок QR-кода.

Вот снимок работающего приложения:

clip_image004

И решение с последней версией (которое без проблем запустилось с первого раза);

clip_image006clip_image008clip_image010

Теперь, когда у нас есть QR-код, давайте прочитаем его…

Создание приложения для Windows Phone 7, читающего QR -код

Если у вас обновленный Windows Phone 7.5, вы могли заметить, что у него имеется прекрасная встроенная функциональность для чтения QR-кода, использующая поиск Bing Vision. После нескольких проб, я заинтересовался, как это можно использовать в приложении, и сразу же разочаровался, не найдя доступных для внешних разработчиков API, позволяющих воспользоваться этой возможностью.

После недолгих поисков, я обнаружил прекрасную библиотеку, которую можно использовать в качестве альтернативы, и построил на ее основе простой ридер. Вот основные шаги для самостоятельного создания программы:

  • Создатьновыйпроект Windows Phone в Visual Studio
  • Обновить манифест приложения
  • Создать окно QR -ридера и область вывода
  • Инструкции и переменные
  • Управление навигацией
  • Добавитьобработчики событий камеры
  • Скачать библиотеку штрих-кодов
  • Добавить библиотеку штрих-кодов в проект
  • Декодировать изображение QR -кода
  • Скомпилировать и развернуть

clip_image012clip_image014

В проекте используется библиотека штрих-кодов, которую я никогда до сих пор не видел – messagingtoolkit-barcode.

Библиотека штрих-кодов MessagingToolkit Barcode это библиотека на C#,которую можно использовать в самостоятельных Windows-приложениях, приложениях ASP.NET и WP-приложениях.

clip_image016

Сейчас библиотека обеспечивает кодирование и декодирование следующих типов штрих-кодов:

Кодирование

  • 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)
  • Элемент управляет всеми базовыми манипуляциями с изображением, сканированием, инициализацией камеры и т. п.

Вот как простое приложение выглядит в действии. Элемент включает по умолчанию такие свойства как толщина и цвет рамочки вокруг кодового квадрата, использующий бросающийся в глаза цвет, который обеспечивает хороший визуальный разделитель:

  • clip_image018
  • ...

Создание приложения-примера

Все что я сделал, так это перетащил элемент в проект нового приложения Windows Phone и подключил его. Вот так.

clip_image020

К счастью, с этими тремя проектами, информацией и ресурсами, которые они обеспечивают, добавление поддержки QR-кодов в ваши приложения должно стать гораздо проще…