时间:2021-05-20
本文实例为大家分享了Android拍照及图片显示的具体代码,供大家参考,具体内容如下
1、功能声明
当应用需要使用相机、NFC等外设时,需要在AndroidManifest.xml中进行声明。
这样,当设备缺少这些外设时,应用商店的安装程序可以拒绝安装设备。
声明示例代码如下:
<uses-feature android:name="android.hardware.camera2" <!-- required为false时,不强制要求设备支持该功能 --> <!-- 如果不设置该值,一旦设备不支持camera,就不能安装该应用--> android:required="false"/>2、创建指向文件的File对象
拍摄的照片可以存放到设备的外部存储区。
Android为不同的应用分配的独有的存储区域,同时按照存储数据的类型对存储区域做了进一步地划分。
设置照片存储区域的代码示例如下所示:
3、触发拍照
可以使用MediaStore.ACTION_CAPTURE_IMAGE类型的Intent触发拍照,示例代码如下:
mPhotoButton = (ImageButton) v.findViewById(R.id.crime_camera);//隐式Intent触发相机拍照final Intent captureImageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//mPhotoFile保存着上文创建的指向指定地址的File//此处判断是否有能够处理隐式Intent的组件boolean canTakePhoto = mPhotoFile != null && captureImageIntent.resolveActivity(packageManager) != null;mPhotoButton.setEnabled(canTakePhoto);if (canTakePhoto) { //得到File文件对应的Uri地址 Uri uri = Uri.fromFile(mPhotoFile); //将Uri地址存入到Intent中,相机拍照得到的图像将会存入到该Uri地址对应的File里 captureImageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);}mPhotoButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivityForResult(captureImageIntent, REQUEST_PHOTO); }});4、处理拍照结果
拍照完成后,将可以加载得到图片了。
@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { ......... } else if (requestCode == REQUEST_PHOTO) { updatePhotoView(); } .........}private void updatePhotoView() { if (mPhotoFile == null || !mPhotoFile.exists()) { mPhotoView.setImageDrawable(null); } else { //加载图片对应的缩略图 Bitmap bitmap = PictureUtils.getScaledBitmap(mPhotoFile.getPath(), getActivity()); mPhotoView.setImageBitmap(bitmap); }}Bitmap只存储实际像素数据,因此即使原始照片已经压缩过,但存入Bitmap对象时,文件并不会被压缩。
因此加载图片时,需要先按照给定区域的大小合理的缩放文件。 然后,用Bitmap加载缩放后的文件,示例代码如下:
//在具体视图未加载前,无法得到视图的实际大小//因此根据屏幕尺寸,使用估算值进行缩放public static Bitmap getScaledBitmap(String path, Activity activity) { Point size = new Point(); activity.getWindowManager().getDefaultDisplay().getSize(size); return getScaledBitmap(path, size.x, size.y);}public static Bitmap getScaledBitmap(String path, int destWidth, int destHeight) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; //按照正常尺寸解析文件 BitmapFactory.decodeFile(path, options); //得到原始文件的宽和高 float srcWidth = options.outWidth; float srcHeight = options.outHeight; //inSampleSize表示水平/竖直抽样比 //例如,inSampleSize为2时,水平和数值均在原始基础上,每2个点抽取1个点 //于是,新图的大小变为原来的1/4 int inSampleSize = 1; if (srcHeight > destHeight || srcWidth > destWidth) { if (srcWidth > srcHeight) { inSampleSize = Math.round(srcHeight / destHeight); } else { inSampleSize = Math.round(srcWidth / destWidth); } } options = new BitmapFactory.Options(); options.inSampleSize = inSampleSize; //按新的抽样比,重新解析文件 return BitmapFactory.decodeFile(path, options);}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android系统相机拍照后相片无法在相册中显示解决办法目前自己使用发送广播实现了效果publicvoidphoto(){IntentopenCameraInt
本文介绍了Android编辑头像功能的简单实例,可以实现拍照,图片选取,裁剪。拍照publicstaticvoidstartCamera(Fragmentfra
我们先实现拍照按钮的圆形效果哈,Android开发中,当然可以找美工人员设计图片,然后直接拿进来,不过我们可以自己写代码实现这个效果哈,最常用的的是用layou
本文实例讲述了Android实现图片拍照剪裁的方法。分享给大家供大家参考,具体如下:调用系统的裁剪工具对相册或者拍照的图片进行裁剪。startActivityf
从相册或拍照更换图片功能的实现:(取图无裁剪功能)获取图片方式:(类似更换头像的效果)1、手机拍照选择图片;2、相册选取图片;本文只是简单实现该功能,页面展示有