类com.google.zxing.qrcode.decoder.Version源码实例Demo

下面列出了怎么用com.google.zxing.qrcode.decoder.Version的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: Telegram-FOSS   文件: MatrixUtil.java

static void maybeEmbedVersionInfo(Version version, ByteMatrix matrix) throws WriterException {
  if (version.getVersionNumber() < 7) {  // Version info is necessary if version >= 7.
    return;  // Don't need version info.
  }
  BitArray versionInfoBits = new BitArray();
  makeVersionInfoBits(version, versionInfoBits);

  int bitIndex = 6 * 3 - 1;  // It will decrease from 17 to 0.
  for (int i = 0; i < 6; ++i) {
    for (int j = 0; j < 3; ++j) {
      // Place bits in LSB (least significant bit) to MSB order.
      boolean bit = versionInfoBits.get(bitIndex);
      bitIndex--;
      // Left bottom corner.
      matrix.set(i, matrix.getHeight() - 11 + j, bit);
      // Right bottom corner.
      matrix.set(matrix.getHeight() - 11 + j, i, bit);
    }
  }
}
 
源代码2 项目: ScreenCapture   文件: Encoder.java

private static int chooseMaskPattern(BitArray bits,
                                     ErrorCorrectionLevel ecLevel,
                                     Version version,
                                     ByteMatrix matrix) throws WriterException {

  int minPenalty = Integer.MAX_VALUE;  // Lower penalty is better.
  int bestMaskPattern = -1;
  // We try all mask patterns to choose the best one.
  for (int maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {
    MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);
    int penalty = calculateMaskPenalty(matrix);
    if (penalty < minPenalty) {
      minPenalty = penalty;
      bestMaskPattern = maskPattern;
    }
  }
  return bestMaskPattern;
}
 
源代码3 项目: ScreenCapture   文件: MatrixUtil.java

static void maybeEmbedVersionInfo(Version version, ByteMatrix matrix) throws WriterException {
  if (version.getVersionNumber() < 7) {  // Version info is necessary if version >= 7.
    return;  // Don't need version info.
  }
  BitArray versionInfoBits = new BitArray();
  makeVersionInfoBits(version, versionInfoBits);

  int bitIndex = 6 * 3 - 1;  // It will decrease from 17 to 0.
  for (int i = 0; i < 6; ++i) {
    for (int j = 0; j < 3; ++j) {
      // Place bits in LSB (least significant bit) to MSB order.
      boolean bit = versionInfoBits.get(bitIndex);
      bitIndex--;
      // Left bottom corner.
      matrix.set(i, matrix.getHeight() - 11 + j, bit);
      // Right bottom corner.
      matrix.set(matrix.getHeight() - 11 + j, i, bit);
    }
  }
}
 
源代码4 项目: bither-android   文件: Qr.java

public static void printQrContentSize() {
    for (int versionNum = 1;
         versionNum <= 40;
         versionNum++) {
        Version version = Version.getVersionForNumber(versionNum);
        // numBytes = 196
        int numBytes = version.getTotalCodewords();
        // getNumECBytes = 130
        Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ErrorCorrectionLevel.L);
        int numEcBytes = ecBlocks.getTotalECCodewords();
        // getNumDataBytes = 196 - 130 = 66
        int numDataBytes = numBytes - numEcBytes;
        int numInputBytes = numDataBytes * 8 - 7;
        int length = (numInputBytes - 10) / 11 * 2;
        LogUtil.d("Qr", "Version: " + versionNum + " numData bytes: " + numDataBytes + "  " +
                "input: " + numInputBytes + "  string length: " + length);
    }
}
 
源代码5 项目: Telegram   文件: MatrixUtil.java

