# QRCODE 二维码的移植
这是本人第一篇bog,可能会有些模仿一些文章的内容格式等,不用猜也知道会有很多不完善的地方很多,待今后慢慢补漏。望各位读者大人见谅。 在生活钟二维码无处不在,以至于如今二维码成为IT 开发移植中常见的应用之一。这次在应用中用到了二维码,主要是编码,解码方面会直接给出包,自己去摸索。QRcode是主流的二维码应用,
## 一.QR code 的特点
1、高密度,容量大,可容纳多达1850个大写字母(字符)或2710个数字,支持最高1108个字节的数据存储,比一维码信息容量高几十倍。
2、 范围广,支持对图片、声音、文字、签字、指纹等各类可以数字化信息的编码,还可以表示多种语言文字和图像数据。
3、 容错能力强,具有纠错功能,当二维码因穿孔、污损等引起局部损坏时,照样可以正常识别,损毁面积达50%仍可恢复。
4、 成本低,易制作,持久耐用
具体可自己手动查询QR code,会得到更多的信息
## 二.QR code 的代码
这里我会给出QRCODE的编码和解码。
void qr_ram_display(const int x, const int y, const int size)
{
#ifdef QR_USER_SDRAM
int width = QR_Info->qr_code.width;
unsigned char *frame = QR_Info->qr_code.data;
#else
int width = qrcode->width;
unsigned char *frame = qrcode->data;
#endif
int i = 0, j = 0;
int xtemp = x, ytemp = y;
while(width > i++)
{
if(!MODBUS_ENABLE)
CommandTask();
while(width > j++)
{
GDI_DraFulRect2(xtemp, ytemp, size, size, (*frame++ & 0x01) ? COLOR_BLACK : COLOR_WHITE);
xtemp += size;
}
xtemp = x;
ytemp += size;
j = 0;
}
}
二维码显示代码
void qr_ram_creat(const char version, const char* src, const int length)
{
#ifdef QR_USER_SDRAM
QRinput *stream;
QRcode *qrcode;
#endif
#ifndef QR_USER_SDRAM
QRinput_free(stream);
QRcode_free(qrcode);
#endif
stream = QRinput_new2(version, QR_ECLEVEL_H);
QRinput_append(stream, QR_MODE_8, length, (const unsigned char *)src);
qrcode = QRcode_encodeInput(stream);
#ifdef QR_USER_SDRAM
memcpy((char *)&QR_Info->qr_code, (char *)qrcode, sizeof(qrcode->version) + sizeof(qrcode->width) + qrcode->width * qrcode->width);
QRinput_free(stream);
QRcode_free(qrcode);
#endif
}