2013-12-23 5 views
0

내 응용 프로그램에 바코드 스캐너를 사용하고 Zbar 라이브러리를 사용하고 있습니다. 그러나 바코드는 스캔 할 수 있지만 스캔 한 이미지는 SD 카드에 저장하고 싶습니다.이미지로 Zbar 바코드 저장

지금까지 이미지를 캡처하여 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; 
      } 
     } 
    } 
}; 

답변

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