X-Git-Url: http://git.rot13.org/?p=zxing.git;a=blobdiff_plain;f=core%2Fsrc%2Fcom%2Fgoogle%2Fzxing%2Fdatamatrix%2Fdecoder%2FBitMatrixParser.java;h=45ffd2d04bdcf48c688c8848682135c8b512f4b4;hp=96032b43525f460b00b34c5c9e097008db532c54;hb=d0920ceb07da310eb8e10f6a11d5590bcb3184ea;hpb=39ad0a4d87d592f3de98101bb05855348c78494e;ds=sidebyside diff --git a/core/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java b/core/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java index 96032b43..45ffd2d0 100644 --- a/core/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java +++ b/core/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java @@ -30,18 +30,21 @@ final class BitMatrixParser { /** * @param bitMatrix {@link BitMatrix} to parse - * @throws FormatException if dimension is < 10 or > 144 or not 0 mod 2 + * @throws FormatException if dimension is < 8 or > 144 or not 0 mod 2 */ BitMatrixParser(BitMatrix bitMatrix) throws FormatException { int dimension = bitMatrix.getHeight(); - if (dimension < 10 || dimension > 144 || (dimension & 0x01) != 0) { + if (dimension < 8 || dimension > 144 || (dimension & 0x01) != 0) { throw FormatException.getFormatInstance(); } version = readVersion(bitMatrix); this.mappingBitMatrix = extractDataRegion(bitMatrix); - // TODO(bbrown): Make this work for rectangular symbols - this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getHeight()); + this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getWidth(), this.mappingBitMatrix.getHeight()); + } + + Version getVersion() { + return version; } /** @@ -55,16 +58,9 @@ final class BitMatrixParser { * @throws FormatException if the dimensions of the mapping matrix are not valid * Data Matrix dimensions. */ - Version readVersion(BitMatrix bitMatrix) throws FormatException { - - if (version != null) { - return version; - } - - // TODO(bbrown): make this work for rectangular dimensions as well. + private static Version readVersion(BitMatrix bitMatrix) throws FormatException { int numRows = bitMatrix.getHeight(); - int numColumns = numRows; - + int numColumns = bitMatrix.getWidth(); return Version.getVersionForDimensions(numRows, numColumns); } @@ -83,9 +79,9 @@ final class BitMatrixParser { int row = 4; int column = 0; - // TODO(bbrown): Data Matrix can be rectangular, assuming square for now + int numRows = mappingBitMatrix.getHeight(); - int numColumns = numRows; + int numColumns = mappingBitMatrix.getWidth(); boolean corner1Read = false; boolean corner2Read = false; @@ -407,7 +403,6 @@ final class BitMatrixParser { int symbolSizeRows = version.getSymbolSizeRows(); int symbolSizeColumns = version.getSymbolSizeColumns(); - // TODO(bbrown): Make this work with rectangular codes if (bitMatrix.getHeight() != symbolSizeRows) { throw new IllegalArgumentException("Dimension of bitMarix must match the version size"); } @@ -419,10 +414,9 @@ final class BitMatrixParser { int numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns; int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows; - //int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns; + int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns; - // TODO(bbrown): Make this work with rectangular codes - BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionRow); + BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionColumn, sizeDataRegionRow); for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) { int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows; for (int dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {