本Demo的实现效果是调用手机上已安装的照相机来实现拍照的功能,拍好的照片以ImageView形式展示。

目的:学习手机调用安装的相机照相,对大的图片处理有所认识,这里主要用到BitmapFactory和BitmapFactory.Options两个类。

载入并显示一副图像对内存使用情况有显著的影响,Android提供了一个名为BitmapFactory 的有用程序类,该程序提供了一系列的静态方法,同意通过各种来源载入Bitmap图像。

针对我们的需求,将从文件载入图像。并在最初的活动中显示它。幸运的是,BitmapFactory中的可用方法将会调用BitmapFactory.Options类。这使得我们可以定义怎样将Bitmap读入内存。详细而言,当载入图像时。可以设置BitmapFactory应该使用的採样大小。在BitmapFactory.Options中指定inSampleSize參数。

比如。将inSampleSize = 8时。产生一幅图的大小是原始大小的1/8。要注意的是首先应将BitmapFactoryOptions.inJustDecodeBounds变量设置为true,这将通知BitmapFactory类仅仅需返回该图像的范围。而无需尝试解码图像本身。

最后将BitmapFactory.Options.inJustDecodeBounds设置为false。最后对其进行真正的解码。

实现效果图:

源码:

activity_main布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

MainActivity源码:

package com.multimediademo1;import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.Display;
import android.widget.ImageView;public class MainActivity extends Activity {private final static int CAMERA_RESULT = 0;private ImageView imageView;private String imageFilePath;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myfavoritepicture.jpg";File imageFile = new File(imageFilePath);Uri imageFileUri = Uri.fromFile(imageFile);Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri);startActivityForResult(intent, CAMERA_RESULT);}@Overrideprotected void onActivityResult(int requestCode, int resultCode,Intent intent) {super.onActivityResult(requestCode, resultCode, intent);if (resultCode == RESULT_OK) {imageView = (ImageView) findViewById(R.id.imageView);Display currentDisplay = getWindowManager().getDefaultDisplay();int dw = currentDisplay.getWidth();int dh = currentDisplay.getHeight();// 载入图像的尺寸,而不是图像本身BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath, options);int heightRatio = (int) Math.ceil(options.outHeight / (float) dh);int widthRatio = (int) Math.ceil(options.outWidth / (float) dw);// 假设两个比率都大于1。那么图像的一条边将大于屏幕if (heightRatio > 1 && widthRatio > 1) {if (heightRatio > widthRatio) {// 若高度比率更大,则依据它缩放options.inSampleSize = heightRatio;} else {options.inSampleSize = widthRatio;}}options.inJustDecodeBounds = false;bitmap = BitmapFactory.decodeFile(imageFilePath, options);imageView.setImageBitmap(bitmap);}}}

源码下载:

点击下载源代码

Android 使用内置的Camera应用程序捕获图像相关推荐

  1. 微信useragent java_微信内置浏览器和小程序的 User Agent 区别及判断方法

    通过UA来判断不同的设备或者浏览器是开发者最常用的方式方法,而对于微信开发和小程序也是同样的一个情况,我们可以通过微信内置浏览器 User Agent 信息来判断其具体类型或者设备. 所以子凡就通过徒 ...

  2. Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...

  3. android 获取sdcard 禁用sdcard,Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径 Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标 ...

  4. 配置Android Studio内置jre的环境变量

    下载Android Studio时,包括jre.将这个jre配置过环境变量后,就可以在全局使用了.但是和官网安装jre的环境配置略有不同. 图一  jre官网下载,安装后的目录 图二  Android ...

  5. 坐标正反算(含高程),把要素内置化(无需改程序文件,即可更换路线,同时存两条线要素

    tuzhyu 功能: 坐标正反算(含高程),把要素内置化(无需改程序文件,即可更换路线,同时存两条线要素) 另含两个边仰(一个横向坡,一个纵向坡)坡放样模块. 帮助文件未完成 程序浏览: FileNa ...

  6. 实现base64格式的amr音频文件在IOS、android微信内置浏览器的播放

    参考文档: 1.https://github.com/yxl/opencore-amr-js   (将amr文件转为wav格式的编解码项目) 因为项目需要,要将amr的base46格式的音频文件在IO ...

  7. 内置CRC于hex程序中的方法

    [摘要] 为了让MCU程序显示自身的CRC值,需要将其内置到程序中.但是,通常情况下,用计算好的CRC值,代替程序中原有的默认值之后,会导致程序发生变动,进而引发CRC值的变动.最终,新程序显示的值, ...

  8. Android 12 内置原生壁纸下载

    关注下方公众号,回复 壁纸 领取更多高清壁纸 下载方式 长按二维码关注 code小生 回复[壁纸]立刻获取高清壁纸 Surface 内置原生壁纸下载 Android 11 内置原生壁纸!速度来取

  9. 卸载工具Android,教你轻松卸载/删除Android手机内置游戏/软件

    每年3.15晚会似乎都会引起一场轰动万分的揭秘大行动,今年Android手机应用似乎成为了揭秘行动的焦点内容. 对于那些内置的流氓软件,用户们做了一个艰难的决定--想方设法卸载掉. 但是很多内置的东西 ...

最新文章

  1. CentOS-7.0的核心安装与配置的补全
  2. 037_jQuery Ajax序列化
  3. hive 插入数据映射到hbase_大数据基础知识:Hadoop分布式系统介绍
  4. 北邮OJ 2016网预 - Saber's Conjecture
  5. dotNET Core 3.X 请求处理管道和中间件的理解
  6. kafka集群搭建(消息)
  7. Docker精华问答 | Docker镜像和Docker容器的关系?
  8. python基础教程菜鸟教程-python基础菜鸟教程,Python的基础语法
  9. KMP模式匹配算法——C++
  10. 挑选了适合测试边界的汉字及截图
  11. Vue2系列教程——vue-pdf插件
  12. Android 倒计时器工具类
  13. ajax status code 415,Ajax向后台传json格式的数据出现415错误的原因分析及解决方法...
  14. 装修、家具设计标准尺寸参考
  15. 计算机命令清除所有,电脑深度清理命令设置方法
  16. 汽车辅助驾驶系统中的图像处理算法
  17. dcn网络与公网_ip 中的,内网,外网,公网,dcn网络,分别是什么意思?
  18. 人工智能AI:TensorFlow Keras PyTorch MXNet PaddlePaddle 深度学习实战 part1
  19. 近视眼学计算机好吗6,近视又不戴眼镜,还经常对着电脑会怎么样
  20. 如何对自己的Unity项目代码进行加密混淆?

热门文章

  1. ENode 2.0 - 深入分析ENode的内部实现流程和关键地方的幂等设计
  2. HTML5 Canvas游戏开发(一)基础知识
  3. HTML-ViewParse的Controller层插件开发小结
  4. 非常不错的sharepoint webpart工具集
  5. Ubuntu 9.04下让Swing和Swt编写的Java桌面程序运行
  6. java-HashSet源码学习
  7. JVM调优:Tomcat Context reloadabled与OutOfMemory(PermSpace)
  8. php恶意代码,php快速查找数据库中恶意代码的方法,快速查找恶意代码_PHP教程...
  9. RabbitMQ Topic交换机(结果成功)
  10. spring实现IOC的思路和方法