如何创建自己的previewCallback方法

时间:2016-01-19 14:20:35

标签: android frame

我正在开发我的项目作为库(例如:proj A是测试Proj B的客户端是我的lib)现在我正在使用表面视图previewCallback现在我的每一帧都应该返回到Proj A.

在Proj A中,我保持ImageView查看每个帧,因为在Proj B中执行的previewCallback方法如何才能实现。

我在下面尝试过:

客户端 MainActivity:

 mStartButton = (Button) findViewById(R.id.start_button);
    mStartButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCameraPreview.setVisibility(View.VISIBLE);
            CameraPreview.startPreview();
            view();
        }
    });

    mStopButton = (Button) findViewById(R.id.stop_button);
    mStopButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CameraPreview.stopPreview();
            mCameraPreview.setVisibility(View.INVISIBLE);

        }
    });

}
public   void view()
{
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            if(CameraPreview.bmpret!=null) {
                CameraPreview.imagePreview("");
                imagePreview.setImageBitmap(CameraPreview.bmpret);
            }
        }
    }, 500);

}

库 扩展了SurfaceView类:

 public void startPreview() {
        Log.i("CameraPreview", "startPreview");
        Toast.makeText(mContext, "start preview", Toast.LENGTH_LONG).show();
        if (!mCameraPreviewing) {

            Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
            int cameraCount = Camera.getNumberOfCameras();
            for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
                Camera.getCameraInfo(camIdx, cameraInfo);
                if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                    try {
                        mCamera = Camera.open(camIdx);
                        mCamera.setDisplayOrientation(90);
                        if (mCamera != null) {
                            try {
                                mCamera.setPreviewDisplay(mSurfaceHolder);
                                // mCamera.setPreviewCallback(this);
                                mCamera.setPreviewCallback(new Camera.PreviewCallback() {

                                    @Override
                                    public void onPreviewFrame(byte[] data, Camera camera) {


                                        //   start = System.currentTimeMillis();
                                        Camera.Parameters parameters = camera.getParameters();
                                        Camera.Size size = parameters.getPreviewSize();

                                        YuvImage image = new YuvImage(data, ImageFormat.NV21,
                                                size.width, size.height, null);
                                        Rect rectangle = new Rect();
                                        rectangle.bottom = size.height;
                                        rectangle.top = 0;
                                        rectangle.left = 0;
                                        rectangle.right = size.width;
                                        ByteArrayOutputStream out2 = new ByteArrayOutputStream();

                                        image.compressToJpeg(rectangle, 100, out2);
                                        byte[] byteInputRot = out2.toByteArray();
                                        bmpret = BitmapFactory.decodeByteArray(byteInputRot, 0, byteInputRot.length);
                                        ByteArrayOutputStream out4 = new ByteArrayOutputStream();
                                        bmpret.compress(Bitmap.CompressFormat.PNG, 100, out4);
                                        a =    byteInputRot.toString();
                                        preview(bmpret);

但如果我返回方法,则只显示最后一张图片。

如何创建自己的previewCallback方法作为默认的Android lib。

如果有任何想法,请帮助我的朋友。

0 个答案:

没有答案