类com.google.zxing.Dimension源码实例Demo

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

源代码1 项目: ZXing-Orient   文件: SymbolInfo.java
public static SymbolInfo lookup(int dataCodewords,
                                SymbolShapeHint shape, 
                                Dimension minSize, 
                                Dimension maxSize, 
                                boolean fail) {
  for (SymbolInfo symbol : symbols) {
    if (shape == SymbolShapeHint.FORCE_SQUARE && symbol.rectangular) {
      continue;
    }
    if (shape == SymbolShapeHint.FORCE_RECTANGLE && !symbol.rectangular) {
      continue;
    }
    if (minSize != null
        && (symbol.getSymbolWidth() < minSize.getWidth()
        || symbol.getSymbolHeight() < minSize.getHeight())) {
      continue;
    }
    if (maxSize != null
        && (symbol.getSymbolWidth() > maxSize.getWidth()
        || symbol.getSymbolHeight() > maxSize.getHeight())) {
      continue;
    }
    if (dataCodewords <= symbol.dataCapacity) {
      return symbol;
    }
  }
  if (fail) {
    throw new IllegalArgumentException(
        "Can't find a symbol arrangement that matches the message. Data codewords: "
            + dataCodewords);
  }
  return null;
}
 
public static SymbolInfo lookup(int dataCodewords,
                                SymbolShapeHint shape, 
                                Dimension minSize, 
                                Dimension maxSize, 
                                boolean fail) {
  for (SymbolInfo symbol : symbols) {
    if (shape == SymbolShapeHint.FORCE_SQUARE && symbol.rectangular) {
      continue;
    }
    if (shape == SymbolShapeHint.FORCE_RECTANGLE && !symbol.rectangular) {
      continue;
    }
    if (minSize != null
        && (symbol.getSymbolWidth() < minSize.getWidth()
        || symbol.getSymbolHeight() < minSize.getHeight())) {
      continue;
    }
    if (maxSize != null
        && (symbol.getSymbolWidth() > maxSize.getWidth()
        || symbol.getSymbolHeight() > maxSize.getHeight())) {
      continue;
    }
    if (dataCodewords <= symbol.dataCapacity) {
      return symbol;
    }
  }
  if (fail) {
    throw new IllegalArgumentException(
        "Can't find a symbol arrangement that matches the message. Data codewords: "
            + dataCodewords);
  }
  return null;
}
 
源代码3 项目: weex   文件: SymbolInfo.java
public static SymbolInfo lookup(int dataCodewords,
                                SymbolShapeHint shape, 
                                Dimension minSize, 
                                Dimension maxSize, 
                                boolean fail) {
  for (SymbolInfo symbol : symbols) {
    if (shape == SymbolShapeHint.FORCE_SQUARE && symbol.rectangular) {
      continue;
    }
    if (shape == SymbolShapeHint.FORCE_RECTANGLE && !symbol.rectangular) {
      continue;
    }
    if (minSize != null
        && (symbol.getSymbolWidth() < minSize.getWidth()
        || symbol.getSymbolHeight() < minSize.getHeight())) {
      continue;
    }
    if (maxSize != null
        && (symbol.getSymbolWidth() > maxSize.getWidth()
        || symbol.getSymbolHeight() > maxSize.getHeight())) {
      continue;
    }
    if (dataCodewords <= symbol.dataCapacity) {
      return symbol;
    }
  }
  if (fail) {
    throw new IllegalArgumentException(
        "Can't find a symbol arrangement that matches the message. Data codewords: "
            + dataCodewords);
  }
  return null;
}
 
