Java 没有结果的条形码阅读器

Java 没有结果的条形码阅读器,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

我有一个简单的android应用程序,只有一个CameraPreview和一个按钮。 它应该拍摄一张照片,将其转换成二进制位图,然后解码,这样我就可以读取条形码。我正在使用java中的ZXing库版本2.3和Android Studio版本0.5.1 我甚至不知道我是否用正确的方法拍摄位图。但是在最后,当我尝试在这一点上解码位图时,我得到了一个NotFoundException

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.";
    }
}