本文将向大家展示如何拍照截图。
先看看效果图:
拍照截图有点儿特殊,要知道,现在的android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的。因此,我们不能像对待相册截图一样使用bitmap小图,无论大图小图都统一使用uri进行操作。
一、首先准备好需要使用到的uri:
1
2
3
4
5
6
7
8
9
10
|
private static final string image_file_location = "file:///sdcard/temp.jpg" ;//temp file uri imageuri = uri.parse(image_file_location); //the uri to store the big bitmap |
二、使用mediastore.action_image_capture可以轻松调用camera程序进行拍照:
1
2
3
4
5
6
7
8
9
10
11
12
|
intent intent = new intent(mediastore.action_image_capture); //action is capture intent.putextra(mediastore.extra_output, imageuri); startactivityforresult(intent, take_big_picture); //or take_small_picture |
三、接下来就可以在 onactivityresult中拿到返回的数据(uri),并将uri传递给截图的程序。
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
|
switch (requestcode) { case take_big_picture: log.d(tag, "take_big_picture: data = " + data); //it seems to be null //todo sent to crop cropimageuri(imageuri, 800 , 400 , crop_big_picture); break ; case take_small_picture: log.i(tag, "take_small_picture: data = " + data); //todo sent to crop cropimageuri(imageuri, 300 , 150 , crop_small_picture); break ; default : break ; } |
可以看到,无论是拍大图片还是小图片,都是使用的uri,只是尺寸不同而已。我们将这个操作封装在一个方法里面
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
|
private void cropimageuri(uri uri, int outputx, int outputy, int requestcode){ intent intent = new intent( "com.android.camera.action.crop" ); intent.setdataandtype(uri, "image/*" ); intent.putextra( "crop" , "true" ); intent.putextra( "aspectx" , 2 ); intent.putextra( "aspecty" , 1 ); intent.putextra( "outputx" , outputx); intent.putextra( "outputy" , outputy); intent.putextra( "scale" , true ); intent.putextra(mediastore.extra_output, uri); intent.putextra( "return-data" , false ); intent.putextra( "outputformat" , bitmap.compressformat.jpeg.tostring()); intent.putextra( "nofacedetection" , true ); // no face detection startactivityforresult(intent, requestcode); } |
四、最后一步,我们已经将数据传入裁剪图片程序,接下来要做的就是处理返回的数据了:
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
|
switch (requestcode) { case crop_big_picture: //from crop_big_picture log.d(tag, "crop_big_picture: data = " + data); //it seems to be null if (imageuri != null ){ bitmap bitmap = decodeuriasbitmap(imageuri); imageview.setimagebitmap(bitmap); } break ; case crop_small_picture: if (imageuri != null ){ bitmap bitmap = decodeuriasbitmap(imageuri); imageview.setimagebitmap(bitmap); } else { log.e(tag, "crop_small_picture: data = " + data); } break ; default : break ; } |
以上就是android实现拍照截图功能的方法,希望对大家的学习有所帮助。