源代码4 项目: barcodescanner-lib-aar   文件: SymbolInfo.java
public static SymbolInfo lookup(int dataCodewords,
                                SymbolShapeHint shape, 
                                Dimension minSize, 
                                Dimension maxSize, 
                                boolean fail) {
  for (SymbolInfo symbol : symbols) {
    if (shape == SymbolShapeHint.FORCE_SQUARE && symbol.rectangular) {
      continue;
    }
    if (shape == SymbolShapeHint.FORCE_RECTANGLE && !symbol.rectangular) {
      continue;
    }
    if (minSize != null
        && (symbol.getSymbolWidth() < minSize.getWidth()
        || symbol.getSymbolHeight() < minSize.getHeight())) {
      continue;
    }
    if (maxSize != null
        && (symbol.getSymbolWidth() > maxSize.getWidth()
        || symbol.getSymbolHeight() > maxSize.getHeight())) {
      continue;
    }
    if (dataCodewords <= symbol.dataCapacity) {
      return symbol;
    }
  }
  if (fail) {
    throw new IllegalArgumentException(
        "Can't find a symbol arrangement that matches the message. Data codewords: "
            + dataCodewords);
  }
  return null;
}
 
源代码5 项目: RipplePower   文件: SymbolInfo.java
public static SymbolInfo lookup(int dataCodewords, SymbolShapeHint shape, Dimension minSize, Dimension maxSize,
		boolean fail) {
	for (SymbolInfo symbol : symbols) {
		if (shape == SymbolShapeHint.FORCE_SQUARE && symbol.rectangular) {
			continue;
		}
		if (shape == SymbolShapeHint.FORCE_RECTANGLE && !symbol.rectangular) {
			continue;
		}
		if (minSize != null && (symbol.getSymbolWidth() < minSize.getWidth()
				|| symbol.getSymbolHeight() < minSize.getHeight())) {
			continue;
		}
		if (maxSize != null && (symbol.getSymbolWidth() > maxSize.getWidth()
				|| symbol.getSymbolHeight() > maxSize.getHeight())) {
			continue;
		}
		if (dataCodewords <= symbol.dataCapacity) {
			return symbol;
		}
	}
	if (fail) {
		throw new IllegalArgumentException(
				"Can't find a symbol arrangement that matches the message. Data codewords: " + dataCodewords);
	}
	return null;
}
 
源代码6 项目: ZXing-Orient   文件: HighLevelEncoder.java
/**
 * Performs message encoding of a DataMatrix message using the algorithm described in annex P
 * of ISO/IEC 16022:2000(E).
 *
 * @param msg     the message
 * @param shape   requested shape. May be {@code SymbolShapeHint.FORCE_NONE},
 *                {@code SymbolShapeHint.FORCE_SQUARE} or {@code SymbolShapeHint.FORCE_RECTANGLE}.
 * @param minSize the minimum symbol size constraint or null for no constraint
 * @param maxSize the maximum symbol size constraint or null for no constraint
 * @return the encoded message (the char values range from 0 to 255)
 */
public static String encodeHighLevel(String msg,
                                     SymbolShapeHint shape, 
                                     Dimension minSize, 
                                     Dimension maxSize) {
  //the codewords 0..255 are encoded as Unicode characters
  Encoder[] encoders = {
      new ASCIIEncoder(), new C40Encoder(), new TextEncoder(), 
      new X12Encoder(), new EdifactEncoder(),  new Base256Encoder()
  };

  EncoderContext context = new EncoderContext(msg);
  context.setSymbolShape(shape);
  context.setSizeConstraints(minSize, maxSize);

  if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {
    context.writeCodeword(MACRO_05);
    context.setSkipAtEnd(2);
    context.pos += MACRO_05_HEADER.length();
  } else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {
    context.writeCodeword(MACRO_06);
    context.setSkipAtEnd(2);
    context.pos += MACRO_06_HEADER.length();
  }

  int encodingMode = ASCII_ENCODATION; //Default mode
  while (context.hasMoreCharacters()) {
    encoders[encodingMode].encode(context);
    if (context.getNewEncoding() >= 0) {
      encodingMode = context.getNewEncoding();
      context.resetEncoderSignal();
    }
  }
  int len = context.getCodewordCount();
  context.updateSymbolInfo();
  int capacity = context.getSymbolInfo().getDataCapacity();
  if (len < capacity) {
    if (encodingMode != ASCII_ENCODATION && encodingMode != BASE256_ENCODATION) {
      context.writeCodeword('\u00fe'); //Unlatch (254)
    }
  }
  //Padding
  StringBuilder codewords = context.getCodewords();
  if (codewords.length() < capacity) {
    codewords.append(PAD);
  }
  while (codewords.length() < capacity) {
    codewords.append(randomize253State(PAD, codewords.length() + 1));
  }

  return context.getCodewords().toString();
}
 
