激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

使用開源qrencode庫生成二維碼

 2022-5-5     作者:楊陽         
文章標(biāo)簽:C/C++

二維碼簡介


  二維碼是一個(gè)目前應(yīng)用范圍極廣的一種編碼方式。通過特定的幾何圖形,用黑白相間的點(diǎn)組成,利用計(jì)算機(jī)二進(jìn)制0,1的概念,將字符串信息編碼進(jìn)圖形中。從而可以通過光電掃描設(shè)備,如手機(jī)等來進(jìn)行快速識(shí)別。


  相比于一維條碼,二維碼存儲(chǔ)信息量更大,可靠性高,更易識(shí)別,可以在扭曲,部分遮擋的情況下被識(shí)別。


qrencode庫簡介


  二位碼最常見的編碼為QR code,qrencode是一個(gè)滿足QR code標(biāo)準(zhǔn)的開源庫。可以適用于各個(gè)平臺(tái)。


Wince下使用方式


  1、可以在GITHUB找到qrencode庫最新下載。

  2、新建一個(gè)wince平臺(tái)的工程,選擇新建c++下smart device的win32工程,選在一個(gè)WINCE平臺(tái),工程類型選擇Static library。

  3、將下載的qrencode庫里的.h文件及.c文件都添加入工程中,選擇編譯。

  4、編譯可能會(huì)提示一些環(huán)境變量不存在的錯(cuò)誤,比如errno = EINVAL;中的EINVAL未定義,將這類代碼注釋掉,這是因?yàn)閣ince將這部分功能精簡掉了。

  5、最終編譯成功會(huì)生成qrencodece.lib,將它和qrencodece.h添加入自己工程便可以使用了。

  6、定義一個(gè)Qrcode指針,調(diào)用方法QRcode_encodeString,傳入?yún)?shù)1,要編碼的字符串,參數(shù)2,編碼的糾錯(cuò)等級(jí),參數(shù)3,編碼模式,通常使用QR_MODE_8,參數(shù)4,1或0,表示是否區(qū)分大小寫。這樣就可以獲得一個(gè)編碼后的2進(jìn)制數(shù)組的數(shù)據(jù)指針。


QRcode* pQRC;
pQRC = QRcode_encodeString(“emtronix”, 0, QR_ECLEVEL_H, QR_MODE_8, 1))


  7、將該二維碼據(jù)顯示到屏幕中。


int width = pQRC->width;
 
CBrush brush;
brush.CreateStockObject(LTGRAY_BRUSH);
m_dcMem.FillRect(m_rect,&brush);
brush.DeleteObject();

int x, y, l, n;
unsigned char* pData;
pData = pQRC->data;
 
for (y= 0;y<width;y++)
{
    for (x= 0;x<width;x++)
    {
       if (*pData & 1)
       {
           for (l = 0; l < 8; l++)
           {
              for (n = 0; n < 8; n++)
              {
                  m_dcMem.SetPixel(x*8+l, y*8+n,RGB(0,0,0));
              }
           }
       }
       pData++;
    }
}
 
CDC *pDC=GetDC();
pDC->BitBlt(16, 40, 512, 512, &m_dcMem, 0, 0, SRCCOPY);
ReleaseDC(pDC);
QRcode_free(pQRC);


使用開源qrencode庫生成二維碼.png


  8、將該二維碼數(shù)據(jù)保存到bmp格式圖片文件中。


Width = pQRC->width;
Widthbmp = Width * 8 * 3;
if (Widthbmp % 4) Widthbmp = (Widthbmp / 4 + 1) * 4;
unDataBytes = Widthbmp * Width * 8;
 
pRGBData = (unsigned char*)malloc(unDataBytes);
memset(pRGBData, 0xff, unDataBytes);
 
