Java 没有结果的条形码阅读器
我有一个简单的android应用程序,只有一个CameraPreview和一个按钮。 它应该拍摄一张照片,将其转换成二进制位图,然后解码,这样我就可以读取条形码。我正在使用java中的ZXing库版本2.3和Android Studio版本0.5.1 我甚至不知道我是否用正确的方法拍摄位图。但是在最后,当我尝试在这一点上解码位图时,我得到了一个NotFoundExceptionJava 没有结果的条形码阅读器,java,android,bitmap,zxing,Java,Android,Bitmap,Zxing,我有一个简单的android应用程序,只有一个CameraPreview和一个按钮。 它应该拍摄一张照片,将其转换成二进制位图,然后解码,这样我就可以读取条形码。我正在使用java中的ZXing库版本2.3和Android Studio版本0.5.1 我甚至不知道我是否用正确的方法拍摄位图。但是在最后,当我尝试在这一点上解码位图时,我得到了一个NotFoundException result = barcodeReader.decode(bMap); 这是我的主要活动。课程: NotFound
result = barcodeReader.decode(bMap);
这是我的主要活动。课程:
NotFoundException可能意味着activity_main.xml不存在,或者其中不存在FrameLayout camera_预览。如果确定它们都存在,可以尝试清理和重建项目。NotFoundException将在result=barcodeReader.decodebMap点抛出。所以其他一切都很好。清理和重建也没能解决问题。我以前证明过这一点。但我认为我的图像对于图书馆来说足够小了。我用bmp=Bitmap.createScaledBitmapmBitmap,mBitmap.getWidth/5,mBitmap.getHeight/5测试它,true;所以我得到了高度=489,宽度=652的大小。这个不够小吗?是的,对不起。我是个白痴!你就在问题的那一行给我。不确定。我没有用过ZXing,但我觉得它的尺寸不错。你能把位图放到ImageView中,确保你至少得到了一张好的图片吗?
public class MainActivity extends Activity {
private Camera mCamera;
private CameraPreview mPreview;
private Bitmap mBitmap;
/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open(); // attempt to get a Camera instance
}
catch (Exception e){
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
load();
}
private void load()
{
// Create instance of Camera
mCamera = getCameraInstance();
mCamera.setDisplayOrientation(90);
// get Camera parameters
Camera.Parameters params = mCamera.getParameters();
// set the focus mode
params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
// set Camera parameters
mCamera.setParameters(params);
// Create our Preview view and set it as the content of our activity
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
public void takeSnapshot(View view)
{
Camera.AutoFocusCallback focusCallback = new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean b, Camera camera) {
Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
mBitmap = bmp.copy(Bitmap.Config.ARGB_8888, true);
bmp = Bitmap.createScaledBitmap(mBitmap, mBitmap.getWidth()/2, mBitmap.getHeight()/2, true);
String text = "";
try
{
text = decode(bmp, null);
}
catch(Exception e) { }
Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG).show();
mCamera.startPreview();
}
};
mCamera.takePicture(null, null, jpegCallback);
}
};
mCamera.autoFocus(focusCallback);
}
public static String decode(Bitmap bitmap, Map<DecodeHintType, Object> hints) throws Exception {
// check the required parameters
int[] intArray = new int[bitmap.getWidth()*bitmap.getHeight()];
LuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(), bitmap.getHeight(), intArray);
BinaryBitmap bMap = new BinaryBitmap(new HybridBinarizer(source));
MultiFormatReader barcodeReader = new MultiFormatReader();
Result result = null;
try {
if (hints != null && ! hints.isEmpty())
result = barcodeReader.decode(bMap, hints);
else
result = barcodeReader.decode(bMap);
// setting results.
} catch (Exception e) {
e.printStackTrace();
}
if(result != null)
return String.valueOf(result.getText());
else
return "No code found.";
}
}