[SCM] Multi-format 1D/2D barcode image processing library branch, upstream, updated. 24d4480bc48cf9eabf7b2bd2f528248b0e458809
srowen
srowen at 59b500cc-1b3d-0410-9834-0bbf25fbcc57
Wed Aug 4 01:31:06 UTC 2010
The following commit has been merged in the upstream branch:
commit ed70838051950f58934189f9ad0314208dd48894
Author: srowen <srowen at 59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Date: Fri Apr 16 10:56:15 2010 +0000
Apparent fix for issue 383 / Moment + Android 2.1 issue
git-svn-id: http://zxing.googlecode.com/svn/trunk@1309 59b500cc-1b3d-0410-9834-0bbf25fbcc57
diff --git a/android/src/com/google/zxing/client/android/camera/CameraConfigurationManager.java b/android/src/com/google/zxing/client/android/camera/CameraConfigurationManager.java
index e70b1a3..e04c352 100644
--- a/android/src/com/google/zxing/client/android/camera/CameraConfigurationManager.java
+++ b/android/src/com/google/zxing/client/android/camera/CameraConfigurationManager.java
@@ -52,8 +52,12 @@ final class CameraConfigurationManager {
previewFormat = parameters.getPreviewFormat();
previewFormatString = parameters.get("preview-format");
Log.v(TAG, "Default preview format: " + previewFormat + '/' + previewFormatString);
- screenResolution = getScreenResolution();
- cameraResolution = getCameraResolution(parameters);
+ WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ Display display = manager.getDefaultDisplay();
+ screenResolution = new Point(display.getWidth(), display.getHeight());
+ Log.v(TAG, "Screen resolution: " + screenResolution);
+ cameraResolution = getCameraResolution(parameters, screenResolution);
+ Log.v(TAG, "Camera resolution: " + screenResolution);
}
/**
@@ -64,7 +68,7 @@ final class CameraConfigurationManager {
*/
void setDesiredCameraParameters(Camera camera) {
Camera.Parameters parameters = camera.getParameters();
- Log.v(TAG, "Setting preview size: " + cameraResolution.x + ", " + cameraResolution.y);
+ Log.v(TAG, "Setting preview size: " + cameraResolution);
parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
setFlash(parameters);
setZoom(parameters);
@@ -76,6 +80,10 @@ final class CameraConfigurationManager {
return cameraResolution;
}
+ Point getScreenResolution() {
+ return screenResolution;
+ }
+
int getPreviewFormat() {
return previewFormat;
}
@@ -84,13 +92,7 @@ final class CameraConfigurationManager {
return previewFormatString;
}
- private Point getScreenResolution() {
- WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
- Display display = manager.getDefaultDisplay();
- return new Point(display.getWidth(), display.getHeight());
- }
-
- private Point getCameraResolution(Camera.Parameters parameters) {
+ private static Point getCameraResolution(Camera.Parameters parameters, Point screenResolution) {
String previewSizeValueString = parameters.get("preview-size-values");
// saw this on Xperia
@@ -101,7 +103,7 @@ final class CameraConfigurationManager {
Point cameraResolution = null;
if (previewSizeValueString != null) {
- Log.v(TAG, "preview-size parameter: " + previewSizeValueString);
+ Log.v(TAG, "preview-size-values parameter: " + previewSizeValueString);
cameraResolution = findBestPreviewSizeValue(previewSizeValueString, screenResolution);
}
@@ -157,7 +159,7 @@ final class CameraConfigurationManager {
return null;
}
- private static int findBestMotZoomValue(String stringValues, int tenDesiredZoom) {
+ private static int findBestMotZoomValue(CharSequence stringValues, int tenDesiredZoom) {
int tenBestValue = 0;
for (String stringValue : COMMA_PATTERN.split(stringValues)) {
stringValue = stringValue.trim();
diff --git a/android/src/com/google/zxing/client/android/camera/CameraManager.java b/android/src/com/google/zxing/client/android/camera/CameraManager.java
index 5f67471..fc56693 100755
--- a/android/src/com/google/zxing/client/android/camera/CameraManager.java
+++ b/android/src/com/google/zxing/client/android/camera/CameraManager.java
@@ -16,8 +16,6 @@
package com.google.zxing.client.android.camera;
-import com.google.zxing.ResultPoint;
-
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.PixelFormat;
@@ -56,6 +54,7 @@ public final class CameraManager {
private final CameraConfigurationManager configManager;
private Camera camera;
private Rect framingRect;
+ private Rect framingRectInPreview;
private boolean initialized;
private boolean previewing;
private final boolean useOneShotPreviewCallback;
@@ -205,25 +204,25 @@ public final class CameraManager {
* @return The rectangle to draw on screen in window coordinates.
*/
public Rect getFramingRect() {
- Point cameraResolution = configManager.getCameraResolution();
+ Point screenResolution = configManager.getScreenResolution();
if (framingRect == null) {
if (camera == null) {
return null;
}
- int width = cameraResolution.x * 3 / 4;
+ int width = screenResolution.x * 3 / 4;
if (width < MIN_FRAME_WIDTH) {
width = MIN_FRAME_WIDTH;
} else if (width > MAX_FRAME_WIDTH) {
width = MAX_FRAME_WIDTH;
}
- int height = cameraResolution.y * 3 / 4;
+ int height = screenResolution.y * 3 / 4;
if (height < MIN_FRAME_HEIGHT) {
height = MIN_FRAME_HEIGHT;
} else if (height > MAX_FRAME_HEIGHT) {
height = MAX_FRAME_HEIGHT;
}
- int leftOffset = (cameraResolution.x - width) / 2;
- int topOffset = (cameraResolution.y - height) / 2;
+ int leftOffset = (screenResolution.x - width) / 2;
+ int topOffset = (screenResolution.y - height) / 2;
framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height);
Log.v(TAG, "Calculated framing rect: " + framingRect);
}
@@ -231,14 +230,33 @@ public final class CameraManager {
}
/**
+ * Like {@link #getFramingRect} but coordinates are in terms of the preview frame,
+ * not UI / screen.
+ */
+ public Rect getFramingRectInPreview() {
+ if (framingRectInPreview == null) {
+ Rect rect = new Rect(getFramingRect());
+ Point cameraResolution = configManager.getCameraResolution();
+ Point screenResolution = configManager.getScreenResolution();
+ rect.left = rect.left * cameraResolution.x / screenResolution.x;
+ rect.right = rect.right * cameraResolution.x / screenResolution.x;
+ rect.top = rect.top * cameraResolution.y / screenResolution.y;
+ rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;
+ framingRectInPreview = rect;
+ }
+ return framingRectInPreview;
+ }
+
+ /**
* Converts the result points from still resolution coordinates to screen coordinates.
*
* @param points The points returned by the Reader subclass through Result.getResultPoints().
* @return An array of Points scaled to the size of the framing rect and offset appropriately
* so they can be drawn in screen coordinates.
*/
+ /*
public Point[] convertResultPoints(ResultPoint[] points) {
- Rect frame = getFramingRect();
+ Rect frame = getFramingRectInPreview();
int count = points.length;
Point[] output = new Point[count];
for (int x = 0; x < count; x++) {
@@ -248,6 +266,7 @@ public final class CameraManager {
}
return output;
}
+ */
/**
* A factory method to build the appropriate LuminanceSource object based on the format
@@ -259,7 +278,7 @@ public final class CameraManager {
* @return A PlanarYUVLuminanceSource instance.
*/
public PlanarYUVLuminanceSource buildLuminanceSource(byte[] data, int width, int height) {
- Rect rect = getFramingRect();
+ Rect rect = getFramingRectInPreview();
int previewFormat = configManager.getPreviewFormat();
String previewFormatString = configManager.getPreviewFormatString();
switch (previewFormat) {
--
Multi-format 1D/2D barcode image processing library
More information about the Pkg-google-commits
mailing list