二维码和条形码


二维码条形码控件可以用来生成或展示二维码和条形码,开发者可以设置二维码控件或者条形码控件的边框、位置和大小属性。生成二维码时,qbcode控件能处理文本和二进制数据;生成条形码时,则只能处理文本数据。二维码遵循QR Code Model 2标准,支持从1到40的各种规格,支持4种纠错等级和4种字符编码模式。默认情况下,二维码的纠错等级设置为最高级。对于条形码,它支持code128格式。

用法

创建控件

使用 gui_qbcode_t *gui_qbcode_create(void *parent, const char *name, int16_t x, int16_t y, int16_t w,int16_t h,T_QBCODE_DISPLAY_TYPE type,T_QBCODE_ENCODE_TYPE encodeType) 函数创建一个二维码或者条形码控件,具体创建的是二维码控件还是条形码控件,由参数encodeType决定。encodeType 枚举类型如下:

typedef enum
{
    QRCODE_ENCODE_TEXT,
    QRCODE_ENCODE_BINARY,
    BARCODE_ENCODE_TEXT,
} T_QBCODE_ENCODE_TYPE;

设置控件的尺寸和边框

使用 void gui_qbcode_config(gui_qbcode_t *qbcode, uint8_t *data, uint32_t data_len, uint8_t border_size) 函数来设置控件的尺寸和边框。

二维码编码注释

二维码的编码数据默认情况下可以超过最大字节数,这时可以将最大版本修改为 15,版本的修改可以参照以下文档:https://www.qrcode.com/zh/about/version.html。

示例

二维码示例
#include "gui_qbcode.h"
#define QRCODE_WIDTH     320
#define QRCODE_HEIGHT    320
#define DISPLAY_TYPE     QRCODE_DISPLAY_IMAGE //QRCODE_DISPLAY_SECTION
#define ENCODED_TYPE     QRCODE_ENCODE_TEXT   // QRCODE_ENCODE_BINARY

char* str = "123455678901234567890123455678901234567890123455678901234567890123455678901234567890123455678901234567890";

gui_qbcode_t * qrcode = gui_qbcode_create(parent,
                                          "qrcode",
                                          454/2 - QRCODE_WIDTH/2,
                                          454/2 - QRCODE_HEIGHT/2,
                                          QRCODE_WIDTH,
                                          QRCODE_HEIGHT,
                                          DISPLAY_TYPE,
                                          ENCODED_TYPE);

gui_qbcode_config(qrcode, str, strlen(str), 3);


条形码示例
#define BARCODE_WIDTH     (143 * 3)
#define BARCODE_HEIGHT    143
#define DISPLAY_TYPE     BARCODE_DISPLAY_IMAGE //BARCODE_DISPLAY_SECTION
#define ENCODED_TYPE     BARCODE_ENCODE_TEXT

char* str = "1234567890";

gui_qbcode_t * qrcode = gui_qbcode_create(parent,
                                          "qrcode",
                                          454/2 - BARCODE_WIDTH/2,
                                          454/2 - BARCODE_HEIGHT/2,
                                          BARCODE_WIDTH,
                                          BARCODE_HEIGHT,
                                          DISPLAY_TYPE,
                                          ENCODED_TYPE);

gui_qbcode_config(qrcode, str, strlen(str) + 1, 10);


API

Enums

enum T_QBCODE_ENCODE_TYPE

T_QBCODE_ENCODE_TYPE structure.

Values:

enumerator QRCODE_ENCODE_TEXT
enumerator QRCODE_ENCODE_BINARY
enumerator BARCODE_ENCODE_TEXT
enum T_QBCODE_DISPLAY_TYPE

T_QBCODE_DISPLAY_TYPE structure.

Values:

enumerator QRCODE_DISPLAY_SECTION
enumerator QRCODE_DISPLAY_IMAGE
enumerator BARCODE_DISPLAY_SECTION
enumerator BARCODE_DISPLAY_IMAGE

Functions

gui_qbcode_t *gui_qbcode_create(void *parent, const char *name, int16_t x, int16_t y, int16_t w, int16_t h, T_QBCODE_DISPLAY_TYPE type, T_QBCODE_ENCODE_TYPE encodeType)

Create a qrcode widget.

备注

this function just create a qrcode object, qbcode data and param should be config by gui_qbcode_config() api.

参数:
  • parent – the father widget

  • filename – this qrcode widget’s name.

  • x – the X-axis coordinate relative to parent widget

  • y – the Y-axis coordinate relative to parent widget

  • w – qrcode image display width including border

  • h – qrcode image display height including border

  • type – QRCODE_DISPLAY_SECTION (gui in real-time) or QRCODE_DISPLAY_IMAGE(save in psRAM by default) or BARCODE_DISPLAY_SECTION or BARCODE_DISPLAY_IMAGE.

  • encodeType – QRCODE_ENCODE_TEXT or QRCODE_ENCODE_BINARY or BARCODE_ENCODE_TEXT supported.

返回:

gui_qbcode_t* success, NULL failed.

void gui_qbcode_config(gui_qbcode_t *qbcode, uint8_t *data, uint32_t data_len, uint8_t border_size)

config qbcode data and border param for a qbcode object.

参数:
  • qbcode – a qbcode object pointer.

  • data – input data encoded for qbcode

  • data_len – input data length for encode data

  • border_size – qrode border size, can be 1, 2, 3… by qbcode size, default white color border;

返回:

null

struct gui_qbcode_t
#include <gui_qbcode.h>

qrcode widget structure

Public Members

gui_obj_t base
int16_t offset_x
int16_t offset_y
uint16_t border_size
float scale_x
float scale_y
void *data
void *image_data
gui_img_t *qbcode_img
T_QBCODE_DISPLAY_TYPE type
T_QBCODE_ENCODE_TYPE encodeType