Public Sub Create(Text As String) As B4XBitmap
Dim Bytes() As Byte = Text.GetBytes("utf8") 'non-standard but still recommended
Dim vd As QRVersionData
For Each version As QRVersionData In versions
If version.MaxUsableSize >= Bytes.Length Then
vd = version
Exit
End If
Next
If vd.IsInitialized = False Then
Log("Too long!")
Return Null
End If
Log(vd.VersionName & ", Size: " & Bytes.Length)
NumberOfModules = 17 + vd.Version * 4
ModuleSize = mBitmapSize / (NumberOfModules + 8)
mBitmapSize = ModuleSize * (NumberOfModules + 8)
Dim p As B4XView = xui.CreatePanel("")
p.SetLayoutAnimated(0, 0, 0, mBitmapSize, mBitmapSize)
cvs.Initialize(p)
Dim Matrix(NumberOfModules, NumberOfModules) As Boolean
Dim Reserved(NumberOfModules, NumberOfModules) As Boolean
Dim Mode() As Byte = Array As Byte(0, 1, 0, 0) 'byte mode
Dim ContentCountIndicator() As Byte
If vd.Version >= 10 Then
ContentCountIndicator = IntTo16Bits(Bytes.Length)
Else
ContentCountIndicator = UnsignedByteToBits(Bytes.Length)
End If
Dim EncodedData As B4XBytesBuilder
EncodedData.Initialize
EncodedData.Append(Mode)
EncodedData.Append(ContentCountIndicator)
For Each b As Byte In Bytes
EncodedData.Append(UnsignedByteToBits(Bit.And(0xff, b)))
Next
'add terminator
Dim PadSize As Int = Min(4, vd.MaxSize - EncodedData.Length)
Dim pad(PadSize) As Byte
EncodedData.Append(pad)
Do While EncodedData.Length Mod 8 <> 0
EncodedData.Append(Array As Byte(0))
Loop
Do While EncodedData.Length < vd.MaxSize
EncodedData.Append(Array As Byte(1,1,1,0,1,1,0,0))
If EncodedData.Length < vd.MaxSize Then EncodedData.Append(Array As Byte(0,0,0,1,0,0,0,1))
Loop
VersionWithTwoGroups(vd.Generator, vd.Group1Size, vd.Group2Size, vd.Block1Size, vd.Block2Size, EncodedData)
AddFinders (vd)
AddDataToMatrix(EncodedData.ToArray, vd)
DrawMatrix
cvs.Invalidate
Dim bmp As B4XBitmap = cvs.CreateBitmap '// Error occurred here
cvs.Release
Return bmp
End Sub