/* public byte[] decode(QRCodeImage qrCodeImage) throws DecodingFailedException{ * canvas.println("Decoding started."); * int[][] intImage = imageToIntArray(qrCodeImage); * try { * QRCodeImageReader reader = new QRCodeImageReader(); * qrCodeSymbol = reader.getQRCodeSymbol(intImage); * } catch (SymbolNotFoundException e) { * throw new DecodingFailedException(e.getMessage()); * } * canvas.println("Created QRCode symbol."); * canvas.println("Reading symbol."); * canvas.println("Version: " + qrCodeSymbol.getVersionReference()); * canvas.println("Mask pattern: " + qrCodeSymbol.getMaskPatternRefererAsString()); * int[] blocks = qrCodeSymbol.getBlocks(); * canvas.println("Correcting data errors."); * int[] dataBlocks = correctDataBlocks(blocks); * try { * byte[] decodedByteArray = * getDecodedByteArray(dataBlocks, qrCodeSymbol.getVersion()); * canvas.println("Decoding finished."); * return decodedByteArray; * } catch (InvalidDataBlockException e) { * throw new DecodingFailedException(e.getMessage()); * } * }*/ public virtual sbyte[] decodeBytes(QRCodeImage qrCodeImage) { Point[] adjusts = AdjustPoints; System.Collections.ArrayList results = System.Collections.ArrayList.Synchronized(new System.Collections.ArrayList(10)); while (numTryDecode < adjusts.Length) { try { DecodeResult result = decode(qrCodeImage, adjusts[numTryDecode]); if (result.CorrectionSucceeded) { return(result.DecodedBytes); } else { results.Add(result); canvas.println("Decoding succeeded but could not correct"); canvas.println("all errors. Retrying.."); } } catch (DecodingFailedException dfe) { if (dfe.Message.IndexOf("Finder Pattern") >= 0) { throw dfe; } } finally { numTryDecode += 1; } } if (results.Count == 0) { throw new DecodingFailedException("Give up decoding"); } int lowestErrorIndex = -1; int lowestError = System.Int32.MaxValue; for (int i = 0; i < results.Count; i++) { DecodeResult result = (DecodeResult)results[i]; if (result.NumErrors < lowestError) { lowestError = result.NumErrors; lowestErrorIndex = i; } } canvas.println("All trials need for correct error"); canvas.println("Reporting #" + (lowestErrorIndex) + " that,"); canvas.println("corrected minimum errors (" + lowestError + ")"); canvas.println("Decoding finished."); return(((DecodeResult)results[lowestErrorIndex]).DecodedBytes); }
internal virtual int[][] imageToIntArray(QRCodeImage image) { int width = image.Width; int height = image.Height; int[][] intImage = new int[width][]; for (int i = 0; i < width; i++) { intImage[i] = new int[height]; } for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { intImage[x][y] = image.getPixel(x, y); } } return(intImage); }
internal virtual DecodeResult decode(QRCodeImage qrCodeImage, Point adjust) { try { if (numTryDecode == 0) { canvas.println("Decoding started"); int[][] intImage = imageToIntArray(qrCodeImage); imageReader = new QRCodeImageReader(); qrCodeSymbol = imageReader.getQRCodeSymbol(intImage); } else { canvas.println("--"); canvas.println("Decoding restarted #" + (numTryDecode)); qrCodeSymbol = imageReader.getQRCodeSymbolWithAdjustedGrid(adjust); } } catch (SymbolNotFoundException e) { throw new DecodingFailedException(e.Message); } canvas.println("Created QRCode symbol."); canvas.println("Reading symbol."); canvas.println("Version: " + qrCodeSymbol.VersionReference); canvas.println("Mask pattern: " + qrCodeSymbol.MaskPatternRefererAsString); // blocks contains all (data and RS) blocks in QR Code symbol int[] blocks = qrCodeSymbol.Blocks; canvas.println("Correcting data errors."); // now blocks turn to data blocks (corrected and extracted from original blocks) blocks = correctDataBlocks(blocks); try { sbyte[] decodedByteArray = getDecodedByteArray(blocks, qrCodeSymbol.Version, qrCodeSymbol.NumErrorCollectionCode); return(new DecodeResult(this, decodedByteArray, numLastCorrections, correctionSucceeded)); } catch (InvalidDataBlockException e) { canvas.println(e.Message); throw new DecodingFailedException(e.Message); } }
public virtual String decode(QRCodeImage qrCodeImage) { sbyte[] data = decodeBytes(qrCodeImage); byte[] byteData = new byte[data.Length]; Buffer.BlockCopy(data, 0, byteData, 0, byteData.Length); Encoding encoding; if (QRCodeUtility.IsUnicode(byteData)) { encoding = Encoding.Unicode; } else { encoding = Encoding.ASCII; } String decodedData; decodedData = encoding.GetString(byteData); return(decodedData); }
public virtual String decode(QRCodeImage qrCodeImage, Encoding encoding) { sbyte[] data = decodeBytes(qrCodeImage); byte[] byteData = new byte[data.Length]; Buffer.BlockCopy(data, 0, byteData, 0, byteData.Length); /* * char[] decodedData = new char[data.Length]; * for (int i = 0; i < data.Length; i++) * { * decodedData[i] = Convert.to(data[i]); * * } * return new String(decodedData); */ String decodedData; decodedData = encoding.GetString(byteData); return(decodedData); }