Using ZXing in c#
How to decode a 2D barcode into text
The code snippet:
try { // Get the width and height of the bitmap, //and change it to a WriteableBitmap object int width = mBitmap.PixelWidth; int height = mBitmap.PixelHeight; WriteableBitmap writableBitmap = new WriteableBitmap(mBitmap); // use RGBLuminanceSource and HybridBinarizer class to // process the WriteableBitmap into a BinaryBitmap var lsource = new RGBLuminanceSource(writableBitmap, width, height); Binarizer zer = new HybridBinarizer(lsource); BinaryBitmap binaryBitmap = new BinaryBitmap(zer); // Decode the binaryBitmap useing the QRCodeReader object QRCodeReader qrReader = new QRCodeReader(); Result result = qrReader.decode(binaryBitmap); // the decoded text in place in the Result object. Title.Text = result.Text; } catch (Exception ex) // catch the exception here!!! { System.Diagnostics.Debug.WriteLine(ex); }
How to encode a text into a 2D barcode
The library will encode the text into ZXing-defined ByteMatrix. Here is the code snippet:
string encodeText = TextToEncode.Text; if (!String.IsNullOrEmpty(encodeText)) { // use MultiFormatWriter class to encode. var qrCodeWriter = new MultiFormatWriter(); var matrix = qrCodeWriter.encode(TextToEncode.Text, BarcodeFormat.QR_CODE, 400, 400); var bitmap = ToBitmap(matrix); resultImage.Source = bitmap; }
Then, ToBitmap() function is used to get the BitmapImage object from the ByteMatrix:
private WriteableBitmap ToBitmap(ByteMatrix aMatrix) { int width = aMatrix.Width; int height = aMatrix.Height; var bitmap = new WriteableBitmap(width, height); for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { if (aMatrix.get_Renamed(x, y) == -1) { bitmap.Pixels[y * width + x] = BitConverter.ToInt32(BitConverter.GetBytes(0xffffffff), 0); }else { bitmap.Pixels[y * width + x] = BitConverter.ToInt32(BitConverter.GetBytes(0x00000000), 0); } } } return bitmap; }
沒有留言:
張貼留言