源代码7 项目: ZXing-Orient   文件: EncoderContext.java
public void setSizeConstraints(Dimension minSize, Dimension maxSize) {
  this.minSize = minSize;
  this.maxSize = maxSize;
}
 
源代码8 项目: ZXing-Orient   文件: DataMatrixWriter.java
@Override
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType,?> hints) {

  if (contents.isEmpty()) {
    throw new IllegalArgumentException("Found empty contents");
  }
  
  if (format != BarcodeFormat.DATA_MATRIX) {
    throw new IllegalArgumentException("Can only encode DATA_MATRIX, but got " + format);
  }
  
  if (width < 0 || height < 0) {
    throw new IllegalArgumentException("Requested dimensions are too small: " + width + 'x' + height);
  }

  // Try to get force shape & min / max size
  SymbolShapeHint shape = SymbolShapeHint.FORCE_NONE;
  Dimension minSize = null;
  Dimension maxSize = null;
  if (hints != null) {
    SymbolShapeHint requestedShape = (SymbolShapeHint) hints.get(EncodeHintType.DATA_MATRIX_SHAPE);
    if (requestedShape != null) {
      shape = requestedShape;
    }
    Dimension requestedMinSize = (Dimension) hints.get(EncodeHintType.MIN_SIZE);
    if (requestedMinSize != null) {
      minSize = requestedMinSize;
    }
    Dimension requestedMaxSize = (Dimension) hints.get(EncodeHintType.MAX_SIZE);
    if (requestedMaxSize != null) {
      maxSize = requestedMaxSize;
    }
  }


  //1. step: Data encodation
  String encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize);

  SymbolInfo symbolInfo = SymbolInfo.lookup(encoded.length(), shape, minSize, maxSize, true);

  //2. step: ECC generation
  String codewords = ErrorCorrection.encodeECC200(encoded, symbolInfo);

  //3. step: Module placement in Matrix
  DefaultPlacement placement =
      new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(), symbolInfo.getSymbolDataHeight());
  placement.place();

  //4. step: low-level encoding
  return encodeLowLevel(placement, symbolInfo);
}
 
/**
 * Performs message encoding of a DataMatrix message using the algorithm described in annex P
 * of ISO/IEC 16022:2000(E).
 *
 * @param msg     the message
 * @param shape   requested shape. May be {@code SymbolShapeHint.FORCE_NONE},
 *                {@code SymbolShapeHint.FORCE_SQUARE} or {@code SymbolShapeHint.FORCE_RECTANGLE}.
 * @param minSize the minimum symbol size constraint or null for no constraint
 * @param maxSize the maximum symbol size constraint or null for no constraint
 * @return the encoded message (the char values range from 0 to 255)
 */
public static String encodeHighLevel(String msg,
                                     SymbolShapeHint shape, 
                                     Dimension minSize, 
                                     Dimension maxSize) {
  //the codewords 0..255 are encoded as Unicode characters
  Encoder[] encoders = {
      new ASCIIEncoder(), new C40Encoder(), new TextEncoder(), 
      new X12Encoder(), new EdifactEncoder(),  new Base256Encoder()
  };

  EncoderContext context = new EncoderContext(msg);
  context.setSymbolShape(shape);
  context.setSizeConstraints(minSize, maxSize);

  if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {
    context.writeCodeword(MACRO_05);
    context.setSkipAtEnd(2);
    context.pos += MACRO_05_HEADER.length();
  } else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {
    context.writeCodeword(MACRO_06);
    context.setSkipAtEnd(2);
    context.pos += MACRO_06_HEADER.length();
  }

  int encodingMode = ASCII_ENCODATION; //Default mode
  while (context.hasMoreCharacters()) {
    encoders[encodingMode].encode(context);
    if (context.getNewEncoding() >= 0) {
      encodingMode = context.getNewEncoding();
      context.resetEncoderSignal();
    }
  }
  int len = context.getCodewordCount();
  context.updateSymbolInfo();
  int capacity = context.getSymbolInfo().getDataCapacity();
  if (len < capacity) {
    if (encodingMode != ASCII_ENCODATION && encodingMode != BASE256_ENCODATION) {
      context.writeCodeword('\u00fe'); //Unlatch (254)
    }
  }
  //Padding
  StringBuilder codewords = context.getCodewords();
  if (codewords.length() < capacity) {
    codewords.append(PAD);
  }
  while (codewords.length() < capacity) {
    codewords.append(randomize253State(PAD, codewords.length() + 1));
  }

  return context.getCodewords().toString();
}
 
