From 56f3fed338cc6946baa988e04c93f42ebf6411c0 Mon Sep 17 00:00:00 2001 From: jenly1314 Date: Fri, 27 Dec 2019 16:41:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=AF=86=E5=88=AB=E5=8F=8D?= =?UTF-8?q?=E8=89=B2=E7=A0=81=EF=BC=88#66,#72=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/king/zxing/app/CustomActivity.java | 1 + .../king/zxing/app/CustomCaptureActivity.java | 3 +- .../java/com/king/zxing/CaptureActivity.java | 7 ++- .../java/com/king/zxing/CaptureFragment.java | 3 +- .../java/com/king/zxing/CaptureHandler.java | 13 ++++ .../java/com/king/zxing/CaptureHelper.java | 21 ++++++- .../java/com/king/zxing/DecodeHandler.java | 60 ++++++++++++------- 7 files changed, 81 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/king/zxing/app/CustomActivity.java b/app/src/main/java/com/king/zxing/app/CustomActivity.java index 7b4209f..d224f69 100644 --- a/app/src/main/java/com/king/zxing/app/CustomActivity.java +++ b/app/src/main/java/com/king/zxing/app/CustomActivity.java @@ -64,6 +64,7 @@ public class CustomActivity extends AppCompatActivity implements OnCaptureCallba mCaptureHelper.vibrate(true) .fullScreenScan(true)//全屏扫码 .supportVerticalCode(true)//支持扫垂直条码,建议有此需求时才使用。 + .supportLuminanceInvert(true)//是否支持识别反色码(黑白反色的码),增加识别率 .continuousScan(isContinuousScan); } diff --git a/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java b/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java index 382c891..a8b3c74 100644 --- a/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java +++ b/app/src/main/java/com/king/zxing/app/CustomCaptureActivity.java @@ -58,7 +58,8 @@ public class CustomCaptureActivity extends CaptureActivity { .frontLightMode(FrontLightMode.AUTO)//设置闪光灯模式 .tooDarkLux(45f)//设置光线太暗时,自动触发开启闪光灯的照度值 .brightEnoughLux(100f)//设置光线足够明亮时,自动触发关闭闪光灯的照度值 - .continuousScan(isContinuousScan);//是否连扫 + .continuousScan(isContinuousScan)//是否连扫 + .supportLuminanceInvert(true);//是否支持识别反色码(黑白反色的码),增加识别率 } diff --git a/lib/src/main/java/com/king/zxing/CaptureActivity.java b/lib/src/main/java/com/king/zxing/CaptureActivity.java index c361870..518a02b 100644 --- a/lib/src/main/java/com/king/zxing/CaptureActivity.java +++ b/lib/src/main/java/com/king/zxing/CaptureActivity.java @@ -15,10 +15,10 @@ */ package com.king.zxing; -import android.app.Activity; import android.os.Bundle; import android.support.annotation.LayoutRes; import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; @@ -26,7 +26,7 @@ import android.view.View; import com.king.zxing.camera.CameraManager; -public class CaptureActivity extends Activity implements OnCaptureCallback{ +public class CaptureActivity extends AppCompatActivity implements OnCaptureCallback{ public static final String KEY_RESULT = Intents.Scan.RESULT; @@ -113,9 +113,10 @@ public class CaptureActivity extends Activity implements OnCaptureCallback{ } /** - * 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/CaptureFragment.java b/lib/src/main/java/com/king/zxing/CaptureFragment.java index 9b9d09f..495add1 100644 --- a/lib/src/main/java/com/king/zxing/CaptureFragment.java +++ b/lib/src/main/java/com/king/zxing/CaptureFragment.java @@ -126,9 +126,10 @@ public class CaptureFragment extends Fragment implements OnCaptureCallback { } /** - * 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 072565a..da7818c 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 class CaptureHandler extends Handler implements ResultPointCallback { public void setSupportAutoZoom(boolean supportAutoZoom) { isSupportAutoZoom = supportAutoZoom; } + + public boolean isSupportLuminanceInvert() { + return isSupportLuminanceInvert; + } + + public void setSupportLuminanceInvert(boolean supportLuminanceInvert) { + isSupportLuminanceInvert = supportLuminanceInvert; + } } diff --git a/lib/src/main/java/com/king/zxing/CaptureHelper.java b/lib/src/main/java/com/king/zxing/CaptureHelper.java index 2d6b772..bce7c30 100644 --- a/lib/src/main/java/com/king/zxing/CaptureHelper.java +++ b/lib/src/main/java/com/king/zxing/CaptureHelper.java @@ -86,6 +86,11 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture */ private boolean isSupportAutoZoom = true; + /** + * 是否支持识别颜色反转色的码,黑白颜色反转,默认不支持 + */ + private boolean isSupportLuminanceInvert = false; + /** * 是否支持连扫,默认不支持 */ @@ -333,6 +338,7 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture captureHandler.setSupportVerticalCode(isSupportVerticalCode); captureHandler.setReturnBitmap(isReturnBitmap); captureHandler.setSupportAutoZoom(isSupportAutoZoom); + captureHandler.setSupportLuminanceInvert(isSupportLuminanceInvert); } } catch (IOException ioe) { Log.w(TAG, ioe); @@ -717,9 +723,22 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture 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 @@ final class DecodeHandler extends Handler { PlanarYUVLuminanceSource source = buildPlanarYUVLuminanceSource(data,width,height,isScreenPortrait); if (source != null) { - BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); - try { - rawResult = multiFormatReader.decodeWithState(bitmap); - } catch (Exception e) { - BinaryBitmap bitmap1 = new BinaryBitmap(new GlobalHistogramBinarizer(source)); - 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){ - } - } + boolean isReDecode; + try { + BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); + rawResult = multiFormatReader.decodeWithState(bitmap); + isReDecode = false; + } catch (Exception e) { + 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{ + 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 @@ final class DecodeHandler extends Handler { } } - } if (handler != null) { @@ -211,7 +229,7 @@ final class DecodeHandler extends Handler { return true; } - if(length