本文将向大家展示如何拍照截图。
先看看效果图:
拍照截图有点儿特殊,要知道,现在的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实现拍照截图功能的方法,希望对大家的学习有所帮助。