My one-cent
The several colors that you see (grayscale levels) are due to expanding the B4XBitmap returned by QR.create(QRString) to fit into QRView, which has different dimensions than the original bitmap. Anti-aliasing does the rest.
If, instead, you save the same Image returned by QR.Create, it will only have white and black pixels (event if it is saved in 32-bit format)
(Using Erel's example)
' Don't do this
Dim im As Image = ImageView1.Snapshot '<-- Here you are taking the snapshot of the visualization of the bitmap, which is anti-aliased.
Dim Out As OutputStream = File.OpenOutput(File.DirApp, "qr.png",False)
im.WriteToStream(Out)
Out.Close
Result (anti-aliased, grayscale transitions)
'Do that
Dim imOK As Image = qr.Create("QR with B4X!!!")
Dim OutOK As OutputStream = File.OpenOutput(File.DirApp, "qrOK.png",False)
imOK.WriteToStream(OutOK)
OutOK.Close
Result (not anti-aliased since it is the originally generated bitmap)