在这篇文章中,我将向大家展示如何从相册截图。
先看看效果图:
上一篇文章中,我就拍照截图这一需求进行了详细的分析,试图让大家了解android本身的限制,以及我们应当采取的实现方案。大家可以回顾一下:android实现拍照截图功能
根据我们的分析与总结,图片的来源有拍照和相册,而可采取的操作有
- 使用bitmap并返回数据
- 使用uri不返回数据
前面我们了解到,使用bitmap有可能会导致图片过大,而不能返回实际大小的图片,我将采用大图uri,小图bitmap的数据存储方式。
我们将要使用到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 |
不难知道,我们从相册选取图片的action为intent.action_get_content。
根据我们上一篇博客的分析,我准备好了两个实例的intent。
一、从相册截大图:
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
|
intent intent = new intent(intent.action_get_content, null ); intent.settype( "image/*" ); intent.putextra( "crop" , "true" ); intent.putextra( "aspectx" , 2 ); intent.putextra( "aspecty" , 1 ); intent.putextra( "outputx" , 600 ); intent.putextra( "outputy" , 300 ); intent.putextra( "scale" , true ); intent.putextra( "return-data" , false ); intent.putextra(mediastore.extra_output, imageuri); intent.putextra( "outputformat" , bitmap.compressformat.jpeg.tostring()); intent.putextra( "nofacedetection" , true ); // no face detection startactivityforresult(intent, choose_big_picture); |
二、从相册截小图
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
|
intent intent = new intent(intent.action_get_content, null ); intent.settype( "image/*" ); intent.putextra( "crop" , "true" ); intent.putextra( "aspectx" , 2 ); intent.putextra( "aspecty" , 1 ); intent.putextra( "outputx" , 200 ); intent.putextra( "outputy" , 100 ); intent.putextra( "scale" , true ); intent.putextra( "return-data" , true ); intent.putextra( "outputformat" , bitmap.compressformat.jpeg.tostring()); intent.putextra( "nofacedetection" , true ); // no face detection startactivityforresult(intent, choose_small_picture); |
三、对应的onactivityresult可以这样处理返回的数据
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
88
89
|
switch (requestcode) { case choose_big_picture: log.d(tag, "choose_big_picture: data = " + data); //it seems to be null if (imageuri != null ){ bitmap bitmap = decodeuriasbitmap(imageuri); //decode bitmap imageview.setimagebitmap(bitmap); } break ; case choose_small_picture: if (data != null ){ bitmap bitmap = data.getparcelableextra( "data" ); imageview.setimagebitmap(bitmap); } else { log.e(tag, "choose_small_picture: data = " + data); } break ; default : break ; } private bitmap decodeuriasbitmap(uri uri){ bitmap bitmap = null ; try { bitmap = bitmapfactory.decodestream(getcontentresolver().openinputstream(uri)); } catch (filenotfoundexception e) { e.printstacktrace(); return null ; } return bitmap; } |
以上就是android实现拍照截图功能的方法,希望对大家的学习有所帮助。