Issue 1738 Add support for margin hint in PDF417

git-svn-id: https://zxing.googlecode.com/svn/trunk@2846 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen@gmail.com 2013-07-23 22:06:06 +00:00
parent 29eeee8ccd
commit ef96893525
2 changed files with 22 additions and 14 deletions

View file

@ -33,6 +33,11 @@ import java.util.Map;
*/
public final class PDF417Writer implements Writer {
/**
* default white space (margin) around the code
*/
static final int WHITE_SPACE = 30;
@Override
public BitMatrix encode(String contents,
BarcodeFormat format,
@ -44,6 +49,7 @@ public final class PDF417Writer implements Writer {
}
PDF417 encoder = new PDF417();
int margin = WHITE_SPACE;
if (hints != null) {
if (hints.containsKey(EncodeHintType.PDF417_COMPACT)) {
@ -59,9 +65,12 @@ public final class PDF417Writer implements Writer {
dimensions.getMaxRows(),
dimensions.getMinRows());
}
if (hints.containsKey(EncodeHintType.MARGIN)) {
margin = ((Number) hints.get(EncodeHintType.MARGIN)).intValue();
}
}
return bitMatrixFromEncoder(encoder, contents, width, height);
return bitMatrixFromEncoder(encoder, contents, width, height, margin);
}
@Override
@ -78,7 +87,8 @@ public final class PDF417Writer implements Writer {
private static BitMatrix bitMatrixFromEncoder(PDF417 encoder,
String contents,
int width,
int height) throws WriterException {
int height,
int margin) throws WriterException {
int errorCorrectionLevel = 2;
encoder.generateBarcodeLogic(contents, errorCorrectionLevel);
@ -107,29 +117,27 @@ public final class PDF417Writer implements Writer {
if (rotated) {
scaledMatrix = rotateArray(scaledMatrix);
}
return bitMatrixFrombitArray(scaledMatrix);
return bitMatrixFrombitArray(scaledMatrix, margin);
}
return bitMatrixFrombitArray(originalScale);
return bitMatrixFrombitArray(originalScale, margin);
}
/**
* This takes an array holding the values of the PDF 417
*
* @param input a byte array of information with 0 is black, and 1 is white
* @param margin border around the barcode
* @return BitMatrix of the input
*/
private static BitMatrix bitMatrixFrombitArray(byte[][] input) {
// Creates a small whitespace border around the barcode
int whiteSpace = 30;
private static BitMatrix bitMatrixFrombitArray(byte[][] input, int margin) {
// Creates the bitmatrix with extra space for whitespace
BitMatrix output = new BitMatrix(input[0].length + 2 * whiteSpace, input.length + 2 * whiteSpace);
BitMatrix output = new BitMatrix(input[0].length + 2 * margin, input.length + 2 * margin);
output.clear();
for (int y = 0, yOutput = output.getHeight() - whiteSpace; y < input.length; y++, yOutput--) {
for (int y = 0, yOutput = output.getHeight() - margin - 1; y < input.length; y++, yOutput--) {
for (int x = 0; x < input[0].length; x++) {
// Zero is white in the bytematrix
if (input[y][x] == 1) {
output.set(x + whiteSpace, yOutput);
output.set(x + margin, yOutput);
}
}
}

View file

@ -33,14 +33,14 @@ public final class BarcodeMatrix {
* @param width the width of the matrix (Cols)
*/
BarcodeMatrix(int height, int width) {
matrix = new BarcodeRow[height + 2];
matrix = new BarcodeRow[height];
//Initializes the array to the correct width
for (int i = 0, matrixLength = matrix.length; i < matrixLength; i++) {
matrix[i] = new BarcodeRow((width + 4) * 17 + 1);
}
this.width = width * 17;
this.height = height + 2;
this.currentRow = 0;
this.height = height;
this.currentRow = -1;
}
void set(int x, int y, byte value) {