반응형
우리는 카메라를 사용하는 방벙은 두 가지가 있다.
◎ 카메라 앱
◎카메라 API
카메라 앱을 실행시킨다는 것은 내 앱에서 다른 앱을 실행 시킨다는 것이다. (새로운 Activity를 띄운다. 묵시적 Intent)
화면 구성: 버튼 1, 이미지 뷰1
일단 화면 구성을 해보자.
카메라를 실행하는 것은 간단하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.lcw.ex69cameratest;
import android.content.Intent;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=findViewById(R.id.iv);
}
public void clickPhoto(View view) {
//Camera 앱을 실행시키는 Intent 생성
Intent intent= new Intent();//묵시적 인텐트 (식별자를 써서 띄움)
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
//결과를 받아야 하므로 결과를 받을 수 있도록 카메라 액티비티 실행하기
startActivity(intent);
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
<실행 화면>
카메라 앱을 잘 실행되지만, 우리는 그 캡쳐 화면을 가져오는 작업도 필요하다.
카메라로 사진을 찍고 확인을 누르면 그 사진이 이미지뷰에 보인다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
package com.lcw.ex69cameratest;
import androidx.annotation.Nullable;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
public class MainActivity extends AppCompatActivity {
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv=findViewById(R.id.iv);
}
public void clickPhoto(View view) {
//Camera 앱을 실행시키는 Intent 생성
Intent intent= new Intent();//묵시적 인텐트 (식별자를 써서 띄움)
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
//결과를 받아야 하므로 결과를 받을 수 있도록 카메라 액티비티 실행하기
startActivityForResult(intent, 100);
}
//startActivityForResult()로 실행한
//액티비티가 종료된 후 자동으로 실행되는
//콜백메소드
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch ( requestCode){
case 100:
//카메라앱의 실행결과가 OK일 때 (카메라로 찍었다.)
if(resultCode == RESULT_OK){
//캡쳐한 사진 이미지를 이미지뷰에 보여주기
//결과물을 가져온 Intent객체(3번째 파라미터: data)에게 결과 받기
Uri uri=data.getData(); // Uri: 리소스의 경로를 관리하는 객체
//디바이스 마다 프로그램을 통해 실행한
//카메라 앱의 사진 캡쳐 방식이 다름.
//마시멜로우 부터 앱이 캡쳐한 이미지를
//파일로 저장하지 않고 Bitmap 이미지 데이터로
//결과를 돌려주는 다바이스들이 많음.
if(uri != null){ // 파일로 저장되는 방식일때
//카메라로 취득한 사진은 해상도가 너무 높아서
//이미지에 바로 사용 못하는 경우가 많음.
//이미지의 해상도를 리사이징 해서 사용함.
//이런 작업을 자동으로 해주는 라이브러리 사용(Glide, Picasso)
//iv.setImageURI(uri);
Toast.makeText(this, "uri 로 사진 정보 획득", Toast.LENGTH_SHORT).show();
Glide.with(this).load(uri).into(iv);
}else{//Bitmap 이미지 데이터만 줄때[요즘은 거의 이방식]
Toast.makeText(this, "Bitmap 객체로 사진 정보 획득", Toast.LENGTH_SHORT).show();
//Bitmap 객체를 Intent 로 Extra 부터 데이터로 전달 받음
Bundle bundle= data.getExtras();
Glide.with(this).load(bm).into(iv);
}
}
break;
}
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?xml version="1.0" encoding="utf-8"?>
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"
android:padding="16dp"
tools:context=".MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="take a photo"
android:textAllCaps="false"
android:onClick="clickPhoto"/>
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
|
이렇게 하면 시진을 찍고, 나면 이미지 뷰에 사진이 나올 것이다.
(단, 사진이 갤러리에 저장은 안됨.)
반응형
'안드로이드 웹앱 콘테츠 개발자 양성(국비지원) > Android 기능' 카테고리의 다른 글
Android Studio(기능) Location / Map [Camera -3 (동영상)] (0) | 2019.10.14 |
---|---|
Android Studio(기능) Location / Map [Camera -2] (0) | 2019.10.14 |
Android Studio(기능) Location / Map [Google Map 사용 예제] (0) | 2019.10.11 |
Android Studio(기능) Location / Map 각 사이트 이용 방법 (0) | 2019.10.11 |
Android Studio(기능) LBS 3 (지도 앱에 해당 위치 표시하기) (0) | 2019.10.10 |
댓글