Issue 563: Support non-rectangular Data Matrix
[zxing.git] / core / src / com / google / zxing / datamatrix / decoder / BitMatrixParser.java
index 96032b4..3fe11a2 100644 (file)
@@ -30,18 +30,17 @@ final class BitMatrixParser {
 \r
   /**\r
    * @param bitMatrix {@link BitMatrix} to parse\r
-   * @throws FormatException if dimension is < 10 or > 144 or not 0 mod 2\r
+   * @throws FormatException if dimension is < 8 or > 144 or not 0 mod 2\r
    */\r
   BitMatrixParser(BitMatrix bitMatrix) throws FormatException {\r
     int dimension = bitMatrix.getHeight();\r
-    if (dimension < 10 || dimension > 144 || (dimension & 0x01) != 0) {\r
+    if (dimension < 8 || dimension > 144 || (dimension & 0x01) != 0) {\r
       throw FormatException.getFormatInstance();\r
     }\r
     \r
     version = readVersion(bitMatrix);\r
     this.mappingBitMatrix = extractDataRegion(bitMatrix);\r
-    // TODO(bbrown): Make this work for rectangular symbols\r
-    this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getHeight());\r
+    this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getWidth(), this.mappingBitMatrix.getHeight());\r
   }\r
 \r
   /**\r
@@ -61,9 +60,8 @@ final class BitMatrixParser {
       return version;\r
     }\r
 \r
-    // TODO(bbrown): make this work for rectangular dimensions as well.\r
     int numRows = bitMatrix.getHeight();\r
-    int numColumns = numRows;\r
+    int numColumns = bitMatrix.getWidth();\r
     \r
     return Version.getVersionForDimensions(numRows, numColumns);\r
   }\r
@@ -83,9 +81,9 @@ final class BitMatrixParser {
     \r
     int row = 4;\r
     int column = 0;\r
-    // TODO(bbrown): Data Matrix can be rectangular, assuming square for now\r
+\r
     int numRows = mappingBitMatrix.getHeight();\r
-    int numColumns = numRows;\r
+    int numColumns = mappingBitMatrix.getWidth();\r
     \r
     boolean corner1Read = false;\r
     boolean corner2Read = false;\r
@@ -407,7 +405,6 @@ final class BitMatrixParser {
     int symbolSizeRows = version.getSymbolSizeRows();\r
     int symbolSizeColumns = version.getSymbolSizeColumns();\r
     \r
-    // TODO(bbrown): Make this work with rectangular codes\r
     if (bitMatrix.getHeight() != symbolSizeRows) {\r
       throw new IllegalArgumentException("Dimension of bitMarix must match the version size");\r
     }\r
@@ -419,10 +416,10 @@ final class BitMatrixParser {
     int numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns;\r
     \r
     int sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;\r
-    //int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;\r
+    int sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;\r
     \r
     // TODO(bbrown): Make this work with rectangular codes\r
-    BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionRow);\r
+    BitMatrix bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionColumn, sizeDataRegionRow);\r
     for (int dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {\r
       int dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;\r
       for (int dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {\r