본문 바로가기
Android/[JAVA]

[Android][JAVA] 카메라

by PhoB 2022. 10. 25.

앱에서 카메라를 사용하여 사진을 읽어오고자 한다. 참고로 찍은사진을 이미지뷰에 불러오기만 할뿐 저장하는 코드는 아니다.

 

우선 카메라 기능을 사용하기 위해서는 권한 허가가 필요하다.

AndroidManifest.xml파일에 들어가서 <application 위에 아래 코드들을 추가해주자

 

카메라 권한 획득

<uses-permission android:name="android.permission.CAMERA" />

추가적으로 아래코드까지 같이 선언해주자

<uses-feature android:name="android.hardware.camera" android:required="false" />

 

다음은 레이아웃을 구성해보자

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/take_picture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="카메라"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        />
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>

 

 

다음은 class이다.

package com.example.cameraexample;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {
    private Button btn_picture;
    private ImageView imageView;
    private static final int REQUEST_IMAGE_CODE = 101;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = findViewById(R.id.image);
        btn_picture = findViewById(R.id.take_picture);
        btn_picture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                takePicture();
            }
        });
    }
    private void takePicture() {
        Intent imageTakeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if(imageTakeIntent.resolveActivity(getPackageManager())!=null){
            startActivityForResult(imageTakeIntent, REQUEST_IMAGE_CODE);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode,@Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_IMAGE_CODE && resultCode == RESULT_OK){
            Bundle take_img = data.getExtras();
            Bitmap imageBitmap = (Bitmap)take_img.get("data"); 
            imageView.setImageBitmap(imageBitmap);
        }
    }
}

다른 훌륭한 개발자분들의 블로그와 비교해보면 굉장히 짧은 간단한 코드이다.

앞에서도 말했지만 위의 코드는 카메라로 찍은 사진을 불러와 이미지뷰에 띄워주는 기능에 지나지않는다.

 

찍은 사진들의 저장 혹은 인텐트하여 OCR같은 작업들은 추가적인 코드를 필요로한다.

 

 

아래 링크는 카메라에 관한 구글 공식문서이다.

 

https://developer.android.com/guide/topics/media/camera?hl=ko

'Android > [JAVA]' 카테고리의 다른 글

[Android][JAVA] 팝업 액티비티(2)  (0) 2022.10.07
[Android][JAVA] 팝업 액티비티(1)  (0) 2022.10.07