public void setSizeConstraints(Dimension minSize, Dimension maxSize) {
  this.minSize = minSize;
  this.maxSize = maxSize;
}
 
@Override
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType,?> hints) {

  if (contents.isEmpty()) {
    throw new IllegalArgumentException("Found empty contents");
  }
  
  if (format != BarcodeFormat.DATA_MATRIX) {
    throw new IllegalArgumentException("Can only encode DATA_MATRIX, but got " + format);
  }
  
  if (width < 0 || height < 0) {
    throw new IllegalArgumentException("Requested dimensions are too small: " + width + 'x' + height);
  }

  // Try to get force shape & min / max size
  SymbolShapeHint shape = SymbolShapeHint.FORCE_NONE;
  Dimension minSize = null;
  Dimension maxSize = null;
  if (hints != null) {
    SymbolShapeHint requestedShape = (SymbolShapeHint) hints.get(EncodeHintType.DATA_MATRIX_SHAPE);
    if (requestedShape != null) {
      shape = requestedShape;
    }
    @SuppressWarnings("deprecation")
    Dimension requestedMinSize = (Dimension) hints.get(EncodeHintType.MIN_SIZE);
    if (requestedMinSize != null) {
      minSize = requestedMinSize;
    }
    @SuppressWarnings("deprecation")
    Dimension requestedMaxSize = (Dimension) hints.get(EncodeHintType.MAX_SIZE);
    if (requestedMaxSize != null) {
      maxSize = requestedMaxSize;
    }
  }


  //1. step: Data encodation
  String encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize);

  SymbolInfo symbolInfo = SymbolInfo.lookup(encoded.length(), shape, minSize, maxSize, true);

  //2. step: ECC generation
  String codewords = ErrorCorrection.encodeECC200(encoded, symbolInfo);

  //3. step: Module placement in Matrix
  DefaultPlacement placement =
      new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(), symbolInfo.getSymbolDataHeight());
  placement.place();

  //4. step: low-level encoding
  return encodeLowLevel(placement, symbolInfo);
}
 
源代码12 项目: weex   文件: HighLevelEncoder.java
/**
 * Performs message encoding of a DataMatrix message using the algorithm described in annex P
 * of ISO/IEC 16022:2000(E).
 *
 * @param msg     the message
 * @param shape   requested shape. May be {@code SymbolShapeHint.FORCE_NONE},
 *                {@code SymbolShapeHint.FORCE_SQUARE} or {@code SymbolShapeHint.FORCE_RECTANGLE}.
 * @param minSize the minimum symbol size constraint or null for no constraint
 * @param maxSize the maximum symbol size constraint or null for no constraint
 * @return the encoded message (the char values range from 0 to 255)
 */
public static String encodeHighLevel(String msg,
                                     SymbolShapeHint shape, 
                                     Dimension minSize, 
                                     Dimension maxSize) {
  //the codewords 0..255 are encoded as Unicode characters
  Encoder[] encoders = {
      new ASCIIEncoder(), new C40Encoder(), new TextEncoder(), 
      new X12Encoder(), new EdifactEncoder(),  new Base256Encoder()
  };

  EncoderContext context = new EncoderContext(msg);
  context.setSymbolShape(shape);
  context.setSizeConstraints(minSize, maxSize);

  if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {
    context.writeCodeword(MACRO_05);
    context.setSkipAtEnd(2);
    context.pos += MACRO_05_HEADER.length();
  } else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {
    context.writeCodeword(MACRO_06);
    context.setSkipAtEnd(2);
    context.pos += MACRO_06_HEADER.length();
  }

  int encodingMode = ASCII_ENCODATION; //Default mode
  while (context.hasMoreCharacters()) {
    encoders[encodingMode].encode(context);
    if (context.getNewEncoding() >= 0) {
      encodingMode = context.getNewEncoding();
      context.resetEncoderSignal();
    }
  }
  int len = context.getCodewordCount();
  context.updateSymbolInfo();
  int capacity = context.getSymbolInfo().getDataCapacity();
  if (len < capacity) {
    if (encodingMode != ASCII_ENCODATION && encodingMode != BASE256_ENCODATION) {
      context.writeCodeword('\u00fe'); //Unlatch (254)
    }
  }
  //Padding
  StringBuilder codewords = context.getCodewords();
  if (codewords.length() < capacity) {
    codewords.append(PAD);
  }
  while (codewords.length() < capacity) {
    codewords.append(randomize253State(PAD, codewords.length() + 1));
  }

  return context.getCodewords().toString();
}
 
