mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
Added result metadata mechanism: now, reports orientation for 1D barcodes if it's not an upright orientation
git-svn-id: https://zxing.googlecode.com/svn/trunk@281 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
b6e14d880d
commit
1215cc3512
|
@ -16,6 +16,8 @@
|
|||
|
||||
package com.google.zxing;
|
||||
|
||||
import java.util.Hashtable;
|
||||
|
||||
/**
|
||||
* <p>Encapsulates the result of decoding a barcode within an image.</p>
|
||||
*
|
||||
|
@ -27,12 +29,17 @@ public final class Result {
|
|||
private final byte[] rawBytes;
|
||||
private final ResultPoint[] resultPoints;
|
||||
private final BarcodeFormat format;
|
||||
private Hashtable resultMetadata;
|
||||
|
||||
public Result(String text, byte[] rawBytes, ResultPoint[] resultPoints, BarcodeFormat format) {
|
||||
public Result(String text,
|
||||
byte[] rawBytes,
|
||||
ResultPoint[] resultPoints,
|
||||
BarcodeFormat format) {
|
||||
this.text = text;
|
||||
this.rawBytes = rawBytes;
|
||||
this.resultPoints = resultPoints;
|
||||
this.format = format;
|
||||
this.resultMetadata = null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -65,4 +72,19 @@ public final class Result {
|
|||
return format;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {@link Hashtable} mapping {@link ResultMetadataType} keys to values. May be <code>null</code>.
|
||||
* This contains optional metadata about what was detected about the barcode, like orientation.
|
||||
*/
|
||||
public Hashtable getResultMetadata() {
|
||||
return resultMetadata;
|
||||
}
|
||||
|
||||
public void putMetadata(ResultMetadataType type, Object value) {
|
||||
if (resultMetadata == null) {
|
||||
resultMetadata = new Hashtable(3);
|
||||
}
|
||||
resultMetadata.put(type, value);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
46
core/src/com/google/zxing/ResultMetadataType.java
Normal file
46
core/src/com/google/zxing/ResultMetadataType.java
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright 2008 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.zxing;
|
||||
|
||||
/**
|
||||
* Represents some type of metadata about the result of the decoding that the decoder
|
||||
* wishes to communicate back to the caller.
|
||||
*
|
||||
* @author srowen@google.com (Sean Owen)
|
||||
*/
|
||||
public final class ResultMetadataType {
|
||||
|
||||
// No, we can't use an enum here. J2ME doesn't support it.
|
||||
|
||||
/**
|
||||
* Unspecified, application-specific metadata. Maps to an unspecified {@link Object}.
|
||||
*/
|
||||
public static final ResultMetadataType OTHER = new ResultMetadataType();
|
||||
|
||||
/**
|
||||
* Denotes the likely approximate orientation of the barcode in the image. This value
|
||||
* is given as degrees rotated clockwise from the normal, upright orientation.
|
||||
* For example a 1D barcode which was found by reading top-to-bottom would be
|
||||
* said to have orientation "90". This key maps to an {@link Integer} whose
|
||||
* value is in the range [0,360).
|
||||
*/
|
||||
public static final ResultMetadataType ORIENTATION = new ResultMetadataType();
|
||||
|
||||
private ResultMetadataType() {
|
||||
}
|
||||
|
||||
}
|
|
@ -21,6 +21,7 @@ import com.google.zxing.DecodeHintType;
|
|||
import com.google.zxing.MonochromeBitmapSource;
|
||||
import com.google.zxing.ReaderException;
|
||||
import com.google.zxing.Result;
|
||||
import com.google.zxing.ResultMetadataType;
|
||||
import com.google.zxing.common.BitArray;
|
||||
|
||||
import java.util.Hashtable;
|
||||
|
@ -45,7 +46,16 @@ public abstract class AbstractOneDReader implements OneDReader {
|
|||
} catch (ReaderException re) {
|
||||
if (tryHarder && image.isRotateSupported()) {
|
||||
MonochromeBitmapSource rotatedImage = image.rotateCounterClockwise();
|
||||
return doDecode(rotatedImage, hints, tryHarder);
|
||||
Result result = doDecode(rotatedImage, hints, tryHarder);
|
||||
// Record that we found it rotated 90 degrees CCW / 270 degrees CW
|
||||
Hashtable metadata = result.getResultMetadata();
|
||||
int orientation = 270;
|
||||
if (metadata != null && metadata.containsKey(ResultMetadataType.ORIENTATION)) {
|
||||
// But if we found it reversed in doDecode(), add in that result here:
|
||||
orientation = (orientation + ((Integer) metadata.get(ResultMetadataType.ORIENTATION)).intValue()) % 360;
|
||||
}
|
||||
result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(orientation));
|
||||
return result;
|
||||
} else {
|
||||
throw re;
|
||||
}
|
||||
|
@ -108,6 +118,8 @@ public abstract class AbstractOneDReader implements OneDReader {
|
|||
if (barcodesToSkip > 0) { // See if we should skip and keep looking
|
||||
barcodesToSkip--;
|
||||
} else {
|
||||
// Found it, but upside-down:
|
||||
result.putMetadata(ResultMetadataType.ORIENTATION, new Integer(180));
|
||||
return result;
|
||||
}
|
||||
} catch (ReaderException re2) {
|
||||
|
|
Loading…
Reference in a new issue