QR-код на С#: генерируем, распознаём, сохраняем, загружаем.

В этой статье мы создаём программу, которая генерирует, сохраняет, загружает и распознаёт QR-код на C# в проекте Windows Forms.


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

QR-код на С#: генерируем, распознаём, сохраняем, загружаем - vscode.ru

Скоро мы сможем распознать, что же за информация спрятана за этой абстрактной картинкой.

Перво-наперво нам надо скачать одну библиотеку .dll. Она прикреплена внизу нашей статьи вместе с исходником самой программы. Называется она MessagingToolkit.QRCode.dll, и благодаря ней можно легко распознать или сгенерировать QR-код на С#.

Теперь мы создаём проект, а затем дизайн формы. Выглядит он вот так:

QR-код на С#: генерируем, распознаём, сохраняем, загружаем - vscode.ru

Выводиться сгенерированный QR-код будет в PictureBox’е.

Теперь нам нужно подключить нашу dll-библиотеку. Для этого в обозревателе решений щёлкаем правой кнопкой мыши на References и нажимаем “Добавить ссылку”:

QR-код на С#: генерируем, распознаём, сохраняем, загружаем - vscode.ru

В открывшемся окне в меню слева нажимаем “Обзор”:

QR-код на C#

Затем внизу окна нажимаем “Обзор”, выбираем нашу библиотеку, и нажимаем “Добавить”:

QR-код на C#

Библиотека добавлена, но её ещё нужно привязать к нашей программе. Для этого мы в части кода, где находятся все using’и пишем:

Теперь наша библиотека подключена, можно приступать к самой программе.
Дважды кликаем на кнопку “Создать QR код” и пишем следующее:

Проверим, всё ли у нас работает. Запускаем программу, пишем в ней любой текст (к сожалению, кириллица у нас в программе не поддерживается, поэтому пишем на латинице), а затем нажимаем на кнопку “Создать QR код”:

QR-код на C#

Всё работает! QR-код создаётся. Продолжаем.

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

Дважды щёлкаем на кнопку “Сохранить QR код”. Пишем внутри следующее:

Опять проверяем. Пишем что-нибудь в TextBox’e, генерируем QR-код, затем нажимаем на кнопку “Сохранить QR код”. Появляется окно “Сохранение”. Выбираем место, куда хотим сохранить наше изображение, задаём ему имя, выбираем формат:

QR-код на C#

Затем нажимаем “Сохранить” и смотрим, действительно ли изображение сохранилось:

QR-код на C#

Да, всё работает! Продолжаем, на очереди загрузка изображения с QR-кодом.

Переходим к коду кнопки “Загрузить QR код”. Там пишем следующее:

Проверяем и эту функцию. Запускаем программу, нажимаем нашу кнопку, ищем QR-код, который мы сохраняли до этого (или любой другой, но чтобы его изображение было размером 181х181 пиксель):

QR-код на C#

Готово, картинка появилась у нас в программе:

QR-код на C#

Мы смогли загрузить изображение, но как же нам прочитать, что в нём закодировано? Сейчас мы напишем код, который поможет нам распознать QR-код с изображения.

Дважды щёлкаем мышью на кнопке “Распознать QR код” в форме и пишем в открывшемся окне:

Настало время протестировать нашу последнюю функцию. Открываем какое-нибудь изображение QR-кода, например то, что находится в самом верху статьи. Изображение успешно загрузилось и появилось в нашем PictureBox’e. Затем нажимаем на кнопку “Распознать QR код”. И вот, что у нас появляется:

QR-код на C#

Вот и всё! Наша программа, которая генерирует и распознаёт QR-код на C# готова! Ниже вы можете найти исходник с подробными комментариями и dll-библиотеку работы с QR-кодом.

Скачать MessagingToolkit.QRCode.dll Скачать исходник

 

 

QR-код на С#: генерируем, распознаём, сохраняем, загружаем.
5 (100%) 5 votes

Поделиться в соц. сетях:

14 комментария(ев) к статье “QR-код на С#: генерируем, распознаём, сохраняем, загружаем.

  1. Олег

    Здравствуйте! Очень интересная статься, да и сайт у вас довольно интересный, спасибо))) Но не могли бы помочь? Как мне например вызвать камеру для считывания этого QR-кода?

    1. admin

      Здравствуйте, Олег! Спасибо за Ваш отзыв!
      Насчет камеры: слышал про такую библиотеку WebCam_Capture.dll – попробуйте, может, подойдет.

    1. admin

      Аналогично. Сделайте элемент image доступным для сервера c помощью атрибутов ID=”QRCode” runat=”server”. По идентификатору QRCode получите изображение и распознайте его с помощью библиотеки MessagingToolkit.QRCode.dll

  2. qpMAXqp

    Спасибо за урок! Скажите пожалуйста, как подключить русский? И как убрать ошибку, когда нажимаешь сохранить несгенерированное изображение (через if?) ?

    1. admin

      Чтобы корректно работал русский язык, нужно указать кодировку UTF-8:
      при создании qr-кода:
      Bitmap qrcode = encoder.Encode(qrtext, Encoding.UTF8);
      при его расшифровке:
      string s = decoder.decode(new QRCodeBitmapImage(pictureBox1.Image as Bitmap), Encoding.UTF8);
      Чтобы не было ошибки при сохранении (когда qr-код еще не создан), заключите весь код этой кнопки в такое условие:
      if (pictureBox1.Image != null)
      {

      }

  3. swgold

    Что за библиотека MessagingToolkit.QRCode.dll и какое в ней ограничение по длине строки?

    1. admin

      Это сторонняя библиотека. Ссылка для ее скачивания есть в конце статьи.

      Максимальное количество символов, которые помещаются в один QR-код в принципе (по стандарту):

      цифры — 7089;
      цифры и буквы (латиница) — 4296;
      двоичный код — 2953 байт (следовательно, около 2953 букв кириллицы в кодировке windows-1251 или около 1450 букв кириллицы в utf-8);
      иероглифы — 1817.

  4. Влад

    почему-то очень мало влазит символов(около 100), дальше выбивает ошибку.Как исправить? и как сделать что бы можно было менять размеры qr кодов? очень буду благодарен

    1. admin

      Значит это ограничение данной библиотеки. Если нужно больше – попробуйте использовать в своем проекте какой-нибудь аналог.

      1. Влад

        а размер qr кода как поменять можно? А по поводу длины выше говорилось же, что около 1к символов должно влазить

  5. Данила

    А можно ли как-то сделать в этой же программе захват/распознование QR кода с веб камеры?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">