-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
package com.mining.app.zxing.camera;
-
-
import android.content.Context;
-
import android.graphics.Point;
-
import android.hardware.Camera;
-
import android.os.Build;
-
import android.util.Log;
-
import android.view.Display;
-
import android.view.WindowManager;
-
-
import java.lang.reflect.Method;
-
import java.util.regex.Pattern;
-
-
finalclass CameraConfigurationManager {
-
-
privatestaticfinal String TAG = CameraConfigurationManager.class.getSimpleName();
-
-
privatestaticfinalint TEN_DESIRED_ZOOM = 27;
-
privatestaticfinalint DESIRED_SHARPNESS = 30;
-
-
privatestaticfinal Pattern COMMA_PATTERN = Pattern.compile(",");
-
-
privatefinal Context context;
-
private Point screenResolution;
-
private Point cameraResolution;
-
privateint previewFormat;
-
private String previewFormatString;
-
-
CameraConfigurationManager(Context context) {
-
this.context = context;
-
}
-
-
-
-
-
void initFromCameraParameters(Camera camera) {
-
Camera.Parameters parameters = camera.getParameters();
-
previewFormat = parameters.getPreviewFormat();
-
previewFormatString = parameters.get("preview-format");
-
Log.d(TAG, "Default preview format: " + previewFormat + '/' + previewFormatString);
-
WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
-
Display display = manager.getDefaultDisplay();
-
screenResolution = new Point(display.getWidth(), display.getHeight());
-
Log.d(TAG, "Screen resolution: " + screenResolution);
-
cameraResolution = getCameraResolution(parameters, screenResolution);
-
Log.d(TAG, "Camera resolution: " + screenResolution);
-
}
-
-
-
-
-
-
-
-
void setDesiredCameraParameters(Camera camera) {
-
Camera.Parameters parameters = camera.getParameters();
-
Log.d(TAG, "Setting preview size: " + cameraResolution);
-
parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
-
setFlash(parameters);
-
setZoom(parameters);
-
-
-
-
-
-
-
camera.setParameters(parameters);
-
}
-
-
Point getCameraResolution() {
-
return cameraResolution;
-
}
-
-
Point getScreenResolution() {
-
return screenResolution;
-
}
-
-
int getPreviewFormat() {
-
return previewFormat;
-
}
-
-
String getPreviewFormatString() {
-
return previewFormatString;
-
}
-
-
privatestatic Point getCameraResolution(Camera.Parameters parameters, Point screenResolution) {
-
-
String previewSizeValueString = parameters.get("preview-size-values");
-
-
if (previewSizeValueString == null) {
-
previewSizeValueString = parameters.get("preview-size-value");
-
}
-
-
Point cameraResolution = null;
-
-
if (previewSizeValueString != null) {
-
Log.d(TAG, "preview-size-values parameter: " + previewSizeValueString);
-
cameraResolution = findBestPreviewSizeValue(previewSizeValueString, screenResolution);
-
}
-
-
if (cameraResolution == null) {
-
-
cameraResolution = new Point(
-
(screenResolution.x >> 3) << 3,
-
(screenResolution.y >> 3) << 3);
-
}
-
-
return cameraResolution;
-
}
-
-
privatestatic Point findBestPreviewSizeValue(CharSequence previewSizeValueString, Point screenResolution) {
-
int bestX = 0;
-
int bestY = 0;
-
int diff = Integer.MAX_VALUE;
-
for (String previewSize : COMMA_PATTERN.split(previewSizeValueString)) {
-
-
previewSize = previewSize.trim();
-
int dimPosition = previewSize.indexOf('x');
-
if (dimPosition < 0) {
-
Log.w(TAG, "Bad preview-size: " + previewSize);
-
continue;
-
}
-
-
int newX;
-
int newY;
-
try {
-
newX = Integer.parseInt(previewSize.substring(0, dimPosition));
-
newY = Integer.parseInt(previewSize.substring(dimPosition + 1));
-
} catch (NumberFormatException nfe) {
-
Log.w(TAG, "Bad preview-size: " + previewSize);
-
continue;
-
}
-
-
int newDiff = Math.abs(newX - screenResolution.x) + Math.abs(newY - screenResolution.y);
-
if (newDiff == 0) {
-
bestX = newX;
-
bestY = newY;
-
break;
-
} elseif (newDiff < diff) {
-
bestX = newX;
-
bestY = newY;
-
diff = newDiff;
-
}
-
-
}
-
-
if (bestX > 0 && bestY > 0) {
-
returnnew Point(bestX, bestY);
-
}
-
returnnull;
-
}
-
-
privatestaticint findBestMotZoomValue(CharSequence stringValues, int tenDesiredZoom) {
-
int tenBestValue = 0;
-
for (String stringValue : COMMA_PATTERN.split(stringValues)) {
-
stringValue = stringValue.trim();
-
double value;
-
try {
-
value = Double.parseDouble(stringValue);
-
} catch (NumberFormatException nfe) {
-
return tenDesiredZoom;
-
}
-
int tenValue = (int) (10.0 * value);
-
if (Math.abs(tenDesiredZoom - value) < Math.abs(tenDesiredZoom - tenBestValue)) {
-
tenBestValue = tenValue;
-
}
-
}
-
return tenBestValue;
-
}
-
-
privatevoid setFlash(Camera.Parameters parameters) {
-
-
-
-
-
-
if (Build.MODEL.contains("Behold II") && CameraManager.SDK_INT == 3) {
-
parameters.set("flash-value", 1);
-
} else {
-
parameters.set("flash-value", 2);
-
}
-
-
parameters.set("flash-mode", "off");
-
}
-
-
privatevoid setZoom(Camera.Parameters parameters) {
-
-
String zoomSupportedString = parameters.get("zoom-supported");
-
if (zoomSupportedString != null && !Boolean.parseBoolean(zoomSupportedString)) {
-
return;
-
}
-
-
int tenDesiredZoom = TEN_DESIRED_ZOOM;
-
-
String maxZoomString = parameters.get("max-zoom");
-
if (maxZoomString != null) {
-
try {
-
int tenMaxZoom = (int) (10.0 * Double.parseDouble(maxZoomString));
-
if (tenDesiredZoom > tenMaxZoom) {
-
tenDesiredZoom = tenMaxZoom;
-
}
-
} catch (NumberFormatException nfe) {
-
Log.w(TAG, "Bad max-zoom: " + maxZoomString);
-
}
-
}
-
-
String takingPictureZoomMaxString = parameters.get("taking-picture-zoom-max");
-
if (takingPictureZoomMaxString != null) {
-
try {
-
int tenMaxZoom = Integer.parseInt(takingPictureZoomMaxString);
-
if (tenDesiredZoom > tenMaxZoom) {
-
tenDesiredZoom = tenMaxZoom;
-
}
-
} catch (NumberFormatException nfe) {
-
Log.w(TAG, "Bad taking-picture-zoom-max: " + takingPictureZoomMaxString);
-
}
-
}
-
-
String motZoomValuesString = parameters.get("mot-zoom-values");
-
if (motZoomValuesString != null) {
-
tenDesiredZoom = findBestMotZoomValue(motZoomValuesString, tenDesiredZoom);
-
}
-
-
String motZoomStepString = parameters.get("mot-zoom-step");
-
if (motZoomStepString != null) {
-
try {
-
double motZoomStep = Double.parseDouble(motZoomStepString.trim());
-
int tenZoomStep = (int) (10.0 * motZoomStep);
-
if (tenZoomStep > 1) {
-
tenDesiredZoom -= tenDesiredZoom % tenZoomStep;
-
}
-
} catch (NumberFormatException nfe) {
-
-
}
-
}
-
-
-
-
if (maxZoomString != null || motZoomValuesString != null) {
-
parameters.set("zoom", String.valueOf(tenDesiredZoom / 10.0));
-
}
-
-
-
-
if (takingPictureZoomMaxString != null) {
-
parameters.set("taking-picture-zoom", tenDesiredZoom);
-
}
-
}
-
-
publicstaticint getDesiredSharpness() {
-
return DESIRED_SHARPNESS;
-
}
-
-
-
-
-
-
-
protectedvoid setDisplayOrientation(Camera camera, int angle){
-
Method downPolymorphic;
-
try
-
{
-
downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
-
if (downPolymorphic != null)
-
downPolymorphic.invoke(camera, new Object[] { angle });
-
}
-
catch (Exception e1)
-
{
-
}
-
}
-
-
}