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%) 8 votes

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

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

  1. Олег

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

    1. admin

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

    2. Данила

      Для вызова камеры можно использовать библиотеку OzekiComputerVision.dll из набора программ Ozeki camera SDK. Есть рабочий метод, если еще актуально, могу поделится.

    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 кода с веб камеры?

  6. Amigo123

    Привет! Спасибо за пример!! а как например поменять цвет QR и сделать переход цвета?

    1. admin

      Привет! Цвет фона qr-кода можно поменять с помощью изменения значения поля QRCodeBackgroundColor объекта класса QRCodeEncoder.

      Для примера программы из статьи изменение цвета фона qr-кода можно сделать следующим образом:

      encoder.QRCodeBackgroundColor = Color.Red;

      В данном случае фон станет красным.

Добавить комментарий для Данила Отменить ответ

Ваш 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="">