全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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、处理拍照结果

拍照完成后,将可以加载得到图片了。

@Override
public 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仿微信单击拍照长按录像功能实例代码  # Android获取本地相册图片和拍照获取图片的实现方法  # Android SurfaceView拍照录像实现方法  # Android 7.0中拍照和图片裁剪适配的问题详解  # Android调用系统拍照裁剪图片模糊的解决方法  # Android 拍照功能实现(手机关闭依然拍照)详解及实例代码  # Android 开发手机(三星)拍照应用照片旋转问题解决办法  # 加载  # 外设  # 隐式  # 将会  # 基础上  # 就不能  # 不支持  # 可以使用  # 所示  # 大家分享  # 安装程序  # 具体内容  # 大家多多  # 到该  # 判断是否  # 新图  # 按新  # 完成后  # 屏幕尺寸  # 水平和 


相关文章: 网站微信制作软件,如何制作微信链接?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何用PHP快速搭建CMS系统?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  如何选择高性价比服务器搭建个人网站?  建站之星安装失败:服务器环境不兼容?  如何选择域名并搭建高效网站?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何高效配置IIS服务器搭建网站?  如何在腾讯云服务器上快速搭建个人网站?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  建站主机无法访问?如何排查域名与服务器问题  TestNG的testng.xml配置文件怎么写  东莞专业制作网站的公司,东莞大学生网的网址是什么?  如何在万网主机上快速搭建网站?  建站之星代理如何获取技术支持?  小程序网站制作需要准备什么资料,如何制作小程序?  深圳网站制作培训,深圳哪些招聘网站比较好?  移民网站制作流程,怎么看加拿大移民官网?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  建站之星如何实现PC+手机+微信网站五合一建站?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  活动邀请函制作网站有哪些,活动邀请函文案?  建站之星如何实现五合一智能建站与营销推广?  网站制作公司排行榜,四大门户网站排名?  如何选购建站域名与空间?自助平台全解析  如何快速搭建高效WAP手机网站吸引移动用户?  ppt制作免费网站有哪些,ppt模板免费下载网站?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在Windows服务器上快速搭建网站?  购物网站制作公司有哪些,哪个购物网站比较好?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  建站之星在线版空间:自助建站+智能模板一键生成方案  如何在IIS中新建站点并配置端口与物理路径?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  西安大型网站制作公司,西安招聘网站最好的是哪个?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  建站主机选购指南与交易推荐:核心配置解析  建站之星2.7模板快速切换与批量管理功能操作指南  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  css网站制作参考文献有哪些,易聊怎么注册?  制作网站的模板软件,网站怎么建设?  建站之星如何一键生成手机站?  安云自助建站系统如何快速提升SEO排名?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何在阿里云高效完成企业建站全流程? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。