源代码13 项目: weex   文件: EncoderContext.java
public void setSizeConstraints(Dimension minSize, Dimension maxSize) {
  this.minSize = minSize;
  this.maxSize = maxSize;
}
 
源代码14 项目: weex   文件: DataMatrixWriter.java
@Override
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType,?> hints) {

  if (contents.isEmpty()) {
    throw new IllegalArgumentException("Found empty contents");
  }
  
  if (format != BarcodeFormat.DATA_MATRIX) {
    throw new IllegalArgumentException("Can only encode DATA_MATRIX, but got " + format);
  }
  
  if (width < 0 || height < 0) {
    throw new IllegalArgumentException("Requested dimensions are too small: " + width + 'x' + height);
  }

  // Try to get force shape & min / max size
  SymbolShapeHint shape = SymbolShapeHint.FORCE_NONE;
  Dimension minSize = null;
  Dimension maxSize = null;
  if (hints != null) {
    SymbolShapeHint requestedShape = (SymbolShapeHint) hints.get(EncodeHintType.DATA_MATRIX_SHAPE);
    if (requestedShape != null) {
      shape = requestedShape;
    }
    @SuppressWarnings("deprecation")
    Dimension requestedMinSize = (Dimension) hints.get(EncodeHintType.MIN_SIZE);
    if (requestedMinSize != null) {
      minSize = requestedMinSize;
    }
    @SuppressWarnings("deprecation")
    Dimension requestedMaxSize = (Dimension) hints.get(EncodeHintType.MAX_SIZE);
    if (requestedMaxSize != null) {
      maxSize = requestedMaxSize;
    }
  }


  //1. step: Data encodation
  String encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize);

  SymbolInfo symbolInfo = SymbolInfo.lookup(encoded.length(), shape, minSize, maxSize, true);

  //2. step: ECC generation
  String codewords = ErrorCorrection.encodeECC200(encoded, symbolInfo);

  //3. step: Module placement in Matrix
  DefaultPlacement placement =
      new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(), symbolInfo.getSymbolDataHeight());
  placement.place();

  //4. step: low-level encoding
  return encodeLowLevel(placement, symbolInfo);
}
 
源代码15 项目: barcodescanner-lib-aar   文件: HighLevelEncoder.java
/**
 * Performs message encoding of a DataMatrix message using the algorithm described in annex P
 * of ISO/IEC 16022:2000(E).
 *
 * @param msg     the message
 * @param shape   requested shape. May be {@code SymbolShapeHint.FORCE_NONE},
 *                {@code SymbolShapeHint.FORCE_SQUARE} or {@code SymbolShapeHint.FORCE_RECTANGLE}.
 * @param minSize the minimum symbol size constraint or null for no constraint
 * @param maxSize the maximum symbol size constraint or null for no constraint
 * @return the encoded message (the char values range from 0 to 255)
 */
