Ejemplo n.º 1
0
 /**
  * @param bitMatrix {@link BitMatrix} to parse
  * @throws ReaderException if dimension is not >= 21 and 1 mod 4
  */
 public BitMatrixParser(BitMatrix bitMatrix){
   int dimension = bitMatrix.getDimension();
   if (dimension < 21 || (dimension & 0x03) != 1) {
     throw new ReaderException();
   }
   this.bitMatrix = bitMatrix;
 }
Ejemplo n.º 2
0
        /**
           * @param bitMatrix {@link BitMatrix} to parse
           * @throws ReaderException if dimension is < 10 or > 144 or not 0 mod 2
           */
        public BitMatrixParser(BitMatrix bitMatrix)
        {
            int dimension = bitMatrix.getDimension();
            if (dimension < 10 || dimension > 144 || (dimension & 0x01) != 0) {
              throw new ReaderException();
            }

            version = readVersion(bitMatrix);
            this.mappingBitMatrix = extractDataRegion(bitMatrix);
            // TODO(bbrown): Make this work for rectangular symbols
            this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getDimension());
        }
Ejemplo n.º 3
0
        /**
           * <p>Extracts the data region from a {@link BitMatrix} that contains
           * alignment patterns.</p>
           *
           * @param bitMatrix Original {@link BitMatrix} with alignment patterns
           * @return BitMatrix that has the alignment patterns removed
           */
        BitMatrix extractDataRegion(BitMatrix bitMatrix)
        {
            int symbolSizeRows = version.getSymbolSizeRows();
            int symbolSizeColumns = version.getSymbolSizeColumns();

            // TODO(bbrown): Make this work with rectangular codes
            if (bitMatrix.getDimension() != symbolSizeRows) {
              throw new ArgumentException("Dimension of bitMarix must match the version size");
            }

            int dataRegionSizeRows = version.getDataRegionSizeRows();
            int dataRegionSizeColumns = version.getDataRegionSizeColumns();

            int numDataRegionsRow = symbolSizeRows / dataRegionSizeRows;
            int numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns;

            int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;
            //int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;

            // TODO(bbrown): Make this work with rectangular codes
            BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionRow);
            for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {
              int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;
              for (int dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {
                int dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns;
                for (int i = 0; i < dataRegionSizeRows; ++i) {
                  int readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i;
                  int writeRowOffset = dataRegionRowOffset + i;
                  for (int j = 0; j < dataRegionSizeColumns; ++j) {
                    int readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j;
                    if (bitMatrix.get(readRowOffset, readColumnOffset)) {
                      int writeColumnOffset = dataRegionColumnOffset + j;
                      bitMatrixWithoutAlignment.set(writeRowOffset, writeColumnOffset);
                    }
                  }
                }
              }
            }
            return bitMatrixWithoutAlignment;
        }
Ejemplo n.º 4
0
        /**
           * <p>Creates the version object based on the dimension of the original bit matrix from
           * the datamatrix code.</p>
           *
           * <p>See ISO 16022:2006 Table 7 - ECC 200 symbol attributes</p>
           *
           * @param bitMatrix Original {@link BitMatrix} including alignment patterns
           * @return {@link Version} encapsulating the Data Matrix Code's "version"
           * @throws ReaderException if the dimensions of the mapping matrix are not valid
           * Data Matrix dimensions.
           */
        public Version readVersion(BitMatrix bitMatrix)
        {
            if (version != null) {
              return version;
            }

            // TODO(bbrown): make this work for rectangular dimensions as well.
            int numRows = bitMatrix.getDimension();
            int numColumns = numRows;

            return Version.getVersionForDimensions(numRows, numColumns);
        }