Example #1
0
        /// <summary>
        /// <p>Reads version information from one of its two locations within the QR Code.</p>
        /// </summary>
        /// <returns> <seealso cref="Version"/> encapsulating the QR Code's version </returns>
        /// <exception cref="FormatException"> if both version information locations cannot be parsed as
        /// the valid encoding of version information </exception>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: Version readVersion() throws com.google.zxing.FormatException
        internal Version readVersion()
        {
            if (parsedVersion != null)
            {
                return(parsedVersion);
            }

            int dimension = bitMatrix.Height;

            int provisionalVersion = (dimension - 17) >> 2;

            if (provisionalVersion <= 6)
            {
                return(Version.getVersionForNumber(provisionalVersion));
            }

            // Read top-right version info: 3 wide by 6 tall
            int versionBits = 0;
            int ijMin       = dimension - 11;

            for (int j = 5; j >= 0; j--)
            {
                for (int i = dimension - 9; i >= ijMin; i--)
                {
                    versionBits = copyBit(i, j, versionBits);
                }
            }

            Version theParsedVersion = Version.decodeVersionInformation(versionBits);

            if (theParsedVersion != null && theParsedVersion.DimensionForVersion == dimension)
            {
                parsedVersion = theParsedVersion;
                return(theParsedVersion);
            }

            // Hmm, failed. Try bottom left: 6 wide by 3 tall
            versionBits = 0;
            for (int i = 5; i >= 0; i--)
            {
                for (int j = dimension - 9; j >= ijMin; j--)
                {
                    versionBits = copyBit(i, j, versionBits);
                }
            }

            theParsedVersion = Version.decodeVersionInformation(versionBits);
            if (theParsedVersion != null && theParsedVersion.DimensionForVersion == dimension)
            {
                parsedVersion = theParsedVersion;
                return(theParsedVersion);
            }
            throw FormatException.FormatInstance;
        }
Example #2
0
        /**
         * <p>Reads version information from one of its two locations within the QR Code.</p>
         *
         * @return {@link Version} encapsulating the QR Code's version
         * @throws ReaderException if both version information locations cannot be parsed as
         * the valid encoding of version information
         */
        public Version readVersion()
        {
            if (parsedVersion != null)
            {
                return(parsedVersion);
            }

            int dimension = bitMatrix.getDimension();

            int provisionalVersion = (dimension - 17) >> 2;

            if (provisionalVersion <= 6)
            {
                return(Version.getVersionForNumber(provisionalVersion));
            }

            // Read top-right version info: 3 wide by 6 tall
            int versionBits = 0;

            for (int i = 5; i >= 0; i--)
            {
                int jMin = dimension - 11;
                for (int j = dimension - 9; j >= jMin; j--)
                {
                    versionBits = copyBit(i, j, versionBits);
                }
            }

            parsedVersion = Version.decodeVersionInformation(versionBits);
            if (parsedVersion != null)
            {
                return(parsedVersion);
            }

            // Hmm, failed. Try bottom left: 6 wide by 3 tall
            versionBits = 0;
            for (int j = 5; j >= 0; j--)
            {
                int iMin = dimension - 11;
                for (int i = dimension - 11; i >= iMin; i--)
                {
                    versionBits = copyBit(i, j, versionBits);
                }
            }

            parsedVersion = Version.decodeVersionInformation(versionBits);
            if (parsedVersion != null)
            {
                return(parsedVersion);
            }
            throw new ReaderException();
        }