public static String encodeHighLevel(String msg,
                                     SymbolShapeHint shape, 
                                     Dimension minSize, 
                                     Dimension maxSize) {
  //the codewords 0..255 are encoded as Unicode characters
  Encoder[] encoders = {
      new ASCIIEncoder(), new C40Encoder(), new TextEncoder(), 
      new X12Encoder(), new EdifactEncoder(),  new Base256Encoder()
  };

  EncoderContext context = new EncoderContext(msg);
  context.setSymbolShape(shape);
  context.setSizeConstraints(minSize, maxSize);

  if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {
    context.writeCodeword(MACRO_05);
    context.setSkipAtEnd(2);
    context.pos += MACRO_05_HEADER.length();
  } else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {
    context.writeCodeword(MACRO_06);
    context.setSkipAtEnd(2);
    context.pos += MACRO_06_HEADER.length();
  }

  int encodingMode = ASCII_ENCODATION; //Default mode
  while (context.hasMoreCharacters()) {
    encoders[encodingMode].encode(context);
    if (context.getNewEncoding() >= 0) {
      encodingMode = context.getNewEncoding();
      context.resetEncoderSignal();
    }
  }
  int len = context.getCodewordCount();
  context.updateSymbolInfo();
  int capacity = context.getSymbolInfo().getDataCapacity();
  if (len < capacity) {
    if (encodingMode != ASCII_ENCODATION && encodingMode != BASE256_ENCODATION) {
      context.writeCodeword('\u00fe'); //Unlatch (254)
    }
  }
  //Padding
  StringBuilder codewords = context.getCodewords();
  if (codewords.length() < capacity) {
    codewords.append(PAD);
  }
  while (codewords.length() < capacity) {
    codewords.append(randomize253State(PAD, codewords.length() + 1));
  }

  return context.getCodewords().toString();
}
 
源代码16 项目: barcodescanner-lib-aar   文件: EncoderContext.java
public void setSizeConstraints(Dimension minSize, Dimension maxSize) {
  this.minSize = minSize;
  this.maxSize = maxSize;
}
 
源代码17 项目: barcodescanner-lib-aar   文件: DataMatrixWriter.java
@Override
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType,?> hints) {

  if (contents.isEmpty()) {
    throw new IllegalArgumentException("Found empty contents");
  }
  
  if (format != BarcodeFormat.DATA_MATRIX) {
    throw new IllegalArgumentException("Can only encode DATA_MATRIX, but got " + format);
  }
  
  if (width < 0 || height < 0) {
    throw new IllegalArgumentException("Requested dimensions are too small: " + width + 'x' + height);
  }

  // Try to get force shape & min / max size
  SymbolShapeHint shape = SymbolShapeHint.FORCE_NONE;
  Dimension minSize = null;
  Dimension maxSize = null;
  if (hints != null) {
    SymbolShapeHint requestedShape = (SymbolShapeHint) hints.get(EncodeHintType.DATA_MATRIX_SHAPE);
    if (requestedShape != null) {
      shape = requestedShape;
    }
    @SuppressWarnings("deprecation")
    Dimension requestedMinSize = (Dimension) hints.get(EncodeHintType.MIN_SIZE);
    if (requestedMinSize != null) {
      minSize = requestedMinSize;
    }
    @SuppressWarnings("deprecation")
    Dimension requestedMaxSize = (Dimension) hints.get(EncodeHintType.MAX_SIZE);
    if (requestedMaxSize != null) {
      maxSize = requestedMaxSize;
    }
  }


  //1. step: Data encodation
  String encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize);

  SymbolInfo symbolInfo = SymbolInfo.lookup(encoded.length(), shape, minSize, maxSize, true);

  //2. step: ECC generation
  String codewords = ErrorCorrection.encodeECC200(encoded, symbolInfo);

  //3. step: Module placement in Matrix
  DefaultPlacement placement =
      new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(), symbolInfo.getSymbolDataHeight());
  placement.place();

  //4. step: low-level encoding
  return encodeLowLevel(placement, symbolInfo);
}
 
源代码18 项目: RipplePower   文件: HighLevelEncoder.java
/**
 * Performs message encoding of a DataMatrix message using the algorithm
 * described in annex P of ISO/IEC 16022:2000(E).
 * 
 * @param msg
 *            the message
 * @param shape
 *            requested shape. May be {@code SymbolShapeHint.FORCE_NONE},
 *            {@code SymbolShapeHint.FORCE_SQUARE} or
 *            {@code SymbolShapeHint.FORCE_RECTANGLE}.
 * @param minSize
 *            the minimum symbol size constraint or null for no constraint
 * @param maxSize
 *            the maximum symbol size constraint or null for no constraint
 * @return the encoded message (the char values range from 0 to 255)
 */
