카메라 적용 및 촬영

rlawlgus·2022년 11월 2일
0

waste_requset01.java

package com.example.myapplication;


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;



public class waste_request01 extends AppCompatActivity implements View.OnClickListener {

    Button btnCamera;
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.waste_request01);

        // 디자인 정의
        btnCamera = (Button) findViewById(R.id.btnPhoto);
        imageView = (ImageView) findViewById(R.id.imageView);
        btnCamera.setOnClickListener(this);
    }

    @Override
    public void onClick(View view)    {
        switch (view.getId()) {
            // 카메라촬영 클릭 이벤트
            case R.id.btnPhoto:
                // 카메라 기능을 Intent
                Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(i, 0);
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)    {
        super.onActivityResult(requestCode, resultCode, data);

        // 카메라 촬영을 하면 이미지뷰에 사진 삽입
        if(requestCode == 0 && resultCode == RESULT_OK) {
            // Bundle로 데이터를 입력
            Bundle extras = data.getExtras();

            // Bitmap으로 컨버전
            Bitmap imageBitmap = (Bitmap) extras.get("data");

            // 이미지뷰에 Bitmap으로 이미지를 입력
            imageView.setImageBitmap(imageBitmap);
        }
    }
}

//border_layout.xml파일 drawable에 생성
//<?xml version="1.0" encoding="utf-8"?>
//<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
//    <item
//        android:bottom="2dp"
//        android:end="2dp"
//        android:start="2dp"
//        android:top="2dp">
//        <shape android:shape="rectangle">
//            <stroke
//                android:width="2dp"
//                android:color="#000000" />
//            <solid android:color="null" />
//        </shape>
//    </item>
//</layer-list>

//

waste_request01.xml

<?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="wrap_content"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="20dp"
    tools:context=".waste_request01">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="10">

        <ImageButton
            android:id="@+id/imageButton_back1"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_weight="1"
            android:background="#FFFFFF"
            app:srcCompat="@drawable/ic_baseline_arrow_back_ios_24" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:gravity="center"
            android:layout_weight="9"
            android:text="폐기물 처리"
            android:textColor="#313234"
            android:textSize="9pt" />

    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"

        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="300dp"
            android:layout_height="200dp"
            android:gravity="center"
            android:background="@drawable/border_layout"
            android:text="사진 촬영" />

        <Button
            android:id="@+id/btnPhoto"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:text="사진 등록" />
    </LinearLayout>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="폐기물 종류"
        android:textSize="15sp" />

    <EditText
        android:id="@+id/editTextName"
        android:layout_width="300dp"
        android:layout_height="48dp"
        android:ems="10"
        android:hint="입력하세요"
        android:inputType="textPersonName" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:text="폐기물 크기"
        android:textSize="15sp" />

    <EditText
        android:id="@+id/editTextSize"
        android:layout_width="300dp"
        android:layout_height="48dp"
        android:ems="10"
        android:hint="입력하세요"
        android:inputType="textPersonName" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:text="폐기물 처리 납부 비용"
        android:textSize="15sp" />

    <EditText
        android:id="@+id/editTextPay"
        android:layout_width="300dp"
        android:layout_height="48dp"
        android:ems="10"
        android:gravity="right"
        android:inputType="textPersonName"
        android:text="" />

    <Button
        android:id="@+id/next_bu"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="75dp"
        android:text="NEXT" />

</LinearLayout>

수정

package com.example.myapplication;


import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.FileProvider;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageDecoder;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

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


public class waste_request01 extends AppCompatActivity implements View.OnClickListener {

    Button btnCamera;
    ImageView imageView;
    String imageFilePath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.waste_request01);

        // 디자인 정의
        btnCamera = (Button) findViewById(R.id.btnPhoto);
        imageView = (ImageView) findViewById(R.id.imageView);
        btnCamera.setOnClickListener(this);

        
    }

    Uri photoUri;

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            // 카메라촬영 클릭 이벤트
            case R.id.btnPhoto:
                // 카메라 기능을 Intent
                Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                // 사진파일 변수 선언 및 경로세팅
                File photoFile = null;
                try {
                    photoFile = createImageFile();
                } catch (IOException ex) {
                }

                // 사진을 저장하고 이미지뷰에 출력
                if (photoFile != null) {
                    photoUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", photoFile);
                    i.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);

                    startActivityForResult(i, 0);
                }

                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // 카메라 촬영을 하면 이미지뷰에 사진 삽입
        if (requestCode == 0 && resultCode == RESULT_OK) {
            // 이미지파일을 bitmap 변수에 초기화
            Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath);
            ExifInterface exif = null;

            try {
                exif = new ExifInterface(imageFilePath);
            }
            catch(IOException e){
                e.printStackTrace();
            }

            // 이미지를 회전각도를 구한다
            int exifOrientation;
            int exifDegree;

            if (exif != null) {
                exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
                exifDegree = exifOrientationToDegrees(exifOrientation);
            } else {
                exifDegree = 0;
            }

            // 이미지를 출력
            imageView.setImageBitmap(rotate(bitmap, exifDegree));
        }
    }

    // ImageFile의 경로를 가져올 메서드 선언
    private File createImageFile() throws IOException {
        // 파일이름을 세팅 및 저장경로 세팅
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File StorageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,
                ".jpg",
                storageDir
        );

        imageFilePath = image.getAbsolutePath();

        return image;
    }

    // 사진의 돌아간 각도를 계산하는 메서드 선언
    private int exifOrientationToDegrees(int exifOrientation) {
        if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
            return 90;
        } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
            return 180;
        } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
            return 270;
        }
        return 0;
    }

    // 이미지를 회전시키는 메서드 선언
    private Bitmap rotate(Bitmap bitmap, float degree) {
        Matrix matrix = new Matrix();
        matrix.postRotate(degree);
        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    }

}

//border_layout.xml파일 drawable에 생성
//<?xml version="1.0" encoding="utf-8"?>
//<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
//    <item
//        android:bottom="2dp"
//        android:end="2dp"
//        android:start="2dp"
//        android:top="2dp">
//        <shape android:shape="rectangle">
//            <stroke
//                android:width="2dp"
//                android:color="#000000" />
//            <solid android:color="null" />
//        </shape>
//    </item>
//</layer-list>

//
profile
Hello

0개의 댓글