uses
..., zint, lbc_qr, lbc_basic, ...
...
implementation
var QRsimbol: PointerTo_zint_symbol;
procedure KreirajQRsimbol(sTekst:String);
begin
if Assigned(QRsimbol) then begin
ZBarcode_Delete(QRsimbol);
QRsimbol := nil;
end;
if Length(sTekst) > 0 then begin
QRsimbol := ZBarcode_Create();
with QRsimbol^ do begin
border_width := 4;
option_1 := 1; // LEVEL_L
end;
ErrorCode := qr_code(QRsimbol, @sTekst[1], Length(sTekst));
if ErrorCode <> 0 then
Raise Exception.Create(QRsimbol^.errtxt);
end else
Raise Exception.Create('Prazni tekst za kreiranje QR simbola.');
end;
procedure OslobodiQRsimbol;
begin
ZBarcode_Delete(QRsimbol);
QRsimbol := nil;
end;
function GetQRsimbolBit(x, y: Integer):Boolean;
var iBajt, iBit: Integer;
begin
// nađem u kojem je bajtu i bitu u bajtu GetQRsimbolBit koji tražim
iBajt := x div 7; // koristi samo sedam bitova/pixela po bajtu
iBit := x mod 7;
Result := (QRsimbol^.encoded_data[y][iBajt] and (1 shl iBit)) <> 0;
end;
// funkcija za bitmapu
function QRcode2Bitmap(sTekst:String; iVelicinaModula, iOkvir:Integer):TBitmap;
var iX,iY:Integer;
begin
KreirajQRsimbol(sTekst); // napravi kod
try
Result := TBitmap.Create;
Result.Height := QRsimbol^.rows * iVelicinaModula + 2 * iOkvir;
Result.Width := QRsimbol^.width * iVelicinaModula + 2 * iOkvir;
Result.Canvas.Pen.Color := clWhite;
Result.Canvas.Brush.Color := clWhite;
Result.Canvas.Rectangle(0, 0, Result.Width, Result.Height);
Result.Canvas.Brush.Color := clBlack;
// crtam točku po točku, mada bi vjerojatno mogao učinkovitije riješiti
For iY := 0 to QRsimbol^.rows do
For iX := 0 to QRsimbol^.width do
If GetQRsimbolBit(iX, iY) then
Result.Canvas.FillRect(iX * iVelicinaModula + iOkvir,
iY * iVelicinaModula + iOkvir,
iX * iVelicinaModula + iVelicinaModula + iOkvir + 1,
iY * iVelicinaModula + iVelicinaModula + iOkvir + 1); // zadnji red i kolona nisu uključeni pa zato +1
finally
OslobodiQRsimbol;
end;
end;