마스터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
...