安卓相机字节数组



我正在尝试让相机在Android中工作。我成功创建了一个可以在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
    }
}

我使用此代码从图像接收字节数组。

我想将相机的字节数组与图像字节数组进行比较。如果相机字节数组包含我的图像字节数组,则需要显示简单的"你好消息"。

要获取拍摄照片的字节数组,您需要调用方法 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()方法。但我认为你永远不会得到相等的数组......

最新更新