Android OpenCV - CameraBridgeViewBase take picture?

后端 未结 1 708
醉梦人生
醉梦人生 2021-01-06 06:38

Please, can anybody help me with this?
I have a project using CameraBridgeViewBase and I want to take a picture and save a file, but CameraBridgeViewB

相关标签:
1条回答
  • 2021-01-06 07:16

    Result: I implemented a new class extends JavaCameraView and implemented myself the function takePicture.

    import org.opencv.android.JavaCameraView;
    
    import java.io.FileOutputStream;
    import java.util.List;
    
    import android.content.Context;
    import android.hardware.Camera;
    import android.hardware.Camera.PictureCallback;
    import android.hardware.Camera.Size;
    import android.util.AttributeSet;
    import android.util.Log;
    
    public class MyCameraView extends JavaCameraView implements PictureCallback {
    
        private static final String TAG = "myCameraView";
        private String mPictureFileName;
    
        public MyCameraView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public List<String> getEffectList() {
            return mCamera.getParameters().getSupportedColorEffects();
        }
    
        public boolean isEffectSupported() {
            return (mCamera.getParameters().getColorEffect() != null);
        }
    
        public String getEffect() {
            return mCamera.getParameters().getColorEffect();
        }
    
        public void setEffect(String effect) {
            Camera.Parameters params = mCamera.getParameters();
            params.setColorEffect(effect);
            mCamera.setParameters(params);
        }
    
        public List<Size> getResolutionList() {
            return mCamera.getParameters().getSupportedPreviewSizes();
        }
    
        public void setResolution(Size resolution) {
            disconnectCamera();
            mMaxHeight = resolution.height;
            mMaxWidth = resolution.width;
            connectCamera(getWidth(), getHeight());
        }
    
        public Size getResolution() {
            return mCamera.getParameters().getPreviewSize();
        }
    
        public void takePicture(final String fileName) {
            Log.i(TAG, "Taking picture");
            this.mPictureFileName = fileName;
            // Postview and jpeg are sent in the same buffers if the queue is not empty when performing a capture.
            // Clear up buffers to avoid mCamera.takePicture to be stuck because of a memory issue
            mCamera.setPreviewCallback(null);
    
            // PictureCallback is implemented by the current class
            mCamera.takePicture(null, null, this);
        }
    
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            Log.i(TAG, "Saving a bitmap to file");
            // The camera preview was automatically stopped. Start it again.
            mCamera.startPreview();
            mCamera.setPreviewCallback(this);
    
            // Write the image in a file (in jpeg format)
            try {
                FileOutputStream fos = new FileOutputStream(mPictureFileName);
    
                fos.write(data);
                fos.close();
    
            } catch (java.io.IOException e) {
                Log.e("PictureDemo", "Exception in photoCallback", e);
            }
    
        }
    }
    

    -

        private MyCameraView mOpenCvCameraView;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
            mOpenCvCameraView = (MyCameraView) view.findViewById(R.id.fd_activity_surface_view);
            mOpenCvCameraView.setCvCameraViewListener(this);
    
            return view;
        }
    
        @Override
        public void onResume() {
            super.onResume();
            mOpenCvCameraView.enableView();
    
            String filename = "teste.jpg";
            mOpenCvCameraView.takePicture(filename);
            mOpenCvCameraView.disableView();
        }
    
    0 讨论(0)
提交回复
热议问题