마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

surfaceview 카메라 해상도 조절 질문 드립니다!

0 추천
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.camera, container, false);

    checkPermissions(); //권한 묻기

    TakepictureIb_C = (ImageButton) view.findViewById(R.id.takepictureIb_camera);
    TakepictureIb_C.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            camera.takePicture(null, null, jpegCallback);
        }
    });

    if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
        getActivity().getWindow().setFormat(PixelFormat.UNKNOWN);

        SurfaceViewSfv_Camera = (SurfaceView) view.findViewById(R.id.surfaceViewSfv_camera);
        surfaceHolder = SurfaceViewSfv_Camera.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }


    jpegCallback = new android.hardware.Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, android.hardware.Camera camera) {
            FileOutputStream outStream = null;
            try {
                    str = String.format("/sdcard/%d.jpg",
                            System.currentTimeMillis());   //이미지 저장경로
                    outStream = new FileOutputStream(str);
                    outStream.write(data);
                    outStream.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                     e.printStackTrace();
                } finally {
                }

            Toast.makeText(getActivity(), "Picture Saved", Toast.LENGTH_LONG).show();//저장완료시
            refreshCamera();//카메라 사용중지

            Intent intent = new Intent();
            intent.setClass(getActivity(), ImgConfirmActivity.class);
            intent.putExtra("strParamName", str);
            startActivity(intent);

        }
    };

    return view;
}
 public void refreshCamera() {
        if (surfaceHolder.getSurface() == null) {
            return;
        }
        try {
            camera.stopPreview();
        }catch (Exception e) {}

        try {
            camera.setPreviewDisplay(surfaceHolder);
            camera.startPreview();
            }catch (Exception e) {}
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @SuppressWarnings("deprecation")
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        Log.d("dd","dd");
        if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
            camera = Camera.open();
            Camera.Parameters param = camera.getParameters();
            camera.setDisplayOrientation(90);
            //param.setRotation(90);
            int m_resWidth;

            int m_resHeight;

            m_resWidth = camera.getParameters().getPictureSize().width;

            m_resHeight = camera.getParameters().getPictureSize().height;

            Camera.Parameters parameters = camera.getParameters();

//아래 숫자를 변경하여 자신이 원하는 해상도로 변경한다

            m_resWidth = 1280;

            m_resHeight = 720;

            parameters.setPictureSize(m_resWidth, m_resHeight);
            camera.setParameters(param);
        }else{
            refreshCamera();
        }
        try {
            camera.setPreviewDisplay(holder);
            camera.startPreview();
        } catch (Exception e) {
            System.err.println(e);
            return;
        }
    }

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

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
            camera.stopPreview();
            camera.release();
            camera = null;
    }
}
 

 

안드로이드 공부한지 한달정도되는 학생입니다!

다름아니라 카메라 기능 구현은 했지만 카메라 해상도가 조절이안되서 

뷰가 왜곡되듯이 보이는 현상이 나타납니다 해결방법 알려주시면 감사하겠습니다!

히알산점안액 (120 포인트) 님이 2017년 5월 17일 질문
히알산점안액님이 2017년 5월 18일 수정

2개의 답변

0 추천
해상도를 아무렇게나 설정한다고 그대로 동작하는게 아닙니다.

카메라가 지원하는 해상도를 구한다음, 그중에 하나로 설정해야 정상동작합니다.
익명사용자 님이 2017년 5월 18일 답변
맞는 말씀이긴 한데..
720P는 일반적인 단말이면 다 지원하지 않나요?..ㅎㅎ
0 추천
picture size는 사진 사이즈 설정이지, surface view 설정이 아닙니다.

화면이 왜곡되는 건 다른 이슈인듯 한데. 주신 코드만으론 알수 없네요..

아래 코드를 사용해서 돌려 보세요..

https://github.com/josnidhin/Android-Camera-Example
익명사용자 님이 2017년 5월 18일 답변
다른부분 코드들도 올렸는데 혹시 어떤이슈인지 확인해주실수있나요???
아래 코드로 하니까 잘되네요 감사합니다 ㅠㅠㅠ
...