private static void maybeEmbedPositionAdjustmentPatterns(Version version, ByteMatrix matrix) {
  if (version.getVersionNumber() < 2) {  // The patterns appear if version >= 2
    return;
  }
  int index = version.getVersionNumber() - 1;
  int[] coordinates = POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];
  for (int y : coordinates) {
    if (y >= 0) {
      for (int x : coordinates) {
        if (x >= 0 && isEmpty(matrix.get(x, y))) {
          // If the cell is unset, we embed the position adjustment pattern here.
          // -2 is necessary since the x/y coordinates point to the center of the pattern, not the
          // left top corner.
          embedPositionAdjustmentPattern(x - 2, y - 2, matrix);
        }
      }
    }
  }
}
 

private static void maybeEmbedPositionAdjustmentPatterns(Version version, ByteMatrix matrix) {
  if (version.getVersionNumber() < 2) {  // The patterns appear if version >= 2
    return;
  }
  int index = version.getVersionNumber() - 1;
  int[] coordinates = POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];
  int numCoordinates = POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index].length;
  for (int i = 0; i < numCoordinates; ++i) {
    for (int j = 0; j < numCoordinates; ++j) {
      int y = coordinates[i];
      int x = coordinates[j];
      if (x == -1 || y == -1) {
        continue;
      }
      // If the cell is unset, we embed the position adjustment pattern here.
      if (isEmpty(matrix.get(x, y))) {
        // -2 is necessary since the x/y coordinates point to the center of the pattern, not the
        // left top corner.
        embedPositionAdjustmentPattern(x - 2, y - 2, matrix);
      }
    }
  }
}
 
源代码7 项目: reacteu-app   文件: Encoder.java

private static Version chooseVersion(int numInputBits, ErrorCorrectionLevel ecLevel) throws WriterException {
  // In the following comments, we use numbers of Version 7-H.
  for (int versionNum = 1; versionNum <= 40; versionNum++) {
    Version version = Version.getVersionForNumber(versionNum);
    // numBytes = 196
    int numBytes = version.getTotalCodewords();
    // getNumECBytes = 130
    Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
    int numEcBytes = ecBlocks.getTotalECCodewords();
    // getNumDataBytes = 196 - 130 = 66
    int numDataBytes = numBytes - numEcBytes;
    int totalInputBytes = (numInputBits + 7) / 8;
    if (numDataBytes >= totalInputBytes) {
      return version;
    }
  }
  throw new WriterException("Data too big");
}
 
源代码8 项目: QrCodeScanner   文件: MatrixUtil.java

private static void maybeEmbedPositionAdjustmentPatterns(Version version, ByteMatrix matrix) {
  if (version.getVersionNumber() < 2) {  // The patterns appear if version >= 2
    return;
  }
  int index = version.getVersionNumber() - 1;
  int[] coordinates = POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];
  for (int y : coordinates) {
    if (y >= 0) {
      for (int x : coordinates) {
        if (x >= 0 && isEmpty(matrix.get(x, y))) {
          // If the cell is unset, we embed the position adjustment pattern here.
          // -2 is necessary since the x/y coordinates point to the center of the pattern, not the
          // left top corner.
          embedPositionAdjustmentPattern(x - 2, y - 2, matrix);
        }
      }
    }
  }
}
 
源代码9 项目: Telegram-FOSS   文件: Encoder.java

private static int chooseMaskPattern(BitArray bits,
                                     ErrorCorrectionLevel ecLevel,
                                     Version version,
                                     ByteMatrix matrix) throws WriterException {

  int minPenalty = Integer.MAX_VALUE;  // Lower penalty is better.
  int bestMaskPattern = -1;
  // We try all mask patterns to choose the best one.
  for (int maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {
    MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);
    int penalty = calculateMaskPenalty(matrix);
    if (penalty < minPenalty) {
      minPenalty = penalty;
      bestMaskPattern = maskPattern;
    }
  }
  return bestMaskPattern;
}
 
源代码10 项目: ZXing-Orient   文件: Encoder.java

