zxing_cpp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.gitmodules +3 -0
  4. data/CHANGELOG.rdoc +6 -0
  5. data/Gemfile +3 -0
  6. data/Manifest.txt +331 -0
  7. data/README.rdoc +138 -0
  8. data/Rakefile +28 -0
  9. data/bin/zxd +87 -0
  10. data/bin/zxe +53 -0
  11. data/ext/zxing/extconf.rb +27 -0
  12. data/ext/zxing/zxing-cpp/.gitignore +4 -0
  13. data/ext/zxing/zxing-cpp/AUTHORS +115 -0
  14. data/ext/zxing/zxing-cpp/CMakeLists.txt +84 -0
  15. data/ext/zxing/zxing-cpp/COPYING +201 -0
  16. data/ext/zxing/zxing-cpp/NOTICE +65 -0
  17. data/ext/zxing/zxing-cpp/README.md +50 -0
  18. data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.cpp +112 -0
  19. data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.h +40 -0
  20. data/ext/zxing/zxing-cpp/cli/src/jpgd.cpp +3174 -0
  21. data/ext/zxing/zxing-cpp/cli/src/jpgd.h +319 -0
  22. data/ext/zxing/zxing-cpp/cli/src/lodepng.cpp +6261 -0
  23. data/ext/zxing/zxing-cpp/cli/src/lodepng.h +1695 -0
  24. data/ext/zxing/zxing-cpp/cli/src/main.cpp +297 -0
  25. data/ext/zxing/zxing-cpp/cmake/FindCPPUNIT.cmake +54 -0
  26. data/ext/zxing/zxing-cpp/cmake/FindIconv.cmake +57 -0
  27. data/ext/zxing/zxing-cpp/core/src/bigint/.gitignore +6 -0
  28. data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.cc +405 -0
  29. data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.hh +215 -0
  30. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.cc +70 -0
  31. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.hh +25 -0
  32. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerLibrary.hh +8 -0
  33. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.cc +50 -0
  34. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.hh +72 -0
  35. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.cc +697 -0
  36. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.hh +418 -0
  37. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.cc +125 -0
  38. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.hh +122 -0
  39. data/ext/zxing/zxing-cpp/core/src/bigint/ChangeLog +146 -0
  40. data/ext/zxing/zxing-cpp/core/src/bigint/Makefile +73 -0
  41. data/ext/zxing/zxing-cpp/core/src/bigint/NumberlikeArray.hh +177 -0
  42. data/ext/zxing/zxing-cpp/core/src/bigint/README +71 -0
  43. data/ext/zxing/zxing-cpp/core/src/win32/zxing/iconv.h +14 -0
  44. data/ext/zxing/zxing-cpp/core/src/win32/zxing/stdint.h +247 -0
  45. data/ext/zxing/zxing-cpp/core/src/win32/zxing/win_iconv.c +2035 -0
  46. data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.cpp +40 -0
  47. data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.h +60 -0
  48. data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.cpp +45 -0
  49. data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.h +50 -0
  50. data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.cpp +70 -0
  51. data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.h +56 -0
  52. data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.cpp +28 -0
  53. data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.h +34 -0
  54. data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.cpp +142 -0
  55. data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.h +85 -0
  56. data/ext/zxing/zxing-cpp/core/src/zxing/Exception.cpp +43 -0
  57. data/ext/zxing/zxing-cpp/core/src/zxing/Exception.h +51 -0
  58. data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.cpp +41 -0
  59. data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.h +37 -0
  60. data/ext/zxing/zxing-cpp/core/src/zxing/IllegalStateException.h +35 -0
  61. data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.cpp +68 -0
  62. data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.h +48 -0
  63. data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.cpp +86 -0
  64. data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.h +59 -0
  65. data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.cpp +124 -0
  66. data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.h +48 -0
  67. data/ext/zxing/zxing-cpp/core/src/zxing/NotFoundException.h +35 -0
  68. data/ext/zxing/zxing-cpp/core/src/zxing/Reader.cpp +31 -0
  69. data/ext/zxing/zxing-cpp/core/src/zxing/Reader.h +40 -0
  70. data/ext/zxing/zxing-cpp/core/src/zxing/ReaderException.h +37 -0
  71. data/ext/zxing/zxing-cpp/core/src/zxing/Result.cpp +61 -0
  72. data/ext/zxing/zxing-cpp/core/src/zxing/Result.h +55 -0
  73. data/ext/zxing/zxing-cpp/core/src/zxing/ResultIO.cpp +34 -0
  74. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.cpp +108 -0
  75. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.h +55 -0
  76. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.cpp +26 -0
  77. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.h +39 -0
  78. data/ext/zxing/zxing-cpp/core/src/zxing/ZXing.h +133 -0
  79. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.cpp +54 -0
  80. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.h +48 -0
  81. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.cpp +68 -0
  82. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.h +49 -0
  83. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.cpp +489 -0
  84. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.h +69 -0
  85. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.cpp +548 -0
  86. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.h +92 -0
  87. data/ext/zxing/zxing-cpp/core/src/zxing/common/Array.h +170 -0
  88. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.cpp +155 -0
  89. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.h +81 -0
  90. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArrayIO.cpp +31 -0
  91. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.cpp +143 -0
  92. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.h +91 -0
  93. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.cpp +76 -0
  94. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.h +74 -0
  95. data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.cpp +104 -0
  96. data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.h +53 -0
  97. data/ext/zxing/zxing-cpp/core/src/zxing/common/Counted.h +140 -0
  98. data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.cpp +46 -0
  99. data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.h +51 -0
  100. data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.cpp +39 -0
  101. data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.h +43 -0
  102. data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.cpp +212 -0
  103. data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.h +48 -0
  104. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.cpp +80 -0
  105. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.h +53 -0
  106. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.cpp +81 -0
  107. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.h +46 -0
  108. data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.cpp +122 -0
  109. data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.h +45 -0
  110. data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.cpp +226 -0
  111. data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.h +67 -0
  112. data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.cpp +27 -0
  113. data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.h +36 -0
  114. data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.cpp +107 -0
  115. data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.h +49 -0
  116. data/ext/zxing/zxing-cpp/core/src/zxing/common/Point.h +47 -0
  117. data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.cpp +61 -0
  118. data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.h +51 -0
  119. data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.cpp +198 -0
  120. data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.h +52 -0
  121. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/JavaMath.h +43 -0
  122. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MathUtils.h +57 -0
  123. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.cpp +174 -0
  124. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.h +62 -0
  125. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.cpp +330 -0
  126. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.h +59 -0
  127. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.cpp +150 -0
  128. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.h +73 -0
  129. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.cpp +218 -0
  130. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.h +56 -0
  131. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.cpp +174 -0
  132. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.h +49 -0
  133. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.cpp +30 -0
  134. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.h +33 -0
  135. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.cpp +54 -0
  136. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.h +45 -0
  137. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.cpp +199 -0
  138. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.h +87 -0
  139. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.cpp +361 -0
  140. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.h +59 -0
  141. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.cpp +113 -0
  142. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.h +49 -0
  143. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp +416 -0
  144. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.h +104 -0
  145. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.cpp +93 -0
  146. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.h +49 -0
  147. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.cpp +46 -0
  148. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.h +43 -0
  149. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.cpp +446 -0
  150. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.h +94 -0
  151. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.cpp +23 -0
  152. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.h +23 -0
  153. data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.cpp +75 -0
  154. data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.h +42 -0
  155. data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.cpp +137 -0
  156. data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.h +51 -0
  157. data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.cpp +29 -0
  158. data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.h +41 -0
  159. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.cpp +58 -0
  160. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.h +36 -0
  161. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.cpp +47 -0
  162. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.h +37 -0
  163. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp +236 -0
  164. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h +47 -0
  165. data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.cpp +340 -0
  166. data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.h +57 -0
  167. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.cpp +496 -0
  168. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.h +48 -0
  169. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.cpp +328 -0
  170. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.h +63 -0
  171. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.cpp +293 -0
  172. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.h +58 -0
  173. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.cpp +85 -0
  174. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.h +49 -0
  175. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.cpp +65 -0
  176. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.h +47 -0
  177. data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.cpp +337 -0
  178. data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.h +54 -0
  179. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.cpp +96 -0
  180. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.h +38 -0
  181. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp +110 -0
  182. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.h +41 -0
  183. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.cpp +227 -0
  184. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.h +81 -0
  185. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.cpp +28 -0
  186. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.h +35 -0
  187. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.cpp +71 -0
  188. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.h +50 -0
  189. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.cpp +309 -0
  190. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.h +88 -0
  191. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.cpp +146 -0
  192. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.h +47 -0
  193. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.cpp +170 -0
  194. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.h +49 -0
  195. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.cpp +997 -0
  196. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.h +84 -0
  197. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.cpp +563 -0
  198. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.h +84 -0
  199. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.cpp +118 -0
  200. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.h +62 -0
  201. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.cpp +214 -0
  202. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.h +71 -0
  203. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.cpp +120 -0
  204. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.h +72 -0
  205. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.cpp +284 -0
  206. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.h +68 -0
  207. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.cpp +664 -0
  208. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.h +106 -0
  209. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.cpp +714 -0
  210. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.h +122 -0
  211. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.cpp +65 -0
  212. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.h +52 -0
  213. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.cpp +117 -0
  214. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.h +54 -0
  215. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.cpp +52 -0
  216. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.h +48 -0
  217. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.cpp +560 -0
  218. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.h +85 -0
  219. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.cpp +183 -0
  220. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.h +56 -0
  221. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.cpp +118 -0
  222. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.h +50 -0
  223. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.cpp +159 -0
  224. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.h +50 -0
  225. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.cpp +425 -0
  226. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.h +72 -0
  227. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.cpp +107 -0
  228. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.h +46 -0
  229. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.cpp +90 -0
  230. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.h +57 -0
  231. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.cpp +47 -0
  232. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.h +45 -0
  233. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.cpp +208 -0
  234. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.h +68 -0
  235. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.cpp +314 -0
  236. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.h +69 -0
  237. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.cpp +69 -0
  238. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.h +48 -0
  239. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.cpp +559 -0
  240. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.h +76 -0
  241. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.cpp +41 -0
  242. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.h +47 -0
  243. data/ext/zxing/zxing-cpp/core/tests/src/TestRunner.cpp +30 -0
  244. data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.cpp +216 -0
  245. data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.h +61 -0
  246. data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.cpp +106 -0
  247. data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.h +55 -0
  248. data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.cpp +49 -0
  249. data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.h +42 -0
  250. data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.cpp +58 -0
  251. data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.h +46 -0
  252. data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.cpp +69 -0
  253. data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.h +47 -0
  254. data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.cpp +129 -0
  255. data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.h +62 -0
  256. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.cpp +47 -0
  257. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.h +45 -0
  258. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.cpp +88 -0
  259. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.h +47 -0
  260. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.cpp +88 -0
  261. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.h +49 -0
  262. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.cpp +132 -0
  263. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.h +91 -0
  264. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.cpp +52 -0
  265. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.h +47 -0
  266. data/ext/zxing/zxing.cc +224 -0
  267. data/lib/zxing.rb +50 -0
  268. data/lib/zxing/.gitignore +2 -0
  269. data/lib/zxing/aztec.rb +5 -0
  270. data/lib/zxing/aztec/aztec_reader.rb +14 -0
  271. data/lib/zxing/bad_image_exception.rb +4 -0
  272. data/lib/zxing/binarizer.rb +8 -0
  273. data/lib/zxing/binary_bitmap.rb +15 -0
  274. data/lib/zxing/checksum_exception.rb +4 -0
  275. data/lib/zxing/common.rb +7 -0
  276. data/lib/zxing/common/bit_matrix.rb +9 -0
  277. data/lib/zxing/common/hybrid_binarizer.rb +17 -0
  278. data/lib/zxing/common/illegal_argument_exception.rb +4 -0
  279. data/lib/zxing/datamatrix.rb +5 -0
  280. data/lib/zxing/datamatrix/data_matrix_reader.rb +14 -0
  281. data/lib/zxing/decodable.rb +11 -0
  282. data/lib/zxing/exception.rb +4 -0
  283. data/lib/zxing/ffi.rb +20 -0
  284. data/lib/zxing/ffi/aztec.rb +6 -0
  285. data/lib/zxing/ffi/aztec/aztec_reader.rb +9 -0
  286. data/lib/zxing/ffi/binarizer.rb +25 -0
  287. data/lib/zxing/ffi/binary_bitmap.rb +15 -0
  288. data/lib/zxing/ffi/common.rb +8 -0
  289. data/lib/zxing/ffi/common/bit_matrix.rb +12 -0
  290. data/lib/zxing/ffi/common/greyscale_luminance_source.rb +30 -0
  291. data/lib/zxing/ffi/common/hybrid_binarizer.rb +10 -0
  292. data/lib/zxing/ffi/datamatrix.rb +6 -0
  293. data/lib/zxing/ffi/datamatrix/data_matrix_reader.rb +9 -0
  294. data/lib/zxing/ffi/library.rb +102 -0
  295. data/lib/zxing/ffi/luminance_source.rb +18 -0
  296. data/lib/zxing/ffi/multi_format_reader.rb +9 -0
  297. data/lib/zxing/ffi/oned.rb +6 -0
  298. data/lib/zxing/ffi/oned/code_39_reader.rb +10 -0
  299. data/lib/zxing/ffi/qrcode.rb +8 -0
  300. data/lib/zxing/ffi/qrcode/decoder.rb +10 -0
  301. data/lib/zxing/ffi/qrcode/detector.rb +10 -0
  302. data/lib/zxing/ffi/reader.rb +58 -0
  303. data/lib/zxing/ffi/result.rb +23 -0
  304. data/lib/zxing/format_exception.rb +4 -0
  305. data/lib/zxing/illegal_argument_exception.rb +4 -0
  306. data/lib/zxing/image.rb +15 -0
  307. data/lib/zxing/luminance_source.rb +18 -0
  308. data/lib/zxing/multi_format_reader.rb +11 -0
  309. data/lib/zxing/not_found_exception.rb +4 -0
  310. data/lib/zxing/oned.rb +5 -0
  311. data/lib/zxing/oned/code_39_reader.rb +15 -0
  312. data/lib/zxing/qrcode.rb +8 -0
  313. data/lib/zxing/qrcode/decoder.rb +14 -0
  314. data/lib/zxing/qrcode/detector.rb +14 -0
  315. data/lib/zxing/qrcode/encoder.rb +8 -0
  316. data/lib/zxing/qrcode/encoder/byte_matrix.rb +18 -0
  317. data/lib/zxing/qrcode/encoder/encoder.rb +9 -0
  318. data/lib/zxing/qrcode/encoder/qrcode.rb +18 -0
  319. data/lib/zxing/reader.rb +8 -0
  320. data/lib/zxing/reader_exception.rb +4 -0
  321. data/lib/zxing/reed_solomon_exception.rb +2 -0
  322. data/lib/zxing/result.rb +18 -0
  323. data/lib/zxing/rmagick.rb +5 -0
  324. data/lib/zxing/rmagick/image.rb +104 -0
  325. data/lib/zxing/version.rb +33 -0
  326. data/test/qrcode.png +0 -0
  327. data/test/test_helper.rb +5 -0
  328. data/test/test_zxing.rb +58 -0
  329. data/test/vendor.rb +360 -0
  330. data/test/zxing/test_decodable.rb +38 -0
  331. data/zxing_cpp.gemspec +48 -0
  332. metadata +473 -0
