본문 바로가기

Android

카메라 뷰와 촬영 예제

 Manifest 에는 다음과 같은 코드를 사용하였음.

 

 

 <uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

 

 

Main Activity 소스코드

 

 

package com.Andro.App;

import com.Andro.App.TCPActivity;

 

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

 

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Movie;

import android.hardware.Camera;

import android.hardware.Camera.PictureCallback;

import android.os.Bundle;

import android.provider.MediaStore;

import android.view.LayoutInflater;

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 android.widget.RelativeLayout;

import android.widget.Toast;

import android.widget.LinearLayout;

import android.content.Intent;

 

public class MainActivity extends Activity {

        private Preview mPreview;

        Button btn;

        LinearLayout tt;

        LinearLayout tt2;

        String fileName;

        boolean flag;

 

        TCPActivity ta;

 

 

 

        @Override

               protected void onCreate(Bundle savedInstanceState) {

                       super.onCreate(savedInstanceState);

 

                       mPreview = new Preview(this);

                       setContentView(R.layout.main);

                       addContentView(mPreview, new LinearLayout.LayoutParams(1024, 400));

 

                       btn = (Button) findViewById(R.id.button1);

                       btn.setOnClickListener(new OnClickListener() {

                              @Override

                                      public void onClick(View v) {

                                             mPreview.getPicture();

 

                              }

 

                       }); 

 

        }

 

        class Preview extends SurfaceView implements SurfaceHolder.Callback {

               SurfaceHolder mHolder;

               Camera mCamera;

               Context mCtx;

               String filename;

 

 

               Preview(Context context) {

                       super(context);

 

                       mCtx = context;

                       mHolder = getHolder();

                       mHolder.addCallback(this);

                       mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

               }

 

               public void surfaceCreated(SurfaceHolder holder) {

                       mCamera = Camera.open();

                       try {

                              mCamera.setPreviewDisplay(holder);

                       } catch (IOException exception) {

                              mCamera.release();

                              mCamera = null;

                       }

               }

 

               public void surfaceChanged(SurfaceHolder holder, int format, int w,

                       int h) {

                              Camera.Parameters parameters = mCamera.getParameters();

                              parameters.setPreviewSize(w, h);

                              mCamera.setParameters(parameters);

                              mCamera.startPreview();

               }

 

               public void surfaceDestroyed(SurfaceHolder holder) {

                       mCamera.stopPreview();

                       mCamera.release();

                       mCamera = null;

               }

 

               public void getPicture() {

                       mCamera.takePicture(null, null, new PictureCallback() {

 

                              @Override

                                      public void onPictureTaken(byte[] data, Camera camera) {

                                             SimpleDateFormat dateFormat = new SimpleDateFormat(

                                                     "yyyy-MM-dd HH.mm.ss");

                                             filename = dateFormat.format(new Date());

 

                                             Bitmap picture = BitmapFactory.decodeByteArray(data, 0,

                                                     data.length);

 

                                             MediaStore.Images.Media.insertImage(getContentResolver(),

                                                     picture, filename, "Fairy image");

                                             Toast.makeText(MainActivity.this,

                                                     filename + "사진이저장되었습니다,", Toast.LENGTH_SHORT)

                                                     .show();

 

                                             mCamera.startPreview();

                                             Intent it = new Intent(MainActivity.this,

                                                     MovieActivity.class);

                                             it.putExtra("file_name", filename);

                                             startActivity(it);

 

                              }

                       });

 

               }

        }

}

 

 

여러가지 변형 로직이 있고, 저장방법도 좀 다른경우가 있는데 파일명을 저장시에 지정한

TITLE(제목) 은 일반적인 파일명과 다르게 저장된다. 파일명은 자동으로 저장되더라............

(구글링 기술이 부족해서인지 아무리 뒤져도 이유를 모름)

 

 

 

다음과 같은 방법은 파일명까지 내마음대로 지정이 가능하였다.

import 한것중엔 네트워크관련 된게 많으니...알아서 빼길바람..

 

 

 

 

 

 

 

 

'Android' 카테고리의 다른 글

[JNI] JNI 형식 및 데이터 구조  (0) 2012.07.03
[JNI] GetByteArrayElements  (0) 2012.07.03
Android OpenCV 샘플코드  (3) 2012.07.02
Eclipse에서 JavaCV 설치/사용  (4) 2012.06.10
Android + NDK + OpenCV  (0) 2012.06.01