2014-04-01 48 views
0

我想讓相機在Android中工作。我成功地創建了一個可以在SurfaceView中顯示相機圖像的應用程序。Android相機字節數組

現在我想從相機接收字節數組。是否有可能從相機接收字節數組?

public class AndroidCamera extends Activity implements SurfaceHolder.Callback { 
    TextView testView; 

    Camera camera; 
    SurfaceView surfaceView; 
    SurfaceHolder surfaceHolder; 
    PictureCallback rawCallback; 
    ShutterCallback shutterCallback; 

    private final String tag = "VideoServer"; 

    Button start, stop; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     start = (Button) findViewById(R.id.startcamerapreview); 
     start.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View arg0) { 
       start_camera(); 
      } 
     }); 
     stop = (Button) findViewById(R.id.stopcamerapreview); 

     stop.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View arg0) { 
       stop_camera(); 
      } 
     }); 

     surfaceView = (SurfaceView) findViewById(R.id.surfaceview); 
     surfaceHolder = surfaceView.getHolder(); 
     surfaceHolder.addCallback(this); 
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     rawCallback = new PictureCallback() { 
      public void onPictureTaken(byte[] data, Camera camera) { 
       Log.d("Log", "onPictureTaken - raw"); 
      } 
     }; 

     /** Handles data for jpeg picture */ 
     shutterCallback = new ShutterCallback() { 
      public void onShutter() { 
       Log.i("Log", "onShutter'd"); 
      } 
     }; 


    } 

    public void CheckByteArray() { 
     camera.takePicture(null, null, new Camera.PictureCallback() { 
      @Override 
      public void onPictureTaken(byte[] data, Camera camera) { 
       try { 
        Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
          R.drawable.ic_launcher); 
        ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
        bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
        byte[] byteArray = stream.toByteArray(); 

        if (Arrays.equals(data, byteArray)) { 

        } 

       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        Toast.makeText(getApplicationContext(), "ERROR:" + e, 1) 
          .show(); 

       } 
      } 
     }); 
    } 

    private void start_camera() { 
     try { 
      camera = Camera.open(); 
     } catch (RuntimeException e) { 
      Log.e(tag, "init_camera: " + e); 
      return; 
     } 
     Camera.Parameters param; 
     param = camera.getParameters(); 
     // modify parameter 
     param.setPreviewFrameRate(20); 
     param.setPreviewSize(176, 144); 
     camera.setParameters(param); 
     try { 
      camera.setPreviewDisplay(surfaceHolder); 
      camera.startPreview(); 
      CheckByteArray(); 

     } catch (Exception e) { 
      Log.e(tag, "init_camera: " + e); 
      return; 
     } 
    } 

    private void stop_camera() { 
     camera.stopPreview(); 
     camera.release(); 
    } 

    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 
     // TODO Auto-generated method stub 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
    } 
} 

我用這段代碼從圖像接收字節數組。

我想比較相機的字節數組與圖像字節數組。如果相機字節數組包含我的圖像字節數組,則需要顯示簡單的「hello消息」。

+0

你的意思是字節數組? – eleven

+0

是的,我誤misteked sorry.look我的代碼,我想比較我的bytearray(ByteArray)相機陣列 – user3345767

回答

0

爲了讓拍攝的照片的字節數組,你需要調用方法takePicture,並通過第三聽衆:

camera.takePicture(
    null, null, new Camera.PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      //data is what you need 
     } 
}); 

比較字節數組,你可以使用java.util.Arrays.equals()方法。但我認爲你永遠不會得到平等的陣列...

+0

我更新了我的code.i發佈所有來源 – user3345767