diff --git a/lib/src/main/java/com/king/zxing/CaptureActivity.java b/lib/src/main/java/com/king/zxing/CaptureActivity.java
index 04400af..e55eafe 100644
--- a/lib/src/main/java/com/king/zxing/CaptureActivity.java
+++ b/lib/src/main/java/com/king/zxing/CaptureActivity.java
@@ -25,9 +25,12 @@
import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
-
-public class CaptureActivity extends Activity implements OnCaptureCallback{
+/**
+ * @author Jenly
+ */
+public class CaptureActivity extends AppCompatActivity implements OnCaptureCallback{
public static final String KEY_RESULT = Intents.Scan.RESULT;
@@ -114,9 +117,10 @@ public CaptureHelper getCaptureHelper(){
}
/**
- * Get {@link CameraManager}
+ * Get {@link CameraManager} use {@link #getCaptureHelper()#getCameraManager()}
* @return {@link #mCaptureHelper#getCameraManager()}
*/
+ @Deprecated
public CameraManager getCameraManager(){
return mCaptureHelper.getCameraManager();
}
@@ -154,4 +158,4 @@ public boolean onTouchEvent(MotionEvent event) {
public boolean onResultCallback(String result) {
return false;
}
-}
\ No newline at end of file
+}
diff --git a/lib/src/main/java/com/king/zxing/CaptureFragment.java b/lib/src/main/java/com/king/zxing/CaptureFragment.java
index 3fdd75f..7d3f31e 100644
--- a/lib/src/main/java/com/king/zxing/CaptureFragment.java
+++ b/lib/src/main/java/com/king/zxing/CaptureFragment.java
@@ -45,7 +45,7 @@ public class CaptureFragment extends Fragment implements OnCaptureCallback {
public static CaptureFragment newInstance() {
Bundle args = new Bundle();
-
+
CaptureFragment fragment = new CaptureFragment();
fragment.setArguments(args);
return fragment;
@@ -127,9 +127,10 @@ public CaptureHelper getCaptureHelper(){
}
/**
- * Get {@link CameraManager}
+ * Get {@link CameraManager} use {@link #getCaptureHelper()#getCameraManager()}
* @return {@link #mCaptureHelper#getCameraManager()}
*/
+ @Deprecated
public CameraManager getCameraManager(){
return mCaptureHelper.getCameraManager();
}
diff --git a/lib/src/main/java/com/king/zxing/CaptureHandler.java b/lib/src/main/java/com/king/zxing/CaptureHandler.java
index ee7424c..8a142d0 100644
--- a/lib/src/main/java/com/king/zxing/CaptureHandler.java
+++ b/lib/src/main/java/com/king/zxing/CaptureHandler.java
@@ -49,6 +49,11 @@ public class CaptureHandler extends Handler implements ResultPointCallback {
*/
private boolean isSupportAutoZoom;
+ /**
+ *
+ */
+ private boolean isSupportLuminanceInvert;
+
private enum State {
PREVIEW,
@@ -198,4 +203,12 @@ public boolean isSupportAutoZoom() {
public void setSupportAutoZoom(boolean supportAutoZoom) {
isSupportAutoZoom = supportAutoZoom;
}
+
+ public boolean isSupportLuminanceInvert() {
+ return isSupportLuminanceInvert;
+ }
+
+ public void setSupportLuminanceInvert(boolean supportLuminanceInvert) {
+ isSupportLuminanceInvert = supportLuminanceInvert;
+ }
}
\ No newline at end of file
diff --git a/lib/src/main/java/com/king/zxing/CaptureHelper.java b/lib/src/main/java/com/king/zxing/CaptureHelper.java
index 5a81c53..8831919 100644
--- a/lib/src/main/java/com/king/zxing/CaptureHelper.java
+++ b/lib/src/main/java/com/king/zxing/CaptureHelper.java
@@ -87,6 +87,11 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
*/
private boolean isSupportAutoZoom = true;
+ /**
+ * 是否支持识别颜色反转色的码,黑白颜色反转,默认不支持
+ */
+ private boolean isSupportLuminanceInvert = false;
+
/**
* 是否支持连扫,默认不支持
*/
@@ -334,6 +339,7 @@ private void initCamera(SurfaceHolder surfaceHolder) {
captureHandler.setSupportVerticalCode(isSupportVerticalCode);
captureHandler.setReturnBitmap(isReturnBitmap);
captureHandler.setSupportAutoZoom(isSupportAutoZoom);
+ captureHandler.setSupportLuminanceInvert(isSupportLuminanceInvert);
}
} catch (IOException ioe) {
Log.w(TAG, ioe);
@@ -718,9 +724,22 @@ public CaptureHelper supportAutoZoom(boolean supportAutoZoom) {
return this;
}
+ /**
+ * 是否支持识别反色码,黑白颜色反转
+ * @param supportLuminanceInvert 默认为false,当返回true时表示支持,会增加识别率,但相应的也会增加性能消耗。
+ * @return
+ */
+ public CaptureHelper supportLuminanceInvert(boolean supportLuminanceInvert) {
+ isSupportLuminanceInvert = supportLuminanceInvert;
+ if(captureHandler!=null){
+ captureHandler.setSupportLuminanceInvert(isSupportLuminanceInvert);
+ }
+ return this;
+ }
+
/**
* 设置是否支持全屏扫码识别
- * @param fullScreenScan
+ * @param fullScreenScan 默认为false
* @return
*/
public CaptureHelper fullScreenScan(boolean fullScreenScan) {
diff --git a/lib/src/main/java/com/king/zxing/DecodeHandler.java b/lib/src/main/java/com/king/zxing/DecodeHandler.java
index fbe5341..f0fd063 100644
--- a/lib/src/main/java/com/king/zxing/DecodeHandler.java
+++ b/lib/src/main/java/com/king/zxing/DecodeHandler.java
@@ -102,31 +102,50 @@ private void decode(byte[] data, int width, int height,boolean isScreenPortrait,
PlanarYUVLuminanceSource source = buildPlanarYUVLuminanceSource(data,width,height,isScreenPortrait);
if (source != null) {
- BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+
+ boolean isReDecode;
try {
+ BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
rawResult = multiFormatReader.decodeWithState(bitmap);
+ isReDecode = false;
} catch (Exception e) {
- BinaryBitmap bitmap1 = new BinaryBitmap(new GlobalHistogramBinarizer(source));
+ isReDecode = true;
+ }
+
+ if(isReDecode && handler.isSupportLuminanceInvert()){
+ try {
+ BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source.invert()));
+ rawResult = multiFormatReader.decodeWithState(bitmap);
+ isReDecode = false;
+ } catch (Exception e) {
+ isReDecode = true;
+ }
+ }
+
+ if(isReDecode){
try{
- rawResult = multiFormatReader.decodeWithState(bitmap1);
- }catch (Exception e1){
- if(isSupportVerticalCode){
- source = buildPlanarYUVLuminanceSource(data,width,height,!isScreenPortrait);
- if(source!=null){
- BinaryBitmap bitmap2 = new BinaryBitmap(new HybridBinarizer(source));
- try{
- rawResult = multiFormatReader.decodeWithState(bitmap2);
- }catch (Exception e2){
-
- }
- }
+ BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));
+ rawResult = multiFormatReader.decodeWithState(bitmap);
+ isReDecode = false;
+ }catch (Exception e){
+ isReDecode = true;
+ }
+ }
+
+ if(isReDecode && isSupportVerticalCode){
+ source = buildPlanarYUVLuminanceSource(data,width,height,!isScreenPortrait);
+ if(source!=null){
+ try{
+ BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+ rawResult = multiFormatReader.decodeWithState(bitmap);
+ }catch (Exception e){
}
}
- } finally {
- multiFormatReader.reset();
}
+
+ multiFormatReader.reset();
}
if (rawResult != null) {
@@ -157,7 +176,6 @@ private void decode(byte[] data, int width, int height,boolean isScreenPortrait,
}
}
-
}
if (handler != null) {
@@ -211,7 +229,7 @@ private boolean handleAutoZoom(int length,int width){
return true;
}
- if(length