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

제가 가진 카메라 코드에서 해상도설정을 어떻게 하는지 가르쳐주세요 ...

0 추천

안녕하세요 이제 막 안드로이드에 대해 공부하고있는 대학생입니다..

카메라를 사용해서 어플을 만들고있는데 제가 지금 가지고잇는 카메라 어플 소스를 구동시키면 계속해서 뻗어버립니다....

저는 옵티머스g프로를 사용중인데 제가가진 코드로는 갤럭시s3, 갤럭시노트2만 됩니다...

검색하고 연구해본바 해상도 설정때문에 안되는거같은데 한번 코드확인 부탁드립니다. 그리고 해상도 를 1080*1920으로 바꾸고 싶은데 어떻게 해야되는지와 후면카메라로 전환해서 촬영하는 방법이 궁굼합니다.

//메인자바

import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Main extends Activity implements OnClickListener 
{

 Button button;
 
 private Camera camera;
 private int cameraId = 0;
 

 @Override
 protected void onCreate(Bundle savedInstanceState) 
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  button = (Button)findViewById(R.id.button);
  button.setOnClickListener(this);
  
  if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) 
     {
       Toast.makeText(this, "Camera is not found in your device", Toast.LENGTH_SHORT).show();
     } 
     else
     {
       cameraId = findFrontSideCamera();
       if (cameraId < 0) 
       {
         Toast.makeText(this, "Front side camera is not found",Toast.LENGTH_SHORT).show();
       } 
       else 
       {

         camera = Camera.open(cameraId);
       }
     }

 }
 
 
 

 

 
 private int findFrontSideCamera() 
 {
     int cameraId = -1;
     int numberOfCameras = Camera.getNumberOfCameras();
     
     for (int i = 0; i < numberOfCameras; i++) 
     {
       CameraInfo info = new CameraInfo();
       Camera.getCameraInfo(i, info);
       
       if (info.facing == CameraInfo.CAMERA_FACING_FRONT) 
       {
         cameraId = i;
         break;
       }
       
     }
     return cameraId;
   }

 public void onClick(View view) 
 {
     CameraHandler ch = new CameraHandler(getApplicationContext());
  camera.takePicture(null, null,ch);
 }
 
 @Override
 protected void onPause() 
 {
  // TODO Auto-generated method stub
    
  if(camera!=null)
  {
   camera.release();
   camera = null; 
  }
  
  super.onPause();
 }

 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) 
 {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}
//파일 저장용 자바 

import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Environment;
import android.widget.Toast;

public class CameraHandler implements PictureCallback
{
 
 String str = "CameraExampleFolder";
 
 private final Context context;
 
 public CameraHandler(Context context)
 {
  this.context = context;
 }
 
 @Override
 public void onPictureTaken(byte[] data, Camera camera) 
 {
  // TODO Auto-generated method stub
  File file = getDir();
  
  if(!file.exists() && !file.mkdirs())
  {
   Toast.makeText(context, "File and Directory handling has some errors.", Toast.LENGTH_LONG).show();
   
   return;
  }
  
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss");
  

     String date = dateFormat.format(new Date());
     String photoFile = "App_Test" + date + ".jpg";

     String filename = file.getPath() + File.separator + photoFile;

     File takenPicture = new File(filename);

     try 
     {
       FileOutputStream fos = new FileOutputStream(takenPicture);
       fos.write(data);
       fos.close();
       Toast.makeText(context, "The taken photo is saved:" + photoFile,Toast.LENGTH_SHORT).show();
     } 
     catch (Exception error) 
     {
      
       Toast.makeText(context, "Saving process has some errors.", Toast.LENGTH_LONG).show();
     }


  
 }
 
 private File getDir()
 {
  File sd_Dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
  return new File(sd_Dir,str);
 }

}

레이아웃- 메인xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Main" >

    <Button 
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="Take a Photo"
       android:id="@+id/button"
        />
    
</RelativeLayout>

메니페스트에 퍼미션은 모두 설정해 주었습니다.

카다쿠리 (280 포인트) 님이 2013년 11월 7일 질문

1개의 답변

0 추천

http://developer.android.com/intl/ko/guide/topics/media/camera.html
카메라 사용은 일단 위에 부분 참고하세요

1. 죽는 문제는 로그가 있어야 판단가능할거 같네요. 각 기종마다 지원하지 않는 인자로 넘기고 있는 부분이 있는지 확인해보세요

2. 해상도 가 캡쳐 이미지 크기인가요 프리뷰 크기 인가요? 일단 아래코드 참고하세요

import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Parameters;

...

Camera mCameraDevice;
...

// Camera.Parameter 얻어오기
mParameters = mCameraDevice.getParameters();

// 지원하는 프리뷰 사이즈 	얻어오기
List <Integer> supportedPreviewSizes = mParameters.getSupportedPreviewSizes();

// 현재 프리뷰 사이즈 얻어오기
Size previewSize = mParameters.getPreviewSize();

// 지원하는 캡쳐 이미지 사이즈	얻어오기
List <Integer> supportedPictureSizes = mParameters.getSupportedPictureSizes();

// 현재 캡쳐 이미지 사이즈	얻어오기
Size pictureSize = mParameters.getPictureSize();

...

// x, y 값으로 캡쳐 이미지 사이즈 설정
mParameters.setPictureSize(x, y);

// x, y 값으로 프리뷰 이미지 사이즈 설정
mParameters.setPreviewSize(x, y);

// Parameter 셋팅!
mCameraDevice.setParameters(mParameters);



3. 기존소스에서 findFrontSideCamera() 로 전면 카메라를 찾아 셋팅하고 있네요

해당 함수 조건문 

 if (info.facing == CameraInfo.CAMERA_FACING_FRONT)  

에서 CAMERA_FACING_FRONT 을 CAMERA_FACING_BACK 로 바꾸면 후면 카메라를 찾겠네요.

mono1 (3,100 포인트) 님이 2013년 11월 7일 답변
가르쳐 주셔서 감사합니다!
어플 실행후 버튼을 누르면 나오는 로그가
11-07 17:38:52.484: E/AndroidRuntime(13074): FATAL EXCEPTION: main
11-07 17:38:52.484: E/AndroidRuntime(13074): java.lang.NullPointerException
11-07 17:38:52.484: E/AndroidRuntime(13074):     at com.camera.cameraexample.Main.onClick(Main.java:81)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at android.view.View.performClick(View.java:4120)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at android.view.View$PerformClick.run(View.java:17112)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at android.os.Handler.handleCallback(Handler.java:615)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at android.os.Looper.loop(Looper.java:137)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at android.app.ActivityThread.main(ActivityThread.java:4886)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at java.lang.reflect.Method.invokeNative(Native Method)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at java.lang.reflect.Method.invoke(Method.java:511)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
11-07 17:38:52.484: E/AndroidRuntime(13074):     at dalvik.system.NativeStart.main(Native Method)


입니다.

전면카메라로 세팅되어있는 것을 저도 camera_facing_back으로 몇번 시도하였는데 역시나 전면카메라가 설정되어있었습니다....
코드 다시보니까 카메라 프리뷰를 안만들고 하셨네요.
그러면 기본적으로 동작 안되는걸로 알고 있습니다.
안드로이드 기본 샘플 코드 참고하세요
...