@@ -0,0 +1,54 @@
1
+ // -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
2
+ #ifndef __ITF_READER_H__
3
+ #define __ITF_READER_H__
4
+
5
+ /*
6
+ * Copyright 2010 ZXing authors All rights reserved.
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ #include <zxing/oned/OneDReader.h>
22
+ #include <zxing/common/BitArray.h>
23
+ #include <zxing/Result.h>
24
+
25
+ namespace zxing {
26
+ namespace oned {
27
+
28
+ class ITFReader : public OneDReader {
29
+ private:
30
+ enum {MAX_AVG_VARIANCE = (unsigned int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 420/1000)};
31
+ enum {MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 780/1000)};
32
+ // Stores the actual narrow line width of the image being decoded.
33
+ int narrowLineWidth;
34
+
35
+ Range decodeStart(Ref<BitArray> row);
36
+ Range decodeEnd(Ref<BitArray> row);
37
+ static void decodeMiddle(Ref<BitArray> row, int payloadStart, int payloadEnd, std::string& resultString);
38
+ void validateQuietZone(Ref<BitArray> row, int startPattern);
39
+ static int skipWhiteSpace(Ref<BitArray> row);
40
+
41
+ static Range findGuardPattern(Ref<BitArray> row, int rowOffset, std::vector<int> const& pattern);
42
+ static int decodeDigit(std::vector<int>& counters);
43
+
44
+ void append(char* s, char c);
45
+ public:
46
+ Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
47
+ ITFReader();
48
+ ~ITFReader();
49
+ };
50
+
51
+ }
52
+ }
53
+
54
+ #endif
@@ -0,0 +1,96 @@
1
+ // -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
2
+ /*
3
+ * Copyright 2010 ZXing authors All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include <zxing/ZXing.h>
19
+ #include <zxing/oned/MultiFormatOneDReader.h>
20
+ #include <zxing/oned/MultiFormatUPCEANReader.h>
21
+ #include <zxing/oned/Code39Reader.h>
22
+ #include <zxing/oned/Code128Reader.h>
23
+ #include <zxing/oned/Code93Reader.h>
24
+ #include <zxing/oned/CodaBarReader.h>
25
+ #include <zxing/oned/ITFReader.h>
26
+ #include <zxing/ReaderException.h>
27
+ #include <zxing/NotFoundException.h>
28
+
29
+ using zxing::Ref;
30
+ using zxing::Result;
31
+ using zxing::oned::MultiFormatOneDReader;
32
+
33
+ // VC++
34
+ using zxing::DecodeHints;
35
+ using zxing::BitArray;
36
+
37
+ MultiFormatOneDReader::MultiFormatOneDReader(DecodeHints hints) : readers() {
38
+ if (hints.containsFormat(BarcodeFormat::EAN_13) ||
39
+ hints.containsFormat(BarcodeFormat::EAN_8) ||
40
+ hints.containsFormat(BarcodeFormat::UPC_A) ||
41
+ hints.containsFormat(BarcodeFormat::UPC_E)) {
42
+ readers.push_back(Ref<OneDReader>(new MultiFormatUPCEANReader(hints)));
43
+ }
44
+ if (hints.containsFormat(BarcodeFormat::CODE_39)) {
45
+ readers.push_back(Ref<OneDReader>(new Code39Reader()));
46
+ }
47
+ if (hints.containsFormat(BarcodeFormat::CODE_93)) {
48
+ readers.push_back(Ref<OneDReader>(new Code93Reader()));
49
+ }
50
+ if (hints.containsFormat(BarcodeFormat::CODE_128)) {
51
+ readers.push_back(Ref<OneDReader>(new Code128Reader()));
52
+ }
53
+ if (hints.containsFormat(BarcodeFormat::ITF)) {
54
+ readers.push_back(Ref<OneDReader>(new ITFReader()));
55
+ }
56
+ if (hints.containsFormat(BarcodeFormat::CODABAR)) {
57
+ readers.push_back(Ref<OneDReader>(new CodaBarReader()));
58
+ }
59
+ /*
60
+ if (hints.containsFormat(BarcodeFormat::RSS_14)) {
61
+ readers.push_back(Ref<OneDReader>(new RSS14Reader()));
62
+ }
63
+ */
64
+ /*
65
+ if (hints.containsFormat(BarcodeFormat::RSS_EXPANDED)) {
66
+ readers.push_back(Ref<OneDReader>(new RSS14ExpandedReader()));
67
+ }
68
+ */
69
+ if (readers.size() == 0) {
70
+ readers.push_back(Ref<OneDReader>(new MultiFormatUPCEANReader(hints)));
71
+ readers.push_back(Ref<OneDReader>(new Code39Reader()));
72
+ readers.push_back(Ref<OneDReader>(new CodaBarReader()));
73
+ readers.push_back(Ref<OneDReader>(new Code93Reader()));
74
+ readers.push_back(Ref<OneDReader>(new Code128Reader()));
75
+ readers.push_back(Ref<OneDReader>(new ITFReader()));
76
+ // readers.push_back(Ref<OneDReader>(new RSS14Reader()));
77
+ // readers.push_back(Ref<OneDReader>(new RSS14ExpandedReader()));
78
+ }
79
+ }
80
+
81
+ #include <typeinfo>
82
+
83
+ Ref<Result> MultiFormatOneDReader::decodeRow(int rowNumber, Ref<BitArray> row) {
84
+ int size = readers.size();
85
+ for (int i = 0; i < size; i++) {
86
+ OneDReader* reader = readers[i];
87
+ try {
88
+ Ref<Result> result = reader->decodeRow(rowNumber, row);
89
+ return result;
90
+ } catch (ReaderException const& re) {
91
+ (void)re;
92
+ // continue
93
+ }
94
+ }
95
+ throw NotFoundException();
96
+ }
@@ -0,0 +1,38 @@
1
+ #ifndef __MULTI_FORMAT_ONED_READER_H__
2
+ #define __MULTI_FORMAT_ONED_READER_H__
3
+ /*
4
+ * MultiFormatOneDReader.h
5
+ * ZXing
6
+ *
7
+ * Copyright 2010 ZXing authors All rights reserved.
8
+ *
9
+ * Licensed under the Apache License, Version 2.0 (the "License");
10
+ * you may not use this file except in compliance with the License.
11
+ * You may obtain a copy of the License at
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ *
15
+ * Unless required by applicable law or agreed to in writing, software
16
+ * distributed under the License is distributed on an "AS IS" BASIS,
17
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ * See the License for the specific language governing permissions and
19
+ * limitations under the License.
20
+ */
21
+
22
+ #include <zxing/oned/OneDReader.h>
23
+
24
+ namespace zxing {
25
+ namespace oned {
26
+ class MultiFormatOneDReader : public OneDReader {
27
+
28
+ private:
29
+ std::vector<Ref<OneDReader> > readers;
30
+ public:
31
+ MultiFormatOneDReader(DecodeHints hints);
32
+
33
+ Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
34
+ };
35
+ }
36
+ }
37
+
38
+ #endif
@@ -0,0 +1,110 @@
1
+ // -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
2
+ /*
3
+ * MultiFormatUPCEANReader.cpp
4
+ * ZXing
5
+ *
6
+ * Copyright 2010 ZXing authors All rights reserved.
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ #include <zxing/ZXing.h>
22
+ #include <zxing/oned/MultiFormatUPCEANReader.h>
23
+ #include <zxing/oned/EAN13Reader.h>
24
+ #include <zxing/oned/EAN8Reader.h>
25
+ #include <zxing/oned/UPCEReader.h>
26
+ #include <zxing/oned/UPCAReader.h>
27
+ #include <zxing/oned/OneDResultPoint.h>
28
+ #include <zxing/common/Array.h>
29
+ #include <zxing/ReaderException.h>
30
+ #include <zxing/NotFoundException.h>
31
+ #include <math.h>
32
+
33
+ using zxing::NotFoundException;
34
+ using zxing::Ref;
35
+ using zxing::Result;
36
+ using zxing::oned::MultiFormatUPCEANReader;
37
+
38
+ // VC++
39
+ using zxing::DecodeHints;
40
+ using zxing::BitArray;
41
+
42
+ MultiFormatUPCEANReader::MultiFormatUPCEANReader(DecodeHints hints) : readers() {
43
+ if (hints.containsFormat(BarcodeFormat::EAN_13)) {
44
+ readers.push_back(Ref<UPCEANReader>(new EAN13Reader()));
45
+ } else if (hints.containsFormat(BarcodeFormat::UPC_A)) {
46
+ readers.push_back(Ref<UPCEANReader>(new UPCAReader()));
47
+ }
48
+ if (hints.containsFormat(BarcodeFormat::EAN_8)) {
49
+ readers.push_back(Ref<UPCEANReader>(new EAN8Reader()));
50
+ }
51
+ if (hints.containsFormat(BarcodeFormat::UPC_E)) {
52
+ readers.push_back(Ref<UPCEANReader>(new UPCEReader()));
53
+ }
54
+ if (readers.size() == 0) {
55
+ readers.push_back(Ref<UPCEANReader>(new EAN13Reader()));
56
+ // UPC-A is covered by EAN-13
57
+ readers.push_back(Ref<UPCEANReader>(new EAN8Reader()));
58
+ readers.push_back(Ref<UPCEANReader>(new UPCEReader()));
59
+ }
60
+ }
61
+
62
+ #include <typeinfo>
63
+
64
+ Ref<Result> MultiFormatUPCEANReader::decodeRow(int rowNumber, Ref<BitArray> row) {
65
+ // Compute this location once and reuse it on multiple implementations
66
+ UPCEANReader::Range startGuardPattern = UPCEANReader::findStartGuardPattern(row);
67
+ for (int i = 0, e = readers.size(); i < e; i++) {
68
+ Ref<UPCEANReader> reader = readers[i];
69
+ Ref<Result> result;
70
+ try {
71
+ result = reader->decodeRow(rowNumber, row, startGuardPattern);
72
+ } catch (ReaderException const& ignored) {
73
+ (void)ignored;
74
+ continue;
75
+ }
76
+
77
+ // Special case: a 12-digit code encoded in UPC-A is identical
78
+ // to a "0" followed by those 12 digits encoded as EAN-13. Each
79
+ // will recognize such a code, UPC-A as a 12-digit string and
80
+ // EAN-13 as a 13-digit string starting with "0". Individually
81
+ // these are correct and their readers will both read such a
82
+ // code and correctly call it EAN-13, or UPC-A, respectively.
83
+ //
84
+ // In this case, if we've been looking for both types, we'd like
85
+ // to call it a UPC-A code. But for efficiency we only run the
86
+ // EAN-13 decoder to also read UPC-A. So we special case it
87
+ // here, and convert an EAN-13 result to a UPC-A result if
88
+ // appropriate.
89
+ bool ean13MayBeUPCA =
90
+ result->getBarcodeFormat() == BarcodeFormat::EAN_13 &&
91
+ result->getText()->charAt(0) == '0';
92
+
93
+ // Note: doesn't match Java which uses hints
94
+
95
+ bool canReturnUPCA = true;
96
+
97
+ if (ean13MayBeUPCA && canReturnUPCA) {
98
+ // Transfer the metdata across
99
+ Ref<Result> resultUPCA (new Result(result->getText()->substring(1),
100
+ result->getRawBytes(),
101
+ result->getResultPoints(),
102
+ BarcodeFormat::UPC_A));
103
+ // needs java metadata stuff
104
+ return resultUPCA;
105
+ }
106
+ return result;
107
+ }
108
+
109
+ throw NotFoundException();
110
+ }
@@ -0,0 +1,41 @@
1
+ // -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
2
+ #ifndef __MULTI_FORMAT_UPC_EAN_READER_H__
3
+ #define __MULTI_FORMAT_UPC_EAN_READER_H__
4
+ /*
5
+ * MultiFormatUPCEANReader.h
6
+ * ZXing
7
+ *
8
+ * Copyright 2010 ZXing authors All rights reserved.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0 (the "License");
11
+ * you may not use this file except in compliance with the License.
12
+ * You may obtain a copy of the License at
13
+ *
14
+ * http://www.apache.org/licenses/LICENSE-2.0
15
+ *
16
+ * Unless required by applicable law or agreed to in writing, software
17
+ * distributed under the License is distributed on an "AS IS" BASIS,
18
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ * See the License for the specific language governing permissions and
20
+ * limitations under the License.
21
+ */
22
+
23
+ #include <zxing/oned/OneDReader.h>
24
+
25
+ namespace zxing {
26
+ namespace oned {
27
+
28
+ class UPCEANReader;
29
+
30
+ class MultiFormatUPCEANReader : public OneDReader {
31
+ private:
32
+ std::vector< Ref<UPCEANReader> > readers;
33
+ public:
34
+ MultiFormatUPCEANReader(DecodeHints hints);
35
+ Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
36
+ };
37
+
38
+ }
39
+ }
40
+
41
+ #endif
@@ -0,0 +1,227 @@
1
+ // -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
2
+ /*
3
+ * Copyright 2010 ZXing authors All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include <zxing/ZXing.h>
19
+ #include <zxing/oned/OneDReader.h>
20
+ #include <zxing/ReaderException.h>
21
+ #include <zxing/oned/OneDResultPoint.h>
22
+ #include <zxing/NotFoundException.h>
23
+ #include <math.h>
24
+ #include <limits.h>
25
+
26
+ using std::vector;
27
+ using zxing::Ref;
28
+ using zxing::Result;
29
+ using zxing::NotFoundException;
30
+ using zxing::oned::OneDReader;
31
+
32
+ // VC++
33
+ using zxing::BinaryBitmap;
34
+ using zxing::BitArray;
35
+ using zxing::DecodeHints;
36
+
37
+ OneDReader::OneDReader() {}
38
+
39
+ Ref<Result> OneDReader::decode(Ref<BinaryBitmap> image, DecodeHints hints) {
40
+ try {
41
+ return doDecode(image, hints);
42
+ } catch (NotFoundException const& nfe) {
43
+ // std::cerr << "trying harder" << std::endl;
44
+ bool tryHarder = hints.getTryHarder();
45
+ if (tryHarder && image->isRotateSupported()) {
46
+ // std::cerr << "v rotate" << std::endl;
47
+ Ref<BinaryBitmap> rotatedImage(image->rotateCounterClockwise());
48
+ // std::cerr << "^ rotate" << std::endl;
49
+ Ref<Result> result = doDecode(rotatedImage, hints);
50
+ // Doesn't have java metadata stuff
51
+ ArrayRef< Ref<ResultPoint> >& points (result->getResultPoints());
52
+ if (points && !points->empty()) {
53
+ int height = rotatedImage->getHeight();
54
+ for (int i = 0; i < points->size(); i++) {
55
+ points[i].reset(new OneDResultPoint(height - points[i]->getY() - 1, points[i]->getX()));
56
+ }
57
+ }
58
+ // std::cerr << "tried harder" << std::endl;
59
+ return result;
60
+ } else {
61
+ // std::cerr << "tried harder nfe" << std::endl;
62
+ throw nfe;
63
+ }
64
+ }
65
+ }
66
+
67
+ #include <typeinfo>
68
+
69
+ Ref<Result> OneDReader::doDecode(Ref<BinaryBitmap> image, DecodeHints hints) {
70
+ int width = image->getWidth();
71
+ int height = image->getHeight();
72
+ Ref<BitArray> row(new BitArray(width));
73
+
74
+ int middle = height >> 1;
75
+ bool tryHarder = hints.getTryHarder();
76
+ int rowStep = std::max(1, height >> (tryHarder ? 8 : 5));
77
+ using namespace std;
78
+ // cerr << "rS " << rowStep << " " << height << " " << tryHarder << endl;
79
+ int maxLines;
80
+ if (tryHarder) {
81
+ maxLines = height; // Look at the whole image, not just the center
82
+ } else {
83
+ maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image
84
+ }
85
+
86
+ for (int x = 0; x < maxLines; x++) {
87
+
88
+ // Scanning from the middle out. Determine which row we're looking at next:
89
+ int rowStepsAboveOrBelow = (x + 1) >> 1;
90
+ bool isAbove = (x & 0x01) == 0; // i.e. is x even?
91
+ int rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow);
92
+ if (false) {
93
+ std::cerr << "rN "
94
+ << rowNumber << " "
95
+ << height << " "
96
+ << middle << " "
97
+ << rowStep << " "
98
+ << isAbove << " "
99
+ << rowStepsAboveOrBelow
100
+ << std::endl;
101
+ }
102
+ if (rowNumber < 0 || rowNumber >= height) {
103
+ // Oops, if we run off the top or bottom, stop
104
+ break;
105
+ }
106
+
107
+ // Estimate black point for this row and load it:
108
+ try {
109
+ row = image->getBlackRow(rowNumber, row);
110
+ } catch (NotFoundException const& ignored) {
111
+ (void)ignored;
112
+ continue;
113
+ }
114
+
115
+ // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to
116
+ // handle decoding upside down barcodes.
117
+ for (int attempt = 0; attempt < 2; attempt++) {
118
+ if (attempt == 1) {
119
+ row->reverse(); // reverse the row and continue
120
+ }
121
+
122
+ // Java hints stuff missing
123
+
124
+ try {
125
+ // Look for a barcode
126
+ // std::cerr << "rn " << rowNumber << " " << typeid(*this).name() << std::endl;
127
+ Ref<Result> result = decodeRow(rowNumber, row);
128
+ // We found our barcode
129
+ if (attempt == 1) {
130
+ // But it was upside down, so note that
131
+ // result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(180));
132
+ // And remember to flip the result points horizontally.
133
+ ArrayRef< Ref<ResultPoint> > points(result->getResultPoints());
134
+ if (points) {
135
+ points[0] = Ref<ResultPoint>(new OneDResultPoint(width - points[0]->getX() - 1,
136
+ points[0]->getY()));
137
+ points[1] = Ref<ResultPoint>(new OneDResultPoint(width - points[1]->getX() - 1,
138
+ points[1]->getY()));
139
+
140
+ }
141
+ }
142
+ return result;
143
+ } catch (ReaderException const& re) {
144
+ (void)re;
145
+ continue;
146
+ }
147
+ }
148
+ }
149
+ throw NotFoundException();
150
+ }
151
+
152
+ int OneDReader::patternMatchVariance(vector<int>& counters,
153
+ vector<int> const& pattern,
154
+ int maxIndividualVariance) {
155
+ return patternMatchVariance(counters, &pattern[0], maxIndividualVariance);
156
+ }
157
+
158
+ int OneDReader::patternMatchVariance(vector<int>& counters,
159
+ int const pattern[],
160
+ int maxIndividualVariance) {
161
+ int numCounters = counters.size();
162
+ unsigned int total = 0;
163
+ unsigned int patternLength = 0;
164
+ for (int i = 0; i < numCounters; i++) {
165
+ total += counters[i];
166
+ patternLength += pattern[i];
167
+ }
168
+ if (total < patternLength) {
169
+ // If we don't even have one pixel per unit of bar width, assume this is too small
170
+ // to reliably match, so fail:
171
+ return INT_MAX;
172
+ }
173
+ // We're going to fake floating-point math in integers. We just need to use more bits.
174
+ // Scale up patternLength so that intermediate values below like scaledCounter will have
175
+ // more "significant digits"
176
+ int unitBarWidth = (total << INTEGER_MATH_SHIFT) / patternLength;
177
+ maxIndividualVariance = (maxIndividualVariance * unitBarWidth) >> INTEGER_MATH_SHIFT;
178
+
179
+ int totalVariance = 0;
180
+ for (int x = 0; x < numCounters; x++) {
181
+ int counter = counters[x] << INTEGER_MATH_SHIFT;
182
+ int scaledPattern = pattern[x] * unitBarWidth;
183
+ int variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;
184
+ if (variance > maxIndividualVariance) {
185
+ return INT_MAX;
186
+ }
187
+ totalVariance += variance;
188
+ }
189
+ return totalVariance / total;
190
+ }
191
+
192
+ void OneDReader::recordPattern(Ref<BitArray> row,
193
+ int start,
194
+ vector<int>& counters) {
195
+ int numCounters = counters.size();
196
+ for (int i = 0; i < numCounters; i++) {
197
+ counters[i] = 0;
198
+ }
199
+ int end = row->getSize();
200
+ if (start >= end) {
201
+ throw NotFoundException();
202
+ }
203
+ bool isWhite = !row->get(start);
204
+ int counterPosition = 0;
205
+ int i = start;
206
+ while (i < end) {
207
+ if (row->get(i) ^ isWhite) { // that is, exactly one is true
208
+ counters[counterPosition]++;
209
+ } else {
210
+ counterPosition++;
211
+ if (counterPosition == numCounters) {
212
+ break;
213
+ } else {
214
+ counters[counterPosition] = 1;
215
+ isWhite = !isWhite;
216
+ }
217
+ }
218
+ i++;
219
+ }
220
+ // If we read fully the last section of pixels and filled up our counters -- or filled
221
+ // the last counter but ran off the side of the image, OK. Otherwise, a problem.
222
+ if (!(counterPosition == numCounters || (counterPosition == numCounters - 1 && i == end))) {
223
+ throw NotFoundException();
224
+ }
225
+ }
226
+
227
+ OneDReader::~OneDReader() {}