|
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();
}
|
|