Fixed same ResultPoint bug in Code 128 and Code 39 reader; added convenient toString() to Result and GenericResultPoint; added arg checking for Result constructor too

git-svn-id: https://zxing.googlecode.com/svn/trunk@336 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2008-04-02 13:40:29 +00:00
parent f299f413e0
commit 012a8c0ce7
4 changed files with 29 additions and 4 deletions

View file

@ -35,6 +35,9 @@ public final class Result {
byte[] rawBytes,
ResultPoint[] resultPoints,
BarcodeFormat format) {
if (text == null && rawBytes == null) {
throw new IllegalArgumentException("Text and bytes are null");
}
this.text = text;
this.rawBytes = rawBytes;
this.resultPoints = resultPoints;
@ -87,4 +90,12 @@ public final class Result {
resultMetadata.put(type, value);
}
public String toString() {
if (text == null) {
return "[" + rawBytes.length + " bytes]";
} else {
return text;
}
}
}

View file

@ -42,4 +42,14 @@ public final class GenericResultPoint implements ResultPoint {
return posY;
}
public String toString() {
StringBuffer result = new StringBuffer();
result.append('(');
result.append(posX);
result.append(',');
result.append(posY);
result.append(')');
return result.toString();
}
}

View file

@ -405,12 +405,14 @@ public final class Code128Reader extends AbstractOneDReader {
}
String resultString = result.toString();
float left = (float) (startPatternInfo[1] + startPatternInfo[0]) / 2.0f;
float right = (float) (nextStart + lastStart) / 2.0f;
return new Result(
resultString,
null,
new ResultPoint[]{
new GenericResultPoint((float) (startPatternInfo[1] - startPatternInfo[0]) / 2.0f, (float) rowNumber),
new GenericResultPoint((float) (nextStart - lastStart) / 2.0f, (float) rowNumber)},
new GenericResultPoint(left, (float) rowNumber),
new GenericResultPoint(right, (float) rowNumber)},
BarcodeFormat.CODE_128);
}

View file

@ -138,12 +138,14 @@ public final class Code39Reader extends AbstractOneDReader {
if (extendedMode) {
resultString = decodeExtended(resultString);
}
float left = (float) (start[1] + start[0]) / 2.0f;
float right = (float) (nextStart + lastStart) / 2.0f;
return new Result(
resultString,
null,
new ResultPoint[]{
new GenericResultPoint((float) (start[1] - start[0]) / 2.0f, (float) rowNumber),
new GenericResultPoint((float) (nextStart - lastStart) / 2.0f, (float) rowNumber)},
new GenericResultPoint(left, (float) rowNumber),
new GenericResultPoint(right, (float) rowNumber)},
BarcodeFormat.CODE_39);
}