From f3b4105ff1f352a80caa1a68a30d1119b9be36c7 Mon Sep 17 00:00:00 2001
From: Ailiwean <1581209979@qq.com>
Date: Sun, 27 Sep 2020 16:02:38 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B1=80=E9=83=A8=E6=B5=8B?=
=?UTF-8?q?=E5=85=89=EF=BC=8C=E9=80=82=E9=85=8D=E6=A8=AA=E7=AB=96=E5=B1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/inspectionProfiles/Project_Default.xml | 61 +++++++
.idea/smartfox_info.xml | 6 +
app/build.gradle | 4 +-
.../google/android/cameraview/Camera1.java | 31 ++--
.../cameraview/TextureViewPreview.java | 42 +----
.../google/android/cameraview/Camera2.java | 29 +--
.../android/cameraview/PreviewImpl.java | 2 -
.../main/java/com/ailiwean/core/Config.java | 17 ++
.../com/ailiwean/core/WorkThreadServer.java | 2 +-
.../com/ailiwean/core/able/AbleManager.kt | 4 +-
.../com/ailiwean/core/able/LighSolveAble.java | 2 -
.../ailiwean/core/able/PixsValuesAble.java | 1 -
.../ailiwean/core/able/XQRScanAbleRotate.java | 15 +-
.../ailiwean/core/able/XQRScanCrudeAble.java | 1 -
.../ailiwean/core/able/XQRScanZoomAble.java | 2 -
.../com/ailiwean/core/helper/LightHelper.java | 2 +-
.../com/ailiwean/core/helper/ScanHelper.java | 167 +++++++++++++-----
.../com/ailiwean/core/helper/ZoomHelper.kt | 1 +
.../com/ailiwean/core/view/FreeZxingView.kt | 2 -
.../core/zxing/CustomMultiFormatReader.java | 16 +-
.../com/ailiwean/core/zxing/ScanRect.java | 15 ++
.../zxing/core/PlanarYUVLuminanceSource.java | 3 -
.../core/common/HybridBinarizerCrude.java | 5 +-
.../core/zxing/core/oned/OneDReader.java | 2 +-
.../android/cameraview/BaseCameraView.kt | 2 +-
.../google/android/cameraview/CameraView.java | 24 ++-
.../DisplayOrientationDetector.java | 21 ++-
.../layout-land/nbzxing_default_floorview.xml | 41 +++++
.../res/layout/nbzxing_default_floorview.xml | 14 +-
.../module_grayscale/OverBrightScale.java | 1 -
.../module_grayscale/OverDarkScale.java | 1 -
31 files changed, 385 insertions(+), 151 deletions(-)
create mode 100644 .idea/smartfox_info.xml
create mode 100644 module_camera/src/main/res/layout-land/nbzxing_default_floorview.xml
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 5abe40b..890f47c 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -1,8 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/smartfox_info.xml b/.idea/smartfox_info.xml
new file mode 100644
index 0000000..1c2584f
--- /dev/null
+++ b/.idea/smartfox_info.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 1e2111e..caa056b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,8 +33,8 @@ android {
}
debug {
- minifyEnabled true
- shrinkResources true
+ minifyEnabled false
+ shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
diff --git a/module_camera/src/main/api14/com/google/android/cameraview/Camera1.java b/module_camera/src/main/api14/com/google/android/cameraview/Camera1.java
index a64bb92..d5995b1 100644
--- a/module_camera/src/main/api14/com/google/android/cameraview/Camera1.java
+++ b/module_camera/src/main/api14/com/google/android/cameraview/Camera1.java
@@ -18,9 +18,9 @@
import android.annotation.SuppressLint;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
-import android.util.Log;
import android.view.SurfaceHolder;
import androidx.collection.SparseArrayCompat;
@@ -28,9 +28,9 @@
import com.ailiwean.core.Config;
import com.ailiwean.core.helper.CameraHelper;
import com.ailiwean.core.helper.LightHelper;
+import com.ailiwean.core.helper.ScanHelper;
import java.io.IOException;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -290,10 +290,13 @@ void setDisplayOrientation(int displayOrientation) {
return;
}
mDisplayOrientation = displayOrientation;
- if (isCameraOpened()) {
- mCameraParameters.setRotation(calcCameraRotation(displayOrientation));
- mCamera.setParameters(mCameraParameters);
- mCamera.setDisplayOrientation(calcDisplayOrientation(displayOrientation));
+ try {
+ if (isCameraOpened()) {
+ mCameraParameters.setRotation(calcCameraRotation(displayOrientation));
+ mCamera.setParameters(mCameraParameters);
+ mCamera.setDisplayOrientation(calcDisplayOrientation(displayOrientation));
+ }
+ } catch (Exception ignored) {
}
}
@@ -584,12 +587,18 @@ protected void rectMeteringWithFocus() {
if (Config.scanRect == null || Config.scanRect.getRect() == null)
return;
- int left = (int) (2000 * Config.scanRect.getRect().top) - 1000;
- int top = (int) (2000 * (1 - Config.scanRect.getRect().right)) - 1000;
- int right = (int) (2000 * Config.scanRect.getRect().bottom) - 1000;
- int bottom = (int) (2000 * (1 - Config.scanRect.getRect().left)) - 1000;
+ RectF cropRect = ScanHelper.copyRect(Config.scanRect.getRect());
+ cropRect.left += (cropRect.right - cropRect.left) / 4;
+ cropRect.right -= (cropRect.right - cropRect.left) / 4;
+ cropRect.top += (cropRect.bottom - cropRect.top) / 4;
+ cropRect.bottom -= (cropRect.bottom - cropRect.top) / 4;
+
+ int left = (int) (2000 * cropRect.top) - 1000;
+ int top = (int) (2000 * (1 - cropRect.right)) - 1000;
+ int right = (int) (2000 * cropRect.bottom) - 1000;
+ int bottom = (int) (2000 * (1 - cropRect.left)) - 1000;
- Rect realRect = new Rect(left , top, right, bottom);
+ Rect realRect = new Rect(left, top, right, bottom);
List areas = Collections.singletonList(new Camera.Area(realRect, 1000));
mCameraParameters.setFocusAreas(areas);
mCameraParameters.setMeteringAreas(areas);
diff --git a/module_camera/src/main/api14/com/google/android/cameraview/TextureViewPreview.java b/module_camera/src/main/api14/com/google/android/cameraview/TextureViewPreview.java
index 6a56f5b..998fd70 100644
--- a/module_camera/src/main/api14/com/google/android/cameraview/TextureViewPreview.java
+++ b/module_camera/src/main/api14/com/google/android/cameraview/TextureViewPreview.java
@@ -18,21 +18,21 @@
import android.annotation.TargetApi;
import android.content.Context;
+import android.content.res.Configuration;
import android.graphics.Matrix;
import android.graphics.SurfaceTexture;
-import android.util.Log;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import com.ailiwean.core.Config;
+import com.ailiwean.core.Utils;
@TargetApi(14)
class TextureViewPreview extends PreviewImpl {
private final TextureView mTextureView;
-
private int mDisplayOrientation;
TextureViewPreview(Context context, ViewGroup parent) {
@@ -65,6 +65,7 @@ public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
+
}
@TargetApi(15)
@@ -74,36 +75,6 @@ void setBufferSize(int widthData, int heightData) {
Config.scanRect.setDataY(heightData);
if (getSurfaceTexture() != null)
getSurfaceTexture().setDefaultBufferSize(widthData, heightData);
- else {
- TextureView.SurfaceTextureListener listener = mTextureView.getSurfaceTextureListener();
- mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
- @Override
- public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
- if (listener != null)
- listener.onSurfaceTextureAvailable(surface, width, height);
- getSurfaceTexture().setDefaultBufferSize(widthData, heightData);
- }
-
- @Override
- public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
- if (listener != null)
- listener.onSurfaceTextureSizeChanged(surface, width, height);
- }
-
- @Override
- public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
- if (listener != null)
- return listener.onSurfaceTextureDestroyed(surface);
- return false;
- }
-
- @Override
- public void onSurfaceTextureUpdated(SurfaceTexture surface) {
- if (listener != null)
- listener.onSurfaceTextureUpdated(surface);
- }
- });
- }
}
@Override
@@ -138,11 +109,16 @@ boolean isReady() {
}
/**
- * Configures the transform matrix for TextureView based on {@link #mDisplayOrientation} and
+ * Configures the transform matrix for TextureView based on {@link Config} and
* the surface size.
*/
void configureTransform() {
Matrix matrix = new Matrix();
+
+ if (Utils.getContext().getResources().getConfiguration().orientation ==
+ Configuration.ORIENTATION_LANDSCAPE && mDisplayOrientation == 0)
+ mDisplayOrientation = Config.displayOrientation;
+
if (mDisplayOrientation % 180 == 90) {
final int width = getWidth();
final int height = getHeight();
diff --git a/module_camera/src/main/api21/com/google/android/cameraview/Camera2.java b/module_camera/src/main/api21/com/google/android/cameraview/Camera2.java
index 8157144..0f64bf3 100644
--- a/module_camera/src/main/api21/com/google/android/cameraview/Camera2.java
+++ b/module_camera/src/main/api21/com/google/android/cameraview/Camera2.java
@@ -19,7 +19,7 @@
import android.content.Context;
import android.graphics.ImageFormat;
import android.graphics.Rect;
-import android.hardware.camera2.CameraAccessException;
+import android.graphics.RectF;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
@@ -32,7 +32,6 @@
import android.media.Image;
import android.media.ImageReader;
import android.os.Build;
-import android.util.Log;
import android.util.SparseIntArray;
import android.view.Surface;
@@ -40,10 +39,10 @@
import com.ailiwean.core.Config;
import com.ailiwean.core.helper.CameraHelper;
+import com.ailiwean.core.helper.ScanHelper;
import java.nio.ByteBuffer;
import java.util.Arrays;
-import java.util.Collections;
import java.util.Set;
import java.util.SortedSet;
@@ -909,17 +908,23 @@ protected void rectMeteringWithFocus() {
if (Config.scanRect == null || Config.scanRect.getRect() == null)
return;
- Rect rect = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
- if (rect == null)
- rect = new Rect(0, 0, 1, 1);
+ Rect dateRect = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
+ if (dateRect == null)
+ dateRect = new Rect(0, 0, 1, 1);
- int dataWidth = rect.width() - 1;
- int dataHeight = rect.height() - 1;
+ int dataWidth = dateRect.width() - 1;
+ int dataHeight = dateRect.height() - 1;
- int left = (int) (Config.scanRect.getRect().top * dataWidth);
- int top = (int) ((1f - Config.scanRect.getRect().right) * dataHeight);
- int right = (int) (Config.scanRect.getRect().bottom * dataWidth);
- int bottom = (int) ((1f - (Config.scanRect.getRect().left)) * dataHeight);
+ RectF cropRect = ScanHelper.copyRect(Config.scanRect.getRect());
+ cropRect.left += (cropRect.right - cropRect.left) / 4;
+ cropRect.right -= (cropRect.right - cropRect.left) / 4;
+ cropRect.top += (cropRect.bottom - cropRect.top) / 4;
+ cropRect.bottom -= (cropRect.bottom - cropRect.top) / 4;
+
+ int left = (int) (cropRect.top * dataWidth);
+ int top = (int) ((1f - cropRect.right) * dataHeight);
+ int right = (int) (cropRect.bottom * dataWidth);
+ int bottom = (int) ((1f - cropRect.left) * dataHeight);
Rect realRect = new Rect(left, top, right, bottom);
MeteringRectangle[] meteringRectangles = new MeteringRectangle[]{new MeteringRectangle(realRect, 1000)};
diff --git a/module_camera/src/main/base/com/google/android/cameraview/PreviewImpl.java b/module_camera/src/main/base/com/google/android/cameraview/PreviewImpl.java
index a20774f..627d836 100644
--- a/module_camera/src/main/base/com/google/android/cameraview/PreviewImpl.java
+++ b/module_camera/src/main/base/com/google/android/cameraview/PreviewImpl.java
@@ -17,11 +17,9 @@
package com.google.android.cameraview;
import android.os.Handler;
-import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.View;
-import android.view.ViewGroup;
/**
diff --git a/module_camera/src/main/java/com/ailiwean/core/Config.java b/module_camera/src/main/java/com/ailiwean/core/Config.java
index 66cc66b..7829cc1 100644
--- a/module_camera/src/main/java/com/ailiwean/core/Config.java
+++ b/module_camera/src/main/java/com/ailiwean/core/Config.java
@@ -35,12 +35,29 @@ public class Config {
//扫码区域
public static ScanRect scanRect;
+
+ public static int displayOrientation;
+
//灰度算法类路径
public static final String GARY_SCALE_PATH = "com.ailiwean.module_grayscale.GrayScaleDispatch";
public static void initConfig() {
currentZoom = 0f;
+ displayOrientation = 0;
scanRect = new ScanRect();
}
+ //屏幕方向
+ public static boolean is0() {
+ return displayOrientation == 0;
+ }
+
+ public static boolean is90() {
+ return displayOrientation == 90;
+ }
+
+ public static boolean is270() {
+ return displayOrientation == 270;
+ }
+
}
diff --git a/module_camera/src/main/java/com/ailiwean/core/WorkThreadServer.java b/module_camera/src/main/java/com/ailiwean/core/WorkThreadServer.java
index cc4b21b..300366c 100644
--- a/module_camera/src/main/java/com/ailiwean/core/WorkThreadServer.java
+++ b/module_camera/src/main/java/com/ailiwean/core/WorkThreadServer.java
@@ -31,7 +31,7 @@ private WorkThreadServer() {
new ThreadPoolExecutor.DiscardOldestPolicy());
else executor = new RespectScalePool(
corePoolSize, corePoolSize, keepAliveTime, TimeUnit.SECONDS,
- RespectScaleQueue.create(maximumPoolSize / 3 * 2, maximumPoolSize / 3),
+ RespectScaleQueue.create(maximumPoolSize / 2, maximumPoolSize / 2),
new RespectScalePool.RespectScalePolicy());
}
diff --git a/module_camera/src/main/java/com/ailiwean/core/able/AbleManager.kt b/module_camera/src/main/java/com/ailiwean/core/able/AbleManager.kt
index 257378f..8dae4f1 100644
--- a/module_camera/src/main/java/com/ailiwean/core/able/AbleManager.kt
+++ b/module_camera/src/main/java/com/ailiwean/core/able/AbleManager.kt
@@ -45,10 +45,10 @@ class AbleManager private constructor(handler: Handler) : PixsValuesAble(handler
fun loadAbility() {
ableList.clear()
ableList.add(XQRScanCrudeAble(handlerHolder.get()))
- ableList.add(XQRScanFineAble(handlerHolder.get()))
ableList.add(XQRScanZoomAble(handlerHolder.get()))
ableList.add(XQRScanAbleRotate(handlerHolder.get()))
ableList.add(LighSolveAble(handlerHolder.get()))
+// ableList.add(XQRScanFineAble(handlerHolder.get()))
// ableList.add(XQRScanAble(handler))
// ableList.add(GrayscaleStrengAble(handler))
// ableList.add(XQRScanFastAble(handler))
@@ -96,7 +96,7 @@ class AbleManager private constructor(handler: Handler) : PixsValuesAble(handler
override fun release() {
ableList.forEach {
- it.release()
+ it.release()
}
ableList.clear()
server.quit()
diff --git a/module_camera/src/main/java/com/ailiwean/core/able/LighSolveAble.java b/module_camera/src/main/java/com/ailiwean/core/able/LighSolveAble.java
index 9a85dc7..e6f4caf 100644
--- a/module_camera/src/main/java/com/ailiwean/core/able/LighSolveAble.java
+++ b/module_camera/src/main/java/com/ailiwean/core/able/LighSolveAble.java
@@ -1,8 +1,6 @@
package com.ailiwean.core.able;
import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
import com.ailiwean.core.Config;
import com.ailiwean.core.helper.LightHelper;
diff --git a/module_camera/src/main/java/com/ailiwean/core/able/PixsValuesAble.java b/module_camera/src/main/java/com/ailiwean/core/able/PixsValuesAble.java
index c8014c5..a502760 100644
--- a/module_camera/src/main/java/com/ailiwean/core/able/PixsValuesAble.java
+++ b/module_camera/src/main/java/com/ailiwean/core/able/PixsValuesAble.java
@@ -2,7 +2,6 @@
import android.os.Handler;
import android.os.Message;
-import android.util.Log;
import com.ailiwean.core.zxing.CustomMultiFormatReader;
import com.ailiwean.core.zxing.core.Binarizer;
diff --git a/module_camera/src/main/java/com/ailiwean/core/able/XQRScanAbleRotate.java b/module_camera/src/main/java/com/ailiwean/core/able/XQRScanAbleRotate.java
index 5032b70..3835522 100644
--- a/module_camera/src/main/java/com/ailiwean/core/able/XQRScanAbleRotate.java
+++ b/module_camera/src/main/java/com/ailiwean/core/able/XQRScanAbleRotate.java
@@ -1,12 +1,18 @@
package com.ailiwean.core.able;
+import android.graphics.Rect;
import android.os.Handler;
import android.os.Message;
import com.ailiwean.core.Config;
import com.ailiwean.core.helper.ScanHelper;
import com.ailiwean.core.zxing.core.BinaryBitmap;
+import com.ailiwean.core.zxing.core.PlanarYUVLuminanceSource;
import com.ailiwean.core.zxing.core.Result;
+import com.ailiwean.core.zxing.core.common.HybridBinarizerFine;
+
+import static com.ailiwean.core.helper.ScanHelper.buildLuminanceSource;
+import static com.ailiwean.core.helper.ScanHelper.getScanByteRect;
/**
* @Package: com.ailiwean.core.able
@@ -23,7 +29,7 @@ public class XQRScanAbleRotate extends PixsValuesAble {
XQRScanAbleRotate(Handler handler) {
super(handler);
}
-
+
@Override
public void cusAction(byte[] data, int dataWidth, int dataHeight) {
if (result != null && !isNative)
@@ -34,9 +40,10 @@ public void cusAction(byte[] data, int dataWidth, int dataHeight) {
dataWidth += dataHeight;
dataHeight = dataWidth - dataHeight;
dataWidth -= dataHeight;
- //先生产扫码需要的BinaryBitmap
- binaryBitmap = ScanHelper.byteToBinaryBitmap(data, dataWidth, dataHeight);
- result = reader.decode(binaryBitmap);
+
+ Rect rect = getScanByteRect(dataWidth, dataHeight);
+ PlanarYUVLuminanceSource source = buildLuminanceSource(data, dataWidth, dataHeight, rect);
+ result = toLaunchParse(new HybridBinarizerFine(source));
if (result != null) {
sendMessage(Config.SCAN_RESULT, covertResultRotate(result));
}
diff --git a/module_camera/src/main/java/com/ailiwean/core/able/XQRScanCrudeAble.java b/module_camera/src/main/java/com/ailiwean/core/able/XQRScanCrudeAble.java
index bf41268..9e94c82 100644
--- a/module_camera/src/main/java/com/ailiwean/core/able/XQRScanCrudeAble.java
+++ b/module_camera/src/main/java/com/ailiwean/core/able/XQRScanCrudeAble.java
@@ -1,7 +1,6 @@
package com.ailiwean.core.able;
import android.os.Handler;
-import android.os.Message;
import com.ailiwean.core.Config;
import com.ailiwean.core.helper.ScanHelper;
diff --git a/module_camera/src/main/java/com/ailiwean/core/able/XQRScanZoomAble.java b/module_camera/src/main/java/com/ailiwean/core/able/XQRScanZoomAble.java
index 5af447b..16a1e93 100644
--- a/module_camera/src/main/java/com/ailiwean/core/able/XQRScanZoomAble.java
+++ b/module_camera/src/main/java/com/ailiwean/core/able/XQRScanZoomAble.java
@@ -1,8 +1,6 @@
package com.ailiwean.core.able;
import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
import com.ailiwean.core.Config;
import com.ailiwean.core.helper.ScanHelper;
diff --git a/module_camera/src/main/java/com/ailiwean/core/helper/LightHelper.java b/module_camera/src/main/java/com/ailiwean/core/helper/LightHelper.java
index 062211a..d1715a7 100644
--- a/module_camera/src/main/java/com/ailiwean/core/helper/LightHelper.java
+++ b/module_camera/src/main/java/com/ailiwean/core/helper/LightHelper.java
@@ -16,7 +16,7 @@ public class LightHelper {
static long lastRecordTime = System.currentTimeMillis();
//扫描间隔
- static int waitScanTime = 300;
+ static int waitScanTime = 500;
static int lastAvDark = 0;
diff --git a/module_camera/src/main/java/com/ailiwean/core/helper/ScanHelper.java b/module_camera/src/main/java/com/ailiwean/core/helper/ScanHelper.java
index 8f275f1..3bb4887 100644
--- a/module_camera/src/main/java/com/ailiwean/core/helper/ScanHelper.java
+++ b/module_camera/src/main/java/com/ailiwean/core/helper/ScanHelper.java
@@ -2,14 +2,11 @@
import android.graphics.PointF;
import android.graphics.Rect;
-import android.util.Log;
+import android.graphics.RectF;
import com.ailiwean.core.Config;
-import com.ailiwean.core.zxing.core.BinaryBitmap;
import com.ailiwean.core.zxing.core.PlanarYUVLuminanceSource;
import com.ailiwean.core.zxing.core.ResultPoint;
-import com.ailiwean.core.zxing.core.common.HybridBinarizer;
-import com.ailiwean.core.zxing.core.common.HybridBinarizerFine;
/**
* @Package: com.ailiwean.core.helper
@@ -20,22 +17,13 @@
*/
public class ScanHelper {
- /***
- * 字节转BinaryBitmap
- */
- public static BinaryBitmap byteToBinaryBitmap(byte[] bytes, int dataWidth, int dataHeight) {
- Rect rect = getScanByteRect(dataWidth, dataHeight);
- PlanarYUVLuminanceSource source = buildLuminanceSource(bytes, dataWidth, dataHeight, rect);
- return new BinaryBitmap(new HybridBinarizerFine(source));
- }
-
/***
* 旋转矩形 -90
* @param rect
* @return
*/
- private static Rect rotateRect(Rect rect) {
- Rect rect1 = new Rect();
+ public static RectF rotateUnCloseWise(RectF rect) {
+ RectF rect1 = new RectF();
rect1.left = rect.top;
rect1.top = rect.left;
rect1.right = rect.bottom;
@@ -43,6 +31,54 @@ private static Rect rotateRect(Rect rect) {
return rect1;
}
+ private static RectF adapterRect(RectF rect) {
+ RectF rect1 = new RectF();
+ rect1.top = rect.left;
+ rect1.right = rect.bottom;
+ rect1.bottom = rect.right;
+ rect1.left = rect.top;
+ return rect1;
+ }
+
+ public static RectF adapter90(RectF rect) {
+ rect = adapterRect(rect);
+ RectF rect1 = new RectF();
+ rect1.left = 1 - rect.right;
+ rect1.top = rect.top;
+ rect1.right = 1 - rect.left;
+ rect1.bottom = rect.bottom;
+ return rect1;
+ }
+
+ public static RectF adapter270(RectF rectF) {
+ rectF = adapterRect(rectF);
+ RectF rect1 = new RectF();
+ rect1.left = rectF.left;
+ rect1.top = 1 - rectF.bottom;
+ rect1.right = rectF.right;
+ rect1.bottom = 1 - rectF.top;
+ return rect1;
+ }
+
+ public static Rect copyRect(Rect rect) {
+ Rect result = new Rect();
+ result.left = rect.left;
+ result.top = rect.top;
+ result.right = rect.right;
+ result.bottom = rect.bottom;
+ return result;
+ }
+
+ public static RectF copyRect(RectF rectF) {
+ RectF result = new RectF();
+ result.left = rectF.left;
+ result.top = rectF.top;
+ result.right = rectF.right;
+ result.bottom = rectF.bottom;
+ return result;
+ }
+
+
/***
* 二维码坐标转换屏幕坐标
* @param point
@@ -67,13 +103,31 @@ public static PointF rotatePoint(ResultPoint[] point) {
float preY = Config.scanRect.getPreY();
float extraX = Config.scanRect.getExtraX();
float extraY = Config.scanRect.getExtraY();
- float aspeX = (preX + extraX) / (float) Config.scanRect.getDataY();
- float aspeY = (preY + extraY) / (float) Config.scanRect.getDataX();
- float relatPointX = preX + extraX / 2 - (Config.scanRect.getScanR().top + avargPoint.y) * aspeX;
- float relatPointY = (Config.scanRect.getScanR().left + avargPoint.x) * aspeY - extraY / 2;
- return new PointF(relatPointX, relatPointY);
+ float aspeX, aspeY;
+
+ if (Config.is90() || Config.is270()) {
+ aspeX = (preX + extraX) / (float) Config.scanRect.getDataX();
+ aspeY = (preY + extraY) / (float) Config.scanRect.getDataY();
+ } else {
+ aspeX = (preX + extraX) / (float) Config.scanRect.getDataY();
+ aspeY = (preY + extraY) / (float) Config.scanRect.getDataX();
+ }
+
+ float relatPointX, relatPointY;
+ if (Config.is90()) {
+ relatPointX = (Config.scanRect.getScanR().left + avargPoint.x) * aspeX - extraX / 2;
+ relatPointY = (Config.scanRect.getScanR().top + avargPoint.y) * aspeY - extraY / 2;
+ } else if (Config.is270()) {
+ relatPointX = preX - (Config.scanRect.getScanR().left + avargPoint.x) * aspeX + extraX / 2;
+ relatPointY = preY - (Config.scanRect.getScanR().top + avargPoint.y) * aspeY + extraY / 2;
+ } else {
+ relatPointX = preX + extraX / 2 - (Config.scanRect.getScanR().top + avargPoint.y) * aspeX;
+ relatPointY = (Config.scanRect.getScanR().left + avargPoint.x) * aspeY - extraY / 2;
+ }
+
+ return new PointF(relatPointX, relatPointY);
}
/***
@@ -100,11 +154,31 @@ public static PointF rotatePointR(ResultPoint[] point) {
float preY = Config.scanRect.getPreY();
float extraX = Config.scanRect.getExtraX();
float extraY = Config.scanRect.getExtraY();
- float aspeX = (preX + extraX) / (float) Config.scanRect.getDataY();
- float aspeY = (preY + extraY) / (float) Config.scanRect.getDataX();
- float relatPointX = (Config.scanRect.getScanRR().left + avargPoint.x) * aspeX - extraX / 2;
- float relatPointY = (Config.scanRect.getScanRR().top + avargPoint.y) * aspeY - extraY / 2;
+ float aspeX, aspeY;
+
+ if (Config.is90() || Config.is270()) {
+ aspeX = (preX + extraX) / (float) Config.scanRect.getDataX();
+ aspeY = (preY + extraY) / (float) Config.scanRect.getDataY();
+ } else {
+ aspeX = (preX + extraX) / (float) Config.scanRect.getDataY();
+ aspeY = (preY + extraY) / (float) Config.scanRect.getDataX();
+ }
+
+ float relatPointX, relatPointY;
+
+ if (Config.is90()) {
+ relatPointX = (Config.scanRect.getScanRR().top + avargPoint.y) * aspeX - extraX / 2;
+ relatPointY = (Config.scanRect.getScanRR().left - avargPoint.x +
+ Config.scanRect.getScanRR().width()) * aspeY - extraY / 2;
+ } else if (Config.is270()) {
+ relatPointX = preX - (Config.scanRect.getScanRR().top + avargPoint.y) * aspeX + extraX / 2;
+ relatPointY = preY - (Config.scanRect.getScanRR().left - avargPoint.x +
+ Config.scanRect.getScanRR().width()) * aspeY + extraY / 2;
+ } else {
+ relatPointX = (Config.scanRect.getScanRR().left + avargPoint.x) * aspeX - extraX / 2;
+ relatPointY = (Config.scanRect.getScanRR().top + avargPoint.y) * aspeY - extraY / 2;
+ }
return new PointF(relatPointX, relatPointY);
}
@@ -136,29 +210,34 @@ public static PlanarYUVLuminanceSource buildLuminanceSource(byte[] data, int wid
*/
public static Rect getScanByteRect(int dataWidth, int dataHeight) {
- if (Config.scanRect.getRect() == null)
- return new Rect(0, 0, 0, 0);
+ try {
+ if (Config.scanRect.getRect() == null)
+ return new Rect(0, 0, 0, 0);
- //默认采集的数据
- if (dataWidth > dataHeight) {
+ RectF cropRect = Config.scanRect.getRect();
- if (Config.scanRect.getScanR() == null) {
- Config.scanRect.setScanR(new Rect());
- Config.scanRect.getScanR().left = (int) (Config.scanRect.getRect().top * dataWidth);
- Config.scanRect.getScanR().top = (int) ((1f - Config.scanRect.getRect().right) * dataHeight);
- Config.scanRect.getScanR().right = (int) (Config.scanRect.getRect().bottom * dataWidth);
- Config.scanRect.getScanR().bottom = (int) ((1f - (Config.scanRect.getRect().left)) * dataHeight);
+ //默认采集的数据
+ if (dataWidth > dataHeight) {
+ if (Config.scanRect.getScanR() == null) {
+ Config.scanRect.setScanR(new Rect());
+ Config.scanRect.getScanR().left = (int) (cropRect.top * dataWidth);
+ Config.scanRect.getScanR().top = (int) ((1f - cropRect.right) * dataHeight);
+ Config.scanRect.getScanR().right = (int) (cropRect.bottom * dataWidth);
+ Config.scanRect.getScanR().bottom = (int) ((1f - (cropRect.left)) * dataHeight);
+ }
+ return Config.scanRect.getScanR();
+ } else {
+ if (Config.scanRect.getScanRR() == null) {
+ Config.scanRect.setScanRR(new Rect());
+ Config.scanRect.getScanRR().left = (int) (cropRect.left * dataWidth);
+ Config.scanRect.getScanRR().top = (int) (cropRect.top * dataHeight);
+ Config.scanRect.getScanRR().right = (int) (cropRect.right * dataWidth);
+ Config.scanRect.getScanRR().bottom = (int) (cropRect.bottom * dataHeight);
+ }
+ return Config.scanRect.getScanRR();
}
- return Config.scanRect.getScanR();
- } else {
- if (Config.scanRect.getScanRR() == null) {
- Config.scanRect.setScanRR(new Rect());
- Config.scanRect.getScanRR().left = (int) (Config.scanRect.getRect().left * dataWidth);
- Config.scanRect.getScanRR().top = (int) (Config.scanRect.getRect().top * dataHeight);
- Config.scanRect.getScanRR().right = (int) (Config.scanRect.getRect().right * dataWidth);
- Config.scanRect.getScanRR().bottom = (int) (Config.scanRect.getRect().bottom * dataHeight);
- }
- return Config.scanRect.getScanRR();
+ } catch (Exception e) {
+ return new Rect(0, 0, 0, 0);
}
}
diff --git a/module_camera/src/main/java/com/ailiwean/core/helper/ZoomHelper.kt b/module_camera/src/main/java/com/ailiwean/core/helper/ZoomHelper.kt
index 148e706..faf2d38 100644
--- a/module_camera/src/main/java/com/ailiwean/core/helper/ZoomHelper.kt
+++ b/module_camera/src/main/java/com/ailiwean/core/helper/ZoomHelper.kt
@@ -18,6 +18,7 @@ object ZoomHelper {
@SuppressLint("ClickableViewAccessibility")
fun toAutoZoom(view: BaseCameraView) {
+ Config.currentZoom = 0f
view.setOnTouchListener(object : OnGestureListener(view.context) {
override fun onStepFingerChange(total: Float, offset: Float) {
diff --git a/module_camera/src/main/java/com/ailiwean/core/view/FreeZxingView.kt b/module_camera/src/main/java/com/ailiwean/core/view/FreeZxingView.kt
index b26f42f..3626ff3 100644
--- a/module_camera/src/main/java/com/ailiwean/core/view/FreeZxingView.kt
+++ b/module_camera/src/main/java/com/ailiwean/core/view/FreeZxingView.kt
@@ -1,6 +1,5 @@
package com.ailiwean.core.view
-import android.app.Activity
import android.content.ContentUris
import android.content.Context
import android.database.Cursor
@@ -12,7 +11,6 @@ import android.net.Uri
import android.os.*
import android.provider.MediaStore
import android.util.AttributeSet
-import android.util.Log
import android.view.LayoutInflater
import android.view.View
import com.ailiwean.core.Config.*
diff --git a/module_camera/src/main/java/com/ailiwean/core/zxing/CustomMultiFormatReader.java b/module_camera/src/main/java/com/ailiwean/core/zxing/CustomMultiFormatReader.java
index 4d0af06..83cb5e5 100644
--- a/module_camera/src/main/java/com/ailiwean/core/zxing/CustomMultiFormatReader.java
+++ b/module_camera/src/main/java/com/ailiwean/core/zxing/CustomMultiFormatReader.java
@@ -1,7 +1,5 @@
package com.ailiwean.core.zxing;
-import android.util.Log;
-
import com.ailiwean.core.Config;
import com.ailiwean.core.zxing.core.BarcodeFormat;
import com.ailiwean.core.zxing.core.BinaryBitmap;
@@ -11,7 +9,6 @@
import com.ailiwean.core.zxing.core.ReaderException;
import com.ailiwean.core.zxing.core.Result;
import com.ailiwean.core.zxing.core.aztec.AztecReader;
-import com.ailiwean.core.zxing.core.common.HybridBinarizer;
import com.ailiwean.core.zxing.core.common.HybridBinarizerCrude;
import com.ailiwean.core.zxing.core.common.HybridBinarizerFine;
import com.ailiwean.core.zxing.core.datamatrix.DataMatrixReader;
@@ -21,7 +18,6 @@
import com.ailiwean.core.zxing.core.pdf417.PDF417Reader;
import com.ailiwean.core.zxing.core.qrcode.QRCodeReader;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
@@ -164,10 +160,14 @@ private Result decodeInternal(BinaryBitmap image) {
if (readers != null) {
for (Reader reader : readers) {
try {
- if (!(image.getBinarizer() instanceof HybridBinarizerFine) &&
- reader instanceof OneDReader)
- continue;
- return reader.decode(image, hints);
+
+ if (!(reader instanceof OneDReader))
+ return reader.decode(image, hints);
+
+ if (image.getBinarizer() instanceof HybridBinarizerFine ||
+ image.getBinarizer() instanceof HybridBinarizerCrude)
+ return reader.decode(image, hints);
+
} catch (ReaderException re) {
// continue
} catch (Exception ignored) {
diff --git a/module_camera/src/main/java/com/ailiwean/core/zxing/ScanRect.java b/module_camera/src/main/java/com/ailiwean/core/zxing/ScanRect.java
index 8d83184..42d46b1 100644
--- a/module_camera/src/main/java/com/ailiwean/core/zxing/ScanRect.java
+++ b/module_camera/src/main/java/com/ailiwean/core/zxing/ScanRect.java
@@ -3,6 +3,9 @@
import android.graphics.Rect;
import android.graphics.RectF;
+import com.ailiwean.core.Config;
+import com.ailiwean.core.helper.ScanHelper;
+
/**
* @Package: com.ailiwean.core.zxing
* @ClassName: ScanRect
@@ -31,8 +34,20 @@ public class ScanRect {
* @param r
*/
public void setRect(RectF r) {
+ //默认适配的是90度,也就是手机垂直方向拿着
+ //朝左倾斜90
+ if (Config.is90() && r != null) {
+ r = ScanHelper.adapter90(r);
+ }
+ //朝右倾斜90
+ if (Config.is270() && r != null) {
+ r = ScanHelper.adapter270(r);
+ }
+
this.r = r;
+
scanR = null;
+ scanRR = null;
}
/***
diff --git a/module_camera/src/main/java/com/ailiwean/core/zxing/core/PlanarYUVLuminanceSource.java b/module_camera/src/main/java/com/ailiwean/core/zxing/core/PlanarYUVLuminanceSource.java
index 89f8f33..060c63c 100644
--- a/module_camera/src/main/java/com/ailiwean/core/zxing/core/PlanarYUVLuminanceSource.java
+++ b/module_camera/src/main/java/com/ailiwean/core/zxing/core/PlanarYUVLuminanceSource.java
@@ -16,9 +16,6 @@
package com.ailiwean.core.zxing.core;
-import android.util.Log;
-
-import com.ailiwean.core.zxing.core.common.GlobalHistogramBinarizer;
import com.ailiwean.core.zxing.core.common.HybridBinarizer;
import com.ailiwean.core.zxing.core.common.HybridBinarizerCrude;
import com.ailiwean.core.zxing.core.common.HybridBinarizerFine;
diff --git a/module_camera/src/main/java/com/ailiwean/core/zxing/core/common/HybridBinarizerCrude.java b/module_camera/src/main/java/com/ailiwean/core/zxing/core/common/HybridBinarizerCrude.java
index d0f57c5..fbbf09e 100644
--- a/module_camera/src/main/java/com/ailiwean/core/zxing/core/common/HybridBinarizerCrude.java
+++ b/module_camera/src/main/java/com/ailiwean/core/zxing/core/common/HybridBinarizerCrude.java
@@ -90,11 +90,10 @@ protected BitMatrix creatBitMatrix() throws NotFoundException {
BitMatrix newMatrix = new BitMatrix(width, height);
calculateThresholdForBlock(luminances, subWidth, subHeight, width, height, blackPoints, newMatrix);
matrix = newMatrix;
+ return matrix;
} else {
- // If the image is too small, fall back to the global histogram approach.
- matrix = super.getBlackMatrix();
+ return null;
}
- return matrix;
}
@Override
diff --git a/module_camera/src/main/java/com/ailiwean/core/zxing/core/oned/OneDReader.java b/module_camera/src/main/java/com/ailiwean/core/zxing/core/oned/OneDReader.java
index 2fbbed4..85fea07 100644
--- a/module_camera/src/main/java/com/ailiwean/core/zxing/core/oned/OneDReader.java
+++ b/module_camera/src/main/java/com/ailiwean/core/zxing/core/oned/OneDReader.java
@@ -182,7 +182,7 @@ private Result doDecode(BinaryBitmap image,
hitCount = 0;
}
lastResult = currentResult;
- if (hitCount >= Math.min(15, image.getHeight() >> 6))
+ if (hitCount > 2)
return lastResult;
}
diff --git a/module_camera/src/main/java/com/google/android/cameraview/BaseCameraView.kt b/module_camera/src/main/java/com/google/android/cameraview/BaseCameraView.kt
index 32676b9..f4b00cf 100644
--- a/module_camera/src/main/java/com/google/android/cameraview/BaseCameraView.kt
+++ b/module_camera/src/main/java/com/google/android/cameraview/BaseCameraView.kt
@@ -8,7 +8,6 @@ import android.os.Build
import android.os.Handler
import android.os.HandlerThread
import android.util.AttributeSet
-import androidx.annotation.FloatRange
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
@@ -173,6 +172,7 @@ abstract class BaseCameraView @JvmOverloads constructor(context: Context, attrib
}
protected fun onCameraPause() {
+ closeCameraBefore()
closeCamera()
isShoudCreateOpen = false
}
diff --git a/module_camera/src/main/java/com/google/android/cameraview/CameraView.java b/module_camera/src/main/java/com/google/android/cameraview/CameraView.java
index be04619..c952ae6 100644
--- a/module_camera/src/main/java/com/google/android/cameraview/CameraView.java
+++ b/module_camera/src/main/java/com/google/android/cameraview/CameraView.java
@@ -18,6 +18,7 @@
import android.app.Activity;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.PointF;
import android.graphics.RectF;
@@ -27,6 +28,7 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
@@ -104,7 +106,7 @@ public class CameraView extends FrameLayout {
private boolean mAdjustViewBounds;
- private final DisplayOrientationDetector mDisplayOrientationDetector;
+ protected final DisplayOrientationDetector mDisplayOrientationDetector;
public CameraView(Context context) {
this(context, null);
@@ -129,6 +131,7 @@ public CameraView(Context context, AttributeSet attrs, int defStyleAttr) {
} else {
mImpl = new Camera2(mCallbacks, context);
}
+// mImpl = new Camera1(mCallbacks);
// Attributes
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CameraView, defStyleAttr,
R.style.Widget_CameraView);
@@ -175,8 +178,6 @@ protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
- RectF r = new RectF();
-
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (isInEditMode()) {
@@ -190,7 +191,9 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = getMeasuredWidth();
int height = getMeasuredHeight();
AspectRatio ratio = getAspectRatio();
- if (mDisplayOrientationDetector.getLastKnownDisplayOrientation() % 180 == 0) {
+ if (getContext().getResources().getConfiguration().orientation
+ == Configuration.ORIENTATION_PORTRAIT) {
+ Config.displayOrientation = 0;
ratio = ratio.inverse();
}
assert ratio != null;
@@ -220,6 +223,8 @@ protected void defineScanParseRect(View view) {
if (view == null)
return;
+ RectF r = new RectF();
+
Config.scanRect.setScanR(null);
Config.scanRect.setScanRR(null);
Config.scanRect.setRect(null);
@@ -228,8 +233,13 @@ protected void defineScanParseRect(View view) {
int oriWidth = getMeasuredWidth();
AspectRatio ratio = getAspectRatio();
- if (mDisplayOrientationDetector.getLastKnownDisplayOrientation() % 180 == 0) {
+ if (getContext().getResources().getConfiguration().orientation
+ == Configuration.ORIENTATION_PORTRAIT) {
+ Config.displayOrientation = 0;
ratio = ratio.inverse();
+ } else {
+ if (mDisplayOrientationDetector.getLastKnownDisplayOrientation() != 0)
+ Config.displayOrientation = mDisplayOrientationDetector.getLastKnownDisplayOrientation();
}
if (ratio == null)
@@ -347,6 +357,10 @@ public void openCameraBefore() {
initPreView();
}
+ public void closeCameraBefore() {
+ }
+
+
/**
* Open a camera device and start showing camera preview. This is typically called from
*/
diff --git a/module_camera/src/main/java/com/google/android/cameraview/DisplayOrientationDetector.java b/module_camera/src/main/java/com/google/android/cameraview/DisplayOrientationDetector.java
index 14f5168..c989890 100644
--- a/module_camera/src/main/java/com/google/android/cameraview/DisplayOrientationDetector.java
+++ b/module_camera/src/main/java/com/google/android/cameraview/DisplayOrientationDetector.java
@@ -17,6 +17,7 @@
package com.google.android.cameraview;
import android.content.Context;
+import android.util.Log;
import android.util.SparseIntArray;
import android.view.Display;
import android.view.OrientationEventListener;
@@ -30,7 +31,9 @@ abstract class DisplayOrientationDetector {
private final OrientationEventListener mOrientationEventListener;
- /** Mapping from Surface.Rotation_n to degrees. */
+ /**
+ * Mapping from Surface.Rotation_n to degrees.
+ */
static final SparseIntArray DISPLAY_ORIENTATIONS = new SparseIntArray();
static {
@@ -86,11 +89,27 @@ void dispatchOnDisplayOrientationChanged(int displayOrientation) {
onDisplayOrientationChanged(displayOrientation);
}
+ public boolean isVertical() {
+ return mLastKnownDisplayOrientation % 180 != 0;
+ }
+
+ public boolean isHorizontal() {
+ return mLastKnownDisplayOrientation % 180 == 0;
+ }
+
/**
* Called when display orientation is changed.
*
* @param displayOrientation One of 0, 90, 180, and 270.
*/
+
+
public abstract void onDisplayOrientationChanged(int displayOrientation);
+ private boolean isVisiable = true;
+
+ public void isVisiable(boolean isVisiable) {
+ this.isVisiable = isVisiable;
+ }
+
}
diff --git a/module_camera/src/main/res/layout-land/nbzxing_default_floorview.xml b/module_camera/src/main/res/layout-land/nbzxing_default_floorview.xml
new file mode 100644
index 0000000..9ae90ce
--- /dev/null
+++ b/module_camera/src/main/res/layout-land/nbzxing_default_floorview.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/module_camera/src/main/res/layout/nbzxing_default_floorview.xml b/module_camera/src/main/res/layout/nbzxing_default_floorview.xml
index 889bf51..484dc1e 100644
--- a/module_camera/src/main/res/layout/nbzxing_default_floorview.xml
+++ b/module_camera/src/main/res/layout/nbzxing_default_floorview.xml
@@ -19,13 +19,6 @@
android:layout_height="400dp"
android:layout_marginTop="70dp" />
-
-
+
+
\ No newline at end of file
diff --git a/module_grayscale/src/main/java/com/ailiwean/module_grayscale/OverBrightScale.java b/module_grayscale/src/main/java/com/ailiwean/module_grayscale/OverBrightScale.java
index 8ad4640..548be6a 100644
--- a/module_grayscale/src/main/java/com/ailiwean/module_grayscale/OverBrightScale.java
+++ b/module_grayscale/src/main/java/com/ailiwean/module_grayscale/OverBrightScale.java
@@ -1,7 +1,6 @@
package com.ailiwean.module_grayscale;
import android.graphics.Rect;
-import android.util.Log;
/**
* @Package: com.ailiwean.module_grayscale
diff --git a/module_grayscale/src/main/java/com/ailiwean/module_grayscale/OverDarkScale.java b/module_grayscale/src/main/java/com/ailiwean/module_grayscale/OverDarkScale.java
index 4c7d6c0..4c4b63c 100644
--- a/module_grayscale/src/main/java/com/ailiwean/module_grayscale/OverDarkScale.java
+++ b/module_grayscale/src/main/java/com/ailiwean/module_grayscale/OverDarkScale.java
@@ -1,7 +1,6 @@
package com.ailiwean.module_grayscale;
import android.graphics.Rect;
-import android.util.Log;
/**
* @Package: com.ailiwean.module_grayscale