세이박스

안드로이드 폰의 기본 카메라 앱을 이용한 사진 촬영 (Intent)

모바일앱개발
단말에 있는 카메라 앱을 띄워주는 방법
앱에서 상당히 많이 사용하는 기능
인텐트를 사용하는 방법으로 안드로이드 폰의 기본 카메라 앱을 이용해서
촬영한 결과를 가져오는 방법과 직접 촬영하는 기능을 만드는 방법이 있다.

* 직접 촬영 기능을 구현할땐, 카메라 미리보기를 위해서는 영상을 실시간으로 보여주기 위해서는 성능이 중요해서 하드웨어 가속 기능을 사용할 수 있는 서피스뷰(SurfaceView)를 사용한다.

아래 소스는 안드로이드의 기본 앱을 이용(Intent)해서 촬영하는 예제 이다.

1. 레이아웃 파일
<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" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="onButtonCamera" />
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageView"
        android:layout_below="@+id/button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>


2. 자바소스
    ImageView imageView;
    File outputFile;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.imageView);
        File storageDir = Environment.getExternalStorageDirectory();
        outputFile = new File(storageDir, "output.jpg");
    }
    public void onButtonCamera(View v) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outputFile));
        startActivityForResult(intent, 1001);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == 1001) {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 8;
            Bitmap bitmap = BitmapFactory.decodeFile(outputFile.getAbsolutePath(), options);
            imageView.setImageBitmap(bitmap);
        }
    }

3. 퍼미션
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.camera" android:required="true"></uses-permission>









[DSLR] 2010 부산국제 모터쇼 레이싱걸 포토 모델, 손봄

기타
사용자 삽입 이미지NIKON CORPORATION | NIKON D70s | Aperture priority | Spot | 1/40sec | F/2.8 | 0.00 EV | 31.0mm | Flash did not fire


촬용장소 : 부산 해운대 벡스코 국제 모터쇼 (BEXCO)
사용바디 : 니콘 D70s
사용랜즈 : 탐론 17-50mm, F2.8

레이싱모델 : 손봄(손미영)
출생 : 1985년 5월
신체 : 173cm, 52kg
소속사 : 미스디카
수상 : 2010년 CJ 오 슈퍼레이스 레이싱모델 선발대회 슈퍼레이스상
경력 :
2009 스쿠터레이스 미스디카 레이싱모델
2009 GT마스터즈 영오토 레이싱모델
2009 서울오토살롱 사이버오토 레이싱모델

국제 모터쇼에서 유일하게 이름 메모한 분인데, 촬영한 사진들 중 그다지 맘에 안들게 찍힌 사진 입니다.
확실히 인물 사진은 80mm 이상 사용해야 좋군요.
레이싱모델 사진중 니콘 랜즈 80-200mm 로 찍은 사진과 비교해보세요~ ^^

[포토] 회사 옥상에서 센츄리빌딩을 탐론 17-50으로 다양한 방향으로 찍어 봤습니다.

기타
사용자 삽입 이미지NIKON CORPORATION | NIKON D70s | Aperture priority | Spot | 1/5000sec | F/2.8 | +0.33 EV | 17.0mm | Flash did not fire
사용자 삽입 이미지NIKON CORPORATION | NIKON D70s | Aperture priority | Spot | 1/2500sec | F/2.8 | +0.33 EV | 32.0mm | Flash did not fire
사용자 삽입 이미지NIKON CORPORATION | NIKON D70s | Aperture priority | Spot | 1/5000sec | F/2.8 | +0.33 EV | 50.0mm | Flash did not fire

요즘 17-50 테스트겸 이것저것 찍어 보고 있는데, 날씨가 화창해서 이전에 찍어봤던 센츄리빌딩을 다시 한번 찍어 봤습니다.

바디 : 니콘 D70s
랜즈 : 탐론 17-50 F2.8

아래 출처 페이지로 오셔서 사진 많이 구경하세요!

[출처] 세이박스 - http://www.saybox.co.kr/bbs/board.php?bo_table=selca&wr_id=27