private static Version chooseVersion(int numInputBits, ErrorCorrectionLevel ecLevel) throws WriterException {
  // In the following comments, we use numbers of Version 7-H.
  for (int versionNum = 1; versionNum <= 40; versionNum++) {
    Version version = Version.getVersionForNumber(versionNum);
    // numBytes = 196
    int numBytes = version.getTotalCodewords();
    // getNumECBytes = 130
    Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
    int numEcBytes = ecBlocks.getTotalECCodewords();
    // getNumDataBytes = 196 - 130 = 66
    int numDataBytes = numBytes - numEcBytes;
    int totalInputBytes = (numInputBits + 7) / 8;
    if (numDataBytes >= totalInputBytes) {
      return version;
    }
  }
  throw new WriterException("Data too big");
}
 
源代码11 项目: reacteu-app   文件: Encoder.java

private static int chooseMaskPattern(BitArray bits,
                                     ErrorCorrectionLevel ecLevel,
                                     Version version,
                                     ByteMatrix matrix) throws WriterException {

  int minPenalty = Integer.MAX_VALUE;  // Lower penalty is better.
  int bestMaskPattern = -1;
  // We try all mask patterns to choose the best one.
  for (int maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {
    MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);
    int penalty = calculateMaskPenalty(matrix);
    if (penalty < minPenalty) {
      minPenalty = penalty;
      bestMaskPattern = maskPattern;
    }
  }
  return bestMaskPattern;
}
 
源代码12 项目: ZXing-Orient   文件: MatrixUtil.java

static void maybeEmbedVersionInfo(Version version, ByteMatrix matrix) throws WriterException {
  if (version.getVersionNumber() < 7) {  // Version info is necessary if version >= 7.
    return;  // Don't need version info.
  }
  BitArray versionInfoBits = new BitArray();
  makeVersionInfoBits(version, versionInfoBits);

  int bitIndex = 6 * 3 - 1;  // It will decrease from 17 to 0.
  for (int i = 0; i < 6; ++i) {
    for (int j = 0; j < 3; ++j) {
      // Place bits in LSB (least significant bit) to MSB order.
      boolean bit = versionInfoBits.get(bitIndex);
      bitIndex--;
      // Left bottom corner.
      matrix.set(i, matrix.getHeight() - 11 + j, bit);
      // Right bottom corner.
      matrix.set(matrix.getHeight() - 11 + j, i, bit);
    }
  }
}
 
源代码13 项目: ZXing-Orient   文件: MatrixUtil.java

private static void maybeEmbedPositionAdjustmentPatterns(Version version, ByteMatrix matrix) {
  if (version.getVersionNumber() < 2) {  // The patterns appear if version >= 2
    return;
  }
  int index = version.getVersionNumber() - 1;
  int[] coordinates = POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];
  int numCoordinates = POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index].length;
  for (int i = 0; i < numCoordinates; ++i) {
    for (int j = 0; j < numCoordinates; ++j) {
      int y = coordinates[i];
      int x = coordinates[j];
      if (x == -1 || y == -1) {
        continue;
      }
      // If the cell is unset, we embed the position adjustment pattern here.
      if (isEmpty(matrix.get(x, y))) {
        // -2 is necessary since the x/y coordinates point to the center of the pattern, not the
        // left top corner.
        embedPositionAdjustmentPattern(x - 2, y - 2, matrix);
      }
    }
  }
}
 
源代码14 项目: RipplePower   文件: Encoder.java

private static Version chooseVersion(int numInputBits, ErrorCorrectionLevel ecLevel) throws WriterException {
	// In the following comments, we use numbers of Version 7-H.
	for (int versionNum = 1; versionNum <= 40; versionNum++) {
		Version version = Version.getVersionForNumber(versionNum);
		// numBytes = 196
		int numBytes = version.getTotalCodewords();
		// getNumECBytes = 130
		Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
		int numEcBytes = ecBlocks.getTotalECCodewords();
		// getNumDataBytes = 196 - 130 = 66
		int numDataBytes = numBytes - numEcBytes;
		int totalInputBytes = (numInputBits + 7) / 8;
		if (numDataBytes >= totalInputBytes) {
			return version;
		}
	}
	throw new WriterException("Data too big");
}
 