public static String encodeHighLevel(String msg, SymbolShapeHint shape, Dimension minSize, Dimension maxSize) {
	// the codewords 0..255 are encoded as Unicode characters
	Encoder[] encoders = { new ASCIIEncoder(), new C40Encoder(), new TextEncoder(), new X12Encoder(),
			new EdifactEncoder(), new Base256Encoder() };

	EncoderContext context = new EncoderContext(msg);
	context.setSymbolShape(shape);
	context.setSizeConstraints(minSize, maxSize);

	if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {
		context.writeCodeword(MACRO_05);
		context.setSkipAtEnd(2);
		context.pos += MACRO_05_HEADER.length();
	} else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {
		context.writeCodeword(MACRO_06);
		context.setSkipAtEnd(2);
		context.pos += MACRO_06_HEADER.length();
	}

	int encodingMode = ASCII_ENCODATION; // Default mode
	while (context.hasMoreCharacters()) {
		encoders[encodingMode].encode(context);
		if (context.getNewEncoding() >= 0) {
			encodingMode = context.getNewEncoding();
			context.resetEncoderSignal();
		}
	}
	int len = context.getCodewordCount();
	context.updateSymbolInfo();
	int capacity = context.getSymbolInfo().getDataCapacity();
	if (len < capacity) {
		if (encodingMode != ASCII_ENCODATION && encodingMode != BASE256_ENCODATION) {
			context.writeCodeword('\u00fe'); // Unlatch (254)
		}
	}
	// Padding
	StringBuilder codewords = context.getCodewords();
	if (codewords.length() < capacity) {
		codewords.append(PAD);
	}
	while (codewords.length() < capacity) {
		codewords.append(randomize253State(PAD, codewords.length() + 1));
	}

	return context.getCodewords().toString();
}
 
源代码19 项目: RipplePower   文件: EncoderContext.java
public void setSizeConstraints(Dimension minSize, Dimension maxSize) {
	this.minSize = minSize;
	this.maxSize = maxSize;
}
 
源代码20 项目: RipplePower   文件: DataMatrixWriter.java
@Override
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height,
		Map<EncodeHintType, ?> hints) {

	if (contents.isEmpty()) {
		throw new IllegalArgumentException("Found empty contents");
	}

	if (format != BarcodeFormat.DATA_MATRIX) {
		throw new IllegalArgumentException("Can only encode DATA_MATRIX, but got " + format);
	}

	if (width < 0 || height < 0) {
		throw new IllegalArgumentException("Requested dimensions are too small: " + width + 'x' + height);
	}

	// Try to get force shape & min / max size
	SymbolShapeHint shape = SymbolShapeHint.FORCE_NONE;
	Dimension minSize = null;
	Dimension maxSize = null;
	if (hints != null) {
		SymbolShapeHint requestedShape = (SymbolShapeHint) hints.get(EncodeHintType.DATA_MATRIX_SHAPE);
		if (requestedShape != null) {
			shape = requestedShape;
		}
		Dimension requestedMinSize = (Dimension) hints.get(EncodeHintType.MIN_SIZE);
		if (requestedMinSize != null) {
			minSize = requestedMinSize;
		}
		Dimension requestedMaxSize = (Dimension) hints.get(EncodeHintType.MAX_SIZE);
		if (requestedMaxSize != null) {
			maxSize = requestedMaxSize;
		}
	}

	// 1. step: Data encodation
	String encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize);

	SymbolInfo symbolInfo = SymbolInfo.lookup(encoded.length(), shape, minSize, maxSize, true);

	// 2. step: ECC generation
	String codewords = ErrorCorrection.encodeECC200(encoded, symbolInfo);

	// 3. step: Module placement in Matrix
	DefaultPlacement placement = new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(),
			symbolInfo.getSymbolDataHeight());
	placement.place();

	// 4. step: low-level encoding
	return encodeLowLevel(placement, symbolInfo);
}
 
 类所在包
 同包方法