支持识别反色码(#66,#69,#72)

This commit is contained in:
jenly1314
2019-12-27 18:11:44 +08:00
parent 0a136a686b
commit 42a5cc926a
5 changed files with 83 additions and 28 deletions

View File

@@ -25,9 +25,12 @@ import com.king.zxing.camera.CameraManager;
import androidx.annotation.LayoutRes; import androidx.annotation.LayoutRes;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
/**
public class CaptureActivity extends Activity implements OnCaptureCallback{ * @author <a href="mailto:jenly1314@gmail.com">Jenly</a>
*/
public class CaptureActivity extends AppCompatActivity implements OnCaptureCallback{
public static final String KEY_RESULT = Intents.Scan.RESULT; public static final String KEY_RESULT = Intents.Scan.RESULT;
@@ -114,9 +117,10 @@ public class CaptureActivity extends Activity implements OnCaptureCallback{
} }
/** /**
* Get {@link CameraManager} * Get {@link CameraManager} use {@link #getCaptureHelper()#getCameraManager()}
* @return {@link #mCaptureHelper#getCameraManager()} * @return {@link #mCaptureHelper#getCameraManager()}
*/ */
@Deprecated
public CameraManager getCameraManager(){ public CameraManager getCameraManager(){
return mCaptureHelper.getCameraManager(); return mCaptureHelper.getCameraManager();
} }

View File

@@ -127,9 +127,10 @@ public class CaptureFragment extends Fragment implements OnCaptureCallback {
} }
/** /**
* Get {@link CameraManager} * Get {@link CameraManager} use {@link #getCaptureHelper()#getCameraManager()}
* @return {@link #mCaptureHelper#getCameraManager()} * @return {@link #mCaptureHelper#getCameraManager()}
*/ */
@Deprecated
public CameraManager getCameraManager(){ public CameraManager getCameraManager(){
return mCaptureHelper.getCameraManager(); return mCaptureHelper.getCameraManager();
} }

View File

@@ -49,6 +49,11 @@ public class CaptureHandler extends Handler implements ResultPointCallback {
*/ */
private boolean isSupportAutoZoom; private boolean isSupportAutoZoom;
/**
*
*/
private boolean isSupportLuminanceInvert;
private enum State { private enum State {
PREVIEW, PREVIEW,
@@ -198,4 +203,12 @@ public class CaptureHandler extends Handler implements ResultPointCallback {
public void setSupportAutoZoom(boolean supportAutoZoom) { public void setSupportAutoZoom(boolean supportAutoZoom) {
isSupportAutoZoom = supportAutoZoom; isSupportAutoZoom = supportAutoZoom;
} }
public boolean isSupportLuminanceInvert() {
return isSupportLuminanceInvert;
}
public void setSupportLuminanceInvert(boolean supportLuminanceInvert) {
isSupportLuminanceInvert = supportLuminanceInvert;
}
} }

View File

@@ -87,6 +87,11 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
*/ */
private boolean isSupportAutoZoom = true; private boolean isSupportAutoZoom = true;
/**
* 是否支持识别颜色反转色的码,黑白颜色反转,默认不支持
*/
private boolean isSupportLuminanceInvert = false;
/** /**
* 是否支持连扫,默认不支持 * 是否支持连扫,默认不支持
*/ */
@@ -334,6 +339,7 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
captureHandler.setSupportVerticalCode(isSupportVerticalCode); captureHandler.setSupportVerticalCode(isSupportVerticalCode);
captureHandler.setReturnBitmap(isReturnBitmap); captureHandler.setReturnBitmap(isReturnBitmap);
captureHandler.setSupportAutoZoom(isSupportAutoZoom); captureHandler.setSupportAutoZoom(isSupportAutoZoom);
captureHandler.setSupportLuminanceInvert(isSupportLuminanceInvert);
} }
} catch (IOException ioe) { } catch (IOException ioe) {
Log.w(TAG, ioe); Log.w(TAG, ioe);
@@ -718,9 +724,22 @@ public class CaptureHelper implements CaptureLifecycle,CaptureTouchEvent,Capture
return this; 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 * @return
*/ */
public CaptureHelper fullScreenScan(boolean fullScreenScan) { public CaptureHelper fullScreenScan(boolean fullScreenScan) {

View File

@@ -102,32 +102,51 @@ final class DecodeHandler extends Handler {
PlanarYUVLuminanceSource source = buildPlanarYUVLuminanceSource(data,width,height,isScreenPortrait); PlanarYUVLuminanceSource source = buildPlanarYUVLuminanceSource(data,width,height,isScreenPortrait);
if (source != null) { if (source != null) {
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
boolean isReDecode;
try { try {
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
rawResult = multiFormatReader.decodeWithState(bitmap); rawResult = multiFormatReader.decodeWithState(bitmap);
isReDecode = false;
} catch (Exception e) { } 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{ try{
rawResult = multiFormatReader.decodeWithState(bitmap1); BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));
}catch (Exception e1){ rawResult = multiFormatReader.decodeWithState(bitmap);
if(isSupportVerticalCode){ isReDecode = false;
}catch (Exception e){
isReDecode = true;
}
}
if(isReDecode && isSupportVerticalCode){
source = buildPlanarYUVLuminanceSource(data,width,height,!isScreenPortrait); source = buildPlanarYUVLuminanceSource(data,width,height,!isScreenPortrait);
if(source!=null){ if(source!=null){
BinaryBitmap bitmap2 = new BinaryBitmap(new HybridBinarizer(source));
try{ try{
rawResult = multiFormatReader.decodeWithState(bitmap2); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
}catch (Exception e2){ rawResult = multiFormatReader.decodeWithState(bitmap);
}catch (Exception e){
} }
} }
} }
}
} finally {
multiFormatReader.reset(); multiFormatReader.reset();
} }
}
if (rawResult != null) { if (rawResult != null) {
// Don't log the barcode contents for security. // Don't log the barcode contents for security.
@@ -157,7 +176,6 @@ final class DecodeHandler extends Handler {
} }
} }
} }
if (handler != null) { if (handler != null) {
@@ -211,7 +229,7 @@ final class DecodeHandler extends Handler {
return true; return true;
} }
if(length<width/5){ if(length < width/ 5){
Camera camera = cameraManager.getOpenCamera().getCamera(); Camera camera = cameraManager.getOpenCamera().getCamera();
if(camera!=null){ if(camera!=null){