QRコード

 投稿者:しばっち  投稿日:2019年 9月22日(日)19時31分9秒
  C++ライブラリーを使用して十進BASIC上でQRコード(2次元バーコード)が
作成できるようになりました。

https://github.com/nayuki/QR-Code-generator

今回のビルド及びコンパイルはgccを使用しました。


なお、実行時は別途libgcc_s_dw2-1.dll 及び libstdc++-6.dllが必要です。
BASIC.exeと同じフォルダに入れてください。


下記URLからダウンロードしてください。(QRcode.zip)

https://36.gigafile.nu/1121-d77d1e27a240c031b77434afa7cc3d133

ダウンロード期限:2019年11月21日(木)
ダウンロードパス:設定していません


サンプル画像は下記プログラムで作成したこの掲示板URLのQRコードです


!'INPUT TEXT$
LET TEXT$="https://6317.teacup.com/basic/bbs"
CALL QRCODEGENERATE(TEXT$)
END

EXTERNAL  SUB QRCODEGENERATE(INPUT$)
OPTION CHARACTER BYTE
LET OUTPUT$=REPEAT$(CHR$(0),177*177)
LET N=QRCODEGENERATE_(INPUT$,OUTPUT$,2)
PRINT "SIZE=";N
LET BOADER=4
LET SCALE=10
DIM MAP(-BOADER TO N-1+BOADER,-BOADER TO N-1+BOADER)
FOR Y=-BOADER TO N-1+BOADER
   FOR X=-BOADER TO N-1+BOADER
      LET ADR=Y*N+X+1
      IF X>=0 AND Y>=0 AND X<N AND Y<N AND OUTPUT$(ADR:ADR)="1" THEN
         LET MAP(X,Y)=1
      END IF
   NEXT X
NEXT Y
SET BITMAP SIZE (BOADER+N)*SCALE,(BOADER+N)*SCALE
SET WINDOW 0,1,1,0
MAT PLOT CELLS, IN 0 , 0 ; 1 , 1 :MAP
!'
FUNCTION QRCODEGENERATE_(INPUT$,OUTPUT$,LEV)
   ASSIGN ".\DLL\qrcodegenerate.dll","qrcodegenerate"
END FUNCTION
END SUB

-----------------------------------------------------------------------------

                               qrcodegenerate.cpp


#include <cstdio>
#include <cstring>
#include "QrCode.hpp"

using qrcodegen::QrCode;
using qrcodegen::QrSegment;
using namespace qrcodegen;
using namespace std;

extern "C"  __declspec(dllexport) int qrcodegenerate(char *input,char *output,int lev)
{
    string out;
    QrCode::Ecc  errCorLvl;

    if (lev==0)
        errCorLvl=QrCode::Ecc::LOW;
    else if (lev==1)
        errCorLvl=QrCode::Ecc::MEDIUM;
    else if (lev==2)
        errCorLvl=QrCode::Ecc::HIGH;
    else
        errCorLvl=QrCode::Ecc::HIGH;

    const QrCode qr = QrCode::encodeText(input, errCorLvl);

    for (int y = 0; y < qr.getSize(); y++)
        for (int x = 0; x < qr.getSize(); x++)
            if(qr.getModule(x, y)) out=out+"1";
            else out=out+"0";

    strcpy(output,out.c_str());
    return qr.getSize();
}

 

戻る