private static Version chooseVersion(int numInputBits, ErrorCorrectionLevel ecLevel) throws WriterException {
  // In the following comments, we use numbers of Version 7-H.
  for (int versionNum = 1; versionNum <= 40; versionNum++) {
    Version version = Version.getVersionForNumber(versionNum);
    // numBytes = 196
    int numBytes = version.getTotalCodewords();
    // getNumECBytes = 130
    Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
    int numEcBytes = ecBlocks.getTotalECCodewords();
    // getNumDataBytes = 196 - 130 = 66
    int numDataBytes = numBytes - numEcBytes;
    int totalInputBytes = (numInputBits + 7) / 8;
    if (numDataBytes >= totalInputBytes) {
      return version;
    }
  }
  throw new WriterException("Data too big");
}
 
源代码16 项目: weex   文件: Encoder.java

private static int chooseMaskPattern(BitArray bits,
                                     ErrorCorrectionLevel ecLevel,
                                     Version version,
                                     ByteMatrix matrix) throws WriterException {

  int minPenalty = Integer.MAX_VALUE;  // Lower penalty is better.
  int bestMaskPattern = -1;
  // We try all mask patterns to choose the best one.
  for (int maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {
    MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);
    int penalty = calculateMaskPenalty(matrix);
    if (penalty < minPenalty) {
      minPenalty = penalty;
      bestMaskPattern = maskPattern;
    }
  }
  return bestMaskPattern;
}
 
源代码17 项目: weex   文件: Encoder.java

private static Version chooseVersion(int numInputBits, ErrorCorrectionLevel ecLevel) throws WriterException {
  // In the following comments, we use numbers of Version 7-H.
  for (int versionNum = 1; versionNum <= 40; versionNum++) {
    Version version = Version.getVersionForNumber(versionNum);
    // numBytes = 196
    int numBytes = version.getTotalCodewords();
    // getNumECBytes = 130
    Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
    int numEcBytes = ecBlocks.getTotalECCodewords();
    // getNumDataBytes = 196 - 130 = 66
    int numDataBytes = numBytes - numEcBytes;
    int totalInputBytes = (numInputBits + 7) / 8;
    if (numDataBytes >= totalInputBytes) {
      return version;
    }
  }
  throw new WriterException("Data too big");
}
 
源代码18 项目: MiBandDecompiled   文件: Encoder.java

private static void a(int i, ErrorCorrectionLevel errorcorrectionlevel, Mode mode, QRCode qrcode)
{
    qrcode.setECLevel(errorcorrectionlevel);
    qrcode.setMode(mode);
    for (int j = 1; j <= 40; j++)
    {
        Version version = Version.getVersionForNumber(j);
        int k = version.getTotalCodewords();
        com.google.zxing.qrcode.decoder.Version.ECBlocks ecblocks = version.getECBlocksForLevel(errorcorrectionlevel);
        int l = ecblocks.getTotalECCodewords();
        int i1 = ecblocks.getNumBlocks();
        int j1 = k - l;
        if (j1 >= a(i, version, mode))
        {
            qrcode.setVersion(j);
            qrcode.setNumTotalBytes(k);
            qrcode.setNumDataBytes(j1);
            qrcode.setNumRSBlocks(i1);
            qrcode.setNumECBytes(l);
            qrcode.setMatrixWidth(version.getDimensionForVersion());
            return;
        }
    }

    throw new WriterException("Cannot find proper rs block info (input data too big?)");
}
 
源代码19 项目: weex   文件: MatrixUtil.java

static void maybeEmbedVersionInfo(Version version, ByteMatrix matrix) throws WriterException {
  if (version.getVersionNumber() < 7) {  // Version info is necessary if version >= 7.
    return;  // Don't need version info.
  }
  BitArray versionInfoBits = new BitArray();
  makeVersionInfoBits(version, versionInfoBits);

  int bitIndex = 6 * 3 - 1;  // It will decrease from 17 to 0.
  for (int i = 0; i < 6; ++i) {
    for (int j = 0; j < 3; ++j) {
      // Place bits in LSB (least significant bit) to MSB order.
      boolean bit = versionInfoBits.get(bitIndex);
      bitIndex--;
      // Left bottom corner.
      matrix.set(i, matrix.getHeight() - 11 + j, bit);
      // Right bottom corner.
      matrix.set(matrix.getHeight() - 11 + j, i, bit);
    }
  }
}
 
