0

I want to use barcode scanner into my application and i am using Zbar library however, i can scan barcode but i want to save scanned image into sd card.

So far, i can able to capture image and save into SD but when i try to open it i have broken image error and cannot display it.

What am i using is :

    private final Camera.PreviewCallback saveImage = new Camera.PreviewCallback()
{
    @Override
    public void onPreviewFrame(byte[] data, Camera camera)
    {
        mCamera.setPreviewCallback(null);

        String path = Environment.getExternalStorageDirectory() + "/DCIM/mcs_" + timeStamp + ".jpg";  

        FileOutputStream fos = null;  

        try  
        {  
            fos = new FileOutputStream(path);  
            fos.write(data);  
            fos.close();  
        }  
        catch(Exception e)  
        {  
        }
    }
};

PreviewCallback     previewCb   = new PreviewCallback()
{
    public void onPreviewFrame(byte[] data, Camera camera)
    {
        Camera.Parameters parameters = camera.getParameters();
        Size size = parameters.getPreviewSize();

        Image barcode = new Image(size.width, size.height);
        barcode.setData(data);

        barcode = barcode.convert("Y800");
        int result = scanner.scanImage(barcode);

        if (result != 0)
        {
            mCamera.setPreviewCallback(saveImage);
            mCamera.stopPreview();

            SymbolSet syms = scanner.getResults();

            for (Symbol sym : syms)
            {
                Intent intent = new Intent(getApplicationContext(), ScanCodeResult.class);
                intent.putExtra("timeStamp", timeStamp);
                intent.putExtra("result", sym.getData().toString());
                //startActivity(intent);
                break;
            }
        }
    }
};

1 Answers1

1
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{

    Size size = camera.getParameters().getPreviewSize(); //获取预览大小
    final int w = size.width;  //宽度
    final int h = size.height;
    final YuvImage image = new YuvImage(data, ImageFormat.NV21, w, h, null);
    ByteArrayOutputStream os = new ByteArrayOutputStream(data.length);
    if(!image.compressToJpeg(new Rect(0, 0, w, h), 100, os)){
        return;
    }
    byte[] tmp = os.toByteArray();
    Bitmap bmp = BitmapFactory.decodeByteArray(tmp, 0,tmp.length); 
    FileHelper fileHelper = new FileHelper();
    fileHelper.storeInSD(bmp);
}