Android实现拍照截图功能
程序员文章站
2023-12-20 15:22:04
本文将向大家展示如何拍照截图。
先看看效果图:
拍照截图有点儿特殊,要知道,现在的android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的。因此,我...
本文将向大家展示如何拍照截图。
先看看效果图:
拍照截图有点儿特殊,要知道,现在的android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的。因此,我们不能像对待相册截图一样使用bitmap小图,无论大图小图都统一使用uri进行操作。
一、首先准备好需要使用到的uri:
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程序进行拍照:
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传递给截图的程序。
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,只是尺寸不同而已。我们将这个操作封装在一个方法里面
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); }
四、最后一步,我们已经将数据传入裁剪图片程序,接下来要做的就是处理返回的数据了:
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实现拍照截图功能的方法,希望对大家的学习有所帮助。