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

안드로이드에서 SurfaceView로 카메라 기능을 사용시 화면각도가 안바껴요 [closed]

0 추천

카메라를 구현하는데 각도가 옆으로 누웠을때로 맞춰져 있습니다.

다른예제들을 많이 찾아봐도 다이렇네요 혹시 제 핸드폰이 문제가 있는걸까요? LG-G2입니다.

 

그리고 추가적으로 이 소스에서 사진이 찍히면 어디로 저장이되는건가요? 사진을 아무리 찍어도 갤러리에 보이지가 않아요...

CameraActivity.java

package com.example.camera_test;
 
import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
 
import java.io.FileOutputStream;
 
public class CameraActivity extends Activity {
    private Preview pv;
    private Button btn;
    private FrameLayout fl;
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        pv = new Preview(this);
        fl = (FrameLayout) findViewById(R.id.preview);
        fl.addView(pv);
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // 사진 찍기
                pv.getCamera().takePicture(shutterCallback, rawCallback,
                        jpegCallback);
            }
        });
    }
 
    ShutterCallback shutterCallback = new ShutterCallback() {
        public void onShutter() {
        }
    };
    // raw 파일
    PictureCallback rawCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
        }
    };
    // jpg파일
    PictureCallback jpegCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            FileOutputStream outStream = null;
            try {
                outStream = new FileOutputStream(String.format(
                        "/sdcard/%d.jpg", System.currentTimeMillis()));
                outStream.write(data);
                outStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
 
    class Preview extends SurfaceView implements SurfaceHolder.Callback {
        private SurfaceHolder mHolder;
        private Camera camera;
 
        Preview(Context context) {
            super(context);
            mHolder = getHolder();
            mHolder.addCallback(this);
            mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
 
        public Camera getCamera() {
            return camera;
        }
 
        public void surfaceCreated(SurfaceHolder holder) {
            // 카메라 초기화
            try {
                int cameraId = findFrontSideCamera();
 
                camera = Camera.open(cameraId);
                camera.setPreviewDisplay(holder);
 
                // 미리보기의 프레임을 .setPreviewCallback()으로 새로 정의
                camera.setPreviewCallback(new PreviewCallback() {
                    public void onPreviewFrame(byte[] data, Camera camera) {
                        // TODO Do something with the preview image.
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
 
        public void surfaceDestroyed(SurfaceHolder holder) {
            camera.stopPreview();
            camera = null;
        }
 
        public void surfaceChanged(SurfaceHolder holder, int format, int w,
                int h) {
            Camera.Parameters parameters = camera.getParameters();
            parameters.setPreviewSize(w, h);
            camera.setParameters(parameters);
            camera.startPreview();
        }
    }
 
    private int findFrontSideCamera() {
        int cameraId = -1;
        int numberOfCameras = Camera.getNumberOfCameras();
        for (int i = 0; i < numberOfCameras; i++) {
            CameraInfo cmInfo = new CameraInfo();
            Camera.getCameraInfo(i, cmInfo);
            if (cmInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
                cameraId = i;
                break;
            }
        }
        return cameraId;
    }
}

 

질문을 종료한 이유: 해결되었습니다
요요 (180 포인트) 님이 2014년 11월 4일 질문
요요님이 2014년 11월 4일 closed
...