BITMAPFILEHEADER BmpHeader;
BmpHeader.bfType = 0x4d42;  // "BM"
BmpHeader.bfSize = sizeof(BITMAPFILEHEADER) +
    sizeof(BITMAPINFOHEADER) +
    unDataBytes;
BmpHeader.bfReserved1 = 0;
BmpHeader.bfReserved2 = 0;
BmpHeader.bfOffBits = sizeof(BITMAPFILEHEADER) +
    sizeof(BITMAPINFOHEADER);
BITMAPINFOHEADER InfoHeader;
InfoHeader.biSize = sizeof(BITMAPINFOHEADER);
InfoHeader.biWidth = Width * 8;
InfoHeader.biHeight = -((int)Width * 8);
InfoHeader.biPlanes = 1;
InfoHeader.biBitCount = 24;
InfoHeader.biCompression = BI_RGB;
InfoHeader.biSizeImage = 0;
InfoHeader.biXPelsPerMeter = 0;
InfoHeader.biYPelsPerMeter = 0;
InfoHeader.biClrUsed = 0;
InfoHeader.biClrImportant = 0;
pSourceData = pQRC->data;
for (y = 0; y < Width; y++)
{
    pDestData = pRGBData + Widthbmp * y * 8;
    for (x = 0; x < Width; x++)
    {
       if (*pSourceData & 1)
       {
           for (l = 0; l < 8; l++)
           {
              for (n = 0; n < 8; n++)
              {
                  *(pDestData + n * 3 + Widthbmp * l) = 0;
                  *(pDestData + 1 + n * 3 + Widthbmp * l) = 0;
                  *(pDestData + 2 + n * 3 + Widthbmp * l) = 0;
              }
           }
       }
       pDestData += 3 * 8;
       pSourceData++;
    }
}
 
if (!(fopen_s(&f, "test.bmp", "wb")))
{
    fwrite(&BmpHeader, sizeof(BITMAPFILEHEADER), 1, f);
    fwrite(&InfoHeader, sizeof(BITMAPINFOHEADER), 1, f);
    fwrite(pRGBData, sizeof(unsigned char), unDataBytes, f);
    fclose(f);
}
       
free(pRGBData);
QRcode_free(pQRC);


其它


  因?yàn)槎S碼擁有校正功能,所以可以遮擋一部分內(nèi)容同時(shí)不影響識(shí)別。常見的二維碼中,很多都在中心部位添加上一個(gè)自定義的logo,用戶可以可以根據(jù)自身項(xiàng)目需求直接添加,不需要增加其它操作。


  英創(chuàng)提供了文章內(nèi)所述程序及源代碼,有需要的客戶可以聯(lián)系英創(chuàng)工程師獲得。

文章標(biāo)簽:C/C++
主站蜘蛛池模板: 亚洲高清国产一区二区三区| 高清国产精品久久| 色男人的天堂久久综合| 99久国产| 久久er这里只有精品| 四虎黄色| 韩国日本一级毛片免费视频| 四虎澳门永久8848在线影院| 2022麻豆福利午夜久久| 久久久久女人精品毛片九一| 毛片一级片| 在线观看亚洲网站| 免费一级片网站| 国产精视频| 涩涩一区| 黄污在线观看| 99re最新网址| 欧美久久视频| 天天干夜夜爱| 亚洲国产欧美日韩一区二区| 自拍 亚洲| 日本aaa大片| 中文字幕中出在线| 亚洲一区二区在线播放| 欧美美女黄色片| 怡红院日本一道日本久久| 最近的免费中文字幕视频| 99久久综合狠狠综合久久一区| 国产精品小视频在线观看| 久草经典视频| 日日摸夜夜添夜夜添破第一| 亚洲精品视频在线观看免费| 亚洲综合免费| 九九热视频在线| 久久久久久九九| 久久精品免费播放| 老妇女毛片| 亚洲 欧美 国产 日韩 制服 bt| 亚洲精品亚洲人成在线播放| 欧美日韩成人高清色视频| 国产一|