源代码20 项目: barcodescanner-lib-aar   文件: Encoder.java

private static int chooseMaskPattern(BitArray bits,
                                     ErrorCorrectionLevel ecLevel,
                                     Version version,
                                     ByteMatrix matrix) throws WriterException {

  int minPenalty = Integer.MAX_VALUE;  // Lower penalty is better.
  int bestMaskPattern = -1;
  // We try all mask patterns to choose the best one.
  for (int maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {
    MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);
    int penalty = calculateMaskPenalty(matrix);
    if (penalty < minPenalty) {
      minPenalty = penalty;
      bestMaskPattern = maskPattern;
    }
  }
  return bestMaskPattern;
}
 
源代码21 项目: weex   文件: MatrixUtil.java

private static void maybeEmbedPositionAdjustmentPatterns(Version version, ByteMatrix matrix) {
  if (version.getVersionNumber() < 2) {  // The patterns appear if version >= 2
    return;
  }
  int index = version.getVersionNumber() - 1;
  int[] coordinates = POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];
  int numCoordinates = POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index].length;
  for (int i = 0; i < numCoordinates; ++i) {
    for (int j = 0; j < numCoordinates; ++j) {
      int y = coordinates[i];
      int x = coordinates[j];
      if (x == -1 || y == -1) {
        continue;
      }
      // If the cell is unset, we embed the position adjustment pattern here.
      if (isEmpty(matrix.get(x, y))) {
        // -2 is necessary since the x/y coordinates point to the center of the pattern, not the
        // left top corner.
        embedPositionAdjustmentPattern(x - 2, y - 2, matrix);
      }
    }
  }
}
 
源代码22 项目: ScreenCapture   文件: Encoder.java

private static Version chooseVersion(int numInputBits, ErrorCorrectionLevel ecLevel) throws WriterException {
  for (int versionNum = 1; versionNum <= 40; versionNum++) {
    Version version = Version.getVersionForNumber(versionNum);
    if (willFit(numInputBits, version, ecLevel)) {
      return version;
    }
  }
  throw new WriterException("Data too big");
}
 
源代码23 项目: ScreenCapture   文件: Encoder.java

/**
 * @return true if the number of input bits will fit in a code with the specified version and
 * error correction level.
 */
private static boolean willFit(int numInputBits, Version version, ErrorCorrectionLevel ecLevel) {
    // In the following comments, we use numbers of Version 7-H.
    // numBytes = 196
    int numBytes = version.getTotalCodewords();
    // getNumECBytes = 130
    Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
    int numEcBytes = ecBlocks.getTotalECCodewords();
    // getNumDataBytes = 196 - 130 = 66
    int numDataBytes = numBytes - numEcBytes;
    int totalInputBytes = (numInputBits + 7) / 8;
    return numDataBytes >= totalInputBytes;
}
 
源代码24 项目: Telegram-FOSS   文件: Encoder.java

/**
 * @return true if the number of input bits will fit in a code with the specified version and
 * error correction level.
 */
private static boolean willFit(int numInputBits, Version version, ErrorCorrectionLevel ecLevel) {
    // In the following comments, we use numbers of Version 7-H.
    // numBytes = 196
    int numBytes = version.getTotalCodewords();
    // getNumECBytes = 130
    Version.ECBlocks ecBlocks = version.getECBlocksForLevel(ecLevel);
    int numEcBytes = ecBlocks.getTotalECCodewords();
    // getNumDataBytes = 196 - 130 = 66
    int numDataBytes = numBytes - numEcBytes;
    int totalInputBytes = (numInputBits + 7) / 8;
    return numDataBytes >= totalInputBytes;
}
 
源代码25 项目: ScreenCapture   文件: MatrixUtil.java

