Android实现拍照及图片显示效果

Android实现拍照及图片显示效果,第1张

概述本文实例为大家分享了Android拍照图片显示的具体代码,供大家参考,具体内容如下

本文实例为大家分享了AndroID拍照及图片显示的具体代码,供大家参考,具体内容如下

1、功能声明

当应用需要使用相机、NFC等外设时,需要在AndroIDManifest.xml中进行声明。
这样,当设备缺少这些外设时,应用商店的安装程序可以拒绝安装设备。

声明示例代码如下:

<uses-feature androID:name="androID.harDWare.camera2"    <!-- required为false时,不强制要求设备支持该功能 -->    <!-- 如果不设置该值,一旦设备不支持camera,就不能安装该应用-->    androID:required="false"/>

2、创建指向文件的file对象

拍摄的照片可以存放到设备的外部存储区。

AndroID为不同的应用分配的独有的存储区域,同时按照存储数据的类型对存储区域做了进一步地划分。
设置照片存储区域的代码示例如下所示:

public file getPhotofile(Crime crime) {  //获取应用对应的存储照片的外部存储路径  file externalfilesDir = mContext      .getExternalfilesDir(Environment.DIRECTORY_PICTURES);  if (externalfilesDir == null) {    return null;  }  //创建指向文件的file对象  return new file(externalfilesDir,crime.getPhotofilename());}.............//每个crime对应的文件名public String getPhotofilename() {  return "img_" + getID().toString() + ".jpg";}

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);}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android实现拍照及图片显示效果全部内容,希望文章能够帮你解决Android实现拍照及图片显示效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1146635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存