0

我想在我的应用程序中使用条形码扫描仪,并且我正在使用 Zbar 库但是,我可以扫描条形码,但我想将扫描的图像保存到 SD 卡中。

到目前为止,我可以捕获图像并保存到 SD 中,但是当我尝试打开它时,我遇到了图像错误并且无法显示它。

我使用的是:

    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;
            }
        }
    }
};
4

1 回答 1

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);
}
于 2014-01-08T08:50:17.157 回答