static void embedBasicPatterns(Version version, ByteMatrix matrix) throws WriterException {
  // Let's get started with embedding big squares at corners.
  embedPositionDetectionPatternsAndSeparators(matrix);
  // Then, embed the dark dot at the left bottom corner.
  embedDarkDotAtLeftBottomCorner(matrix);

  // Position adjustment patterns appear if version >= 2.
  maybeEmbedPositionAdjustmentPatterns(version, matrix);
  // Timing patterns should be embedded after position adj. patterns.
  embedTimingPatterns(matrix);
}
 
源代码26 项目: ScreenCapture   文件: MatrixUtil.java

static void makeVersionInfoBits(Version version, BitArray bits) throws WriterException {
  bits.appendBits(version.getVersionNumber(), 6);
  int bchCode = calculateBCHCode(version.getVersionNumber(), VERSION_INFO_POLY);
  bits.appendBits(bchCode, 12);

  if (bits.getSize() != 18) {  // Just in case.
    throw new WriterException("should not happen but we got: " + bits.getSize());
  }
}
 
源代码27 项目: Telegram-FOSS   文件: Encoder.java

/**
 * Decides the smallest version of QR code that will contain all of the provided data.
 *
 * @throws WriterException if the data cannot fit in any version
 */
private static Version recommendVersion(ErrorCorrectionLevel ecLevel,
                                        Mode mode,
                                        BitArray headerBits,
                                        BitArray dataBits) throws WriterException {
  // Hard part: need to know version to know how many bits length takes. But need to know how many
  // bits it takes to know version. First we take a guess at version by assuming version will be
  // the minimum, 1:
  int provisionalBitsNeeded = calculateBitsNeeded(mode, headerBits, dataBits, Version.getVersionForNumber(1));
  Version provisionalVersion = chooseVersion(provisionalBitsNeeded, ecLevel);

  // Use that guess to calculate the right version. I am still not sure this works in 100% of cases.
  int bitsNeeded = calculateBitsNeeded(mode, headerBits, dataBits, provisionalVersion);
  return chooseVersion(bitsNeeded, ecLevel);
}
 
源代码28 项目: Tesseract-OCR-Scanner   文件: Encoder.java

/**
 * Decides the smallest version of QR code that will contain all of the provided data.
 *
 * @throws WriterException if the data cannot fit in any version
 */
private static Version recommendVersion(ErrorCorrectionLevel ecLevel,
                                        Mode mode,
                                        BitArray headerBits,
                                        BitArray dataBits) throws WriterException {
  // Hard part: need to know version to know how many bits length takes. But need to know how many
  // bits it takes to know version. First we take a guess at version by assuming version will be
  // the minimum, 1:
  int provisionalBitsNeeded = calculateBitsNeeded(mode, headerBits, dataBits, Version.getVersionForNumber(1));
  Version provisionalVersion = chooseVersion(provisionalBitsNeeded, ecLevel);

  // Use that guess to calculate the right version. I am still not sure this works in 100% of cases.
  int bitsNeeded = calculateBitsNeeded(mode, headerBits, dataBits, provisionalVersion);
  return chooseVersion(bitsNeeded, ecLevel);
}
 
源代码29 项目: Telegram   文件: Encoder.java

/**
 * Append length info. On success, store the result in "bits".
 */
static void appendLengthInfo(int numLetters, Version version, Mode mode, BitArray bits) throws WriterException {
  int numBits = mode.getCharacterCountBits(version);
  if (numLetters >= (1 << numBits)) {
    throw new WriterException(numLetters + " is bigger than " + ((1 << numBits) - 1));
  }
  bits.appendBits(numLetters, numBits);
}
 
源代码30 项目: Tesseract-OCR-Scanner   文件: Encoder.java

private static Version chooseVersion(int numInputBits, ErrorCorrectionLevel ecLevel) throws WriterException {
  for (int versionNum = 1; versionNum <= 40; versionNum++) {
    Version version = Version.getVersionForNumber(versionNum);
    if (willFit(numInputBits, version, ecLevel)) {
      return version;
    }
  }
  throw new WriterException("Data too big");
}
 
 类所在包
 同包方法