Android摄像头字节数组

Android摄像头字节数组,android,android-camera,surfaceview,Android,Android Camera,Surfaceview,我正在尝试让相机在安卓系统中工作。我成功创建了一个应用程序,可以在SurfaceView中显示相机图像 现在我想从摄像机接收字节数组。是否可以从摄像机接收字节数组 public class AndroidCamera extends Activity implements SurfaceHolder.Callback { TextView testView; Camera camera; SurfaceView surfaceView; SurfaceH

我正在尝试让相机在安卓系统中工作。我成功创建了一个应用程序,可以在
SurfaceView
中显示相机图像

现在我想从摄像机接收字节数组。是否可以从摄像机接收字节数组

    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
    }
}
我使用此代码从图像接收字节数组


我想将摄像头的字节数组与图像字节数组进行比较。如果照相机字节数组包含my images字节数组,则需要显示简单的“hello message”。

若要获取拍摄照片的字节数组,需要调用方法
拍摄照片
并传递第三个侦听器:

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

要比较字节数组,可以使用
java.util.arrays.equals()
方法。但是我想你永远不会得到相等的阵列…

是的,我错了,对不起。看我的代码,我想比较我的bytearray(bytearray)和相机阵列