Android Studio Camera при нажатии производит растянутое изображение - PullRequest
0 голосов
/ 01 мая 2020

Я также получил ошибку поворота после того, как изображение щелкнуло, но я исправил, что я также написал код для растяжки, но он не работает.

И второе, я добавил камеру разрешения, но когда я запускаю приложение на своем устройстве, оно запрашивает разрешение, но мне нужно перезапустить приложение, чтобы получить доступ к камере. Мой код: publi c класс CameraFragment расширяет Fragment реализует SurfaceHolder.Callback {

private static final int CAMERA_REQUEST_CODE =1;
Camera camera;
Camera.PictureCallback jpegCallback;
SurfaceView mSurfaceView;
SurfaceHolder mSurfaceHolder;

public static CameraFragment newTnstance(){
    CameraFragment fragment = new CameraFragment();
    return fragment;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_camera ,container,false);
    mSurfaceView = view.findViewById(R.id.surfaceView);
    mSurfaceHolder = mSurfaceView.getHolder();
    if(ActivityCompat.checkSelfPermission(getContext(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
    }else {
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    Button mLogout = view.findViewById(R.id.logout);
    Button mCapture = view.findViewById(R.id.capture);
    mLogout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LogOut();
        }
    });

    mCapture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            captureImage();
        }
    });

    jpegCallback = new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] bytes, Camera camera) {
         Intent intent = new Intent(getActivity(), ShowCaptureActivity.class);
         intent.putExtra("capture", bytes);
         startActivity(intent);
         return;
        }
    };

    return view;
}

private void captureImage() {
    camera.takePicture(null,null,jpegCallback);
}


@Override
public void surfaceCreated(SurfaceHolder holder) {
    camera=Camera.open();
    Camera.Parameters parameters;
    parameters = camera.getParameters();
    camera.setDisplayOrientation(90);
    parameters.setPreviewFrameRate(30);
    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);

    Camera.Size bestSize = null;
    List<Camera.Size> sizeList = camera.getParameters().getSupportedPreviewSizes();
    bestSize = sizeList.get(0);
    for(int i = 1 ; i < sizeList.size(); i++){
        if((sizeList.get(i).width*sizeList.get(i).height)>(bestSize.width*bestSize.height)){
            bestSize = sizeList.get(i);
        }
    }
    parameters.setPreviewSize(bestSize.width, bestSize.height);

    camera.setParameters(parameters);
    try {
        camera.setPreviewDisplay(holder);
    } catch (IOException e) {
        e.printStackTrace();
    }
    camera.startPreview();


}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode){
        case CAMERA_REQUEST_CODE:{
            if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                mSurfaceHolder.addCallback(this);
                mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            }else{
                Toast.makeText(getContext(), "Please provide the permission", Toast.LENGTH_SHORT).show();
            }
            break;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...