Android使用摄像头,分别获取照片的缩略图与原图
2016-07-01 16:47
369 查看
看了慕课网的摄像头入门,于是记一下
本文主要有以下两个功能:
1、打开摄像头拍照,将一张缩略图显示在imageView中
2、将照片的原图显示在imageView中
布局先行:
先来实现第一个功能:
即按下“取缩略图”这个按钮,进入系统相机视图,拍照后返回,在下面的imageView中显示所拍下的图片。
以上要注意startActivityForResult这个方法,获取图片的关键。
通过以上代码即可完成第一个功能,只不过这里在imagView中显示的图片是原图的缩略图,这是Android系统默认的。那么如何在imageView中获取照片的原图呢?如下:
第二个功能
即即按下“取原图”这个按钮,进入系统相机视图,拍照后返回,在下面的imageView中显示所拍下的图片的原图
具体步骤:
1、首先在SD卡上指定一条路径
2、拍照后将照片的原图保存于这条路径上
3、根据此路径将这张原图读取出来
连同第一个功能的代码一起列出如下
因为涉及到在SD上创建文件,所以要添加使用权限
最后附上xml代码
本文主要有以下两个功能:
1、打开摄像头拍照,将一张缩略图显示在imageView中
2、将照片的原图显示在imageView中
布局先行:
先来实现第一个功能:
即按下“取缩略图”这个按钮,进入系统相机视图,拍照后返回,在下面的imageView中显示所拍下的图片。
public class MainActivity extends Activity { private ImageView imageView; private int REQ_1 = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.image); } public void showCompressed(View view){ //通过xml文件中button的android:onClick="showCompressed"实现 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//打开相机,是不是很简单呢 startActivityForResult(intent,REQ_1);//因为要调回数据(图片),所以要用这个方法 } //REQ_1为请求标记码,有了她,在回调时可以根据不同的请求码作出相应的处理,不慌乱 /** *因为用了startActivityForResult这个方法来请求返回的数据, * 所以要用下面这个回调方法来获取并处理返回的数据。 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { //RESULT_OK代表请求结果返回成功 if (requestCode == REQ_1) { //判断请求码,以便作出相应处理 Bundle bundle = data.getExtras(); //从intent中取出Bundle类型数据 Bitmap bitmap = (Bitmap) bundle.get("data");//通过图像处理类处理bundle数据 imageView.setImageBitmap(bitmap); } } } }
以上要注意startActivityForResult这个方法,获取图片的关键。
通过以上代码即可完成第一个功能,只不过这里在imagView中显示的图片是原图的缩略图,这是Android系统默认的。那么如何在imageView中获取照片的原图呢?如下:
第二个功能
即即按下“取原图”这个按钮,进入系统相机视图,拍照后返回,在下面的imageView中显示所拍下的图片的原图
具体步骤:
1、首先在SD卡上指定一条路径
2、拍照后将照片的原图保存于这条路径上
3、根据此路径将这张原图读取出来
连同第一个功能的代码一起列出如下
public class MainActivity extends Activity { private ImageView imageView; private int REQ_1 = 1; private int REQ_2 = 2; private String filePath; //定义一个String类型表示文件路径 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.image); filePath = Environment.getExternalStorageDirectory().getPath();//获取SD卡路径 filePath = filePath + "/"+"temp.png"; //为将要用摄像头获取的图片提前设定一条路径 } public void showCompressed(View view){ //通过xml文件中button的android:onClick="showCompressed"实现 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //打开相机,是不是很简单呢 startActivityForResult(intent,REQ_1); //因为要调回数据(图片),所以要用这个方法 //REQ_1为请求标记码,有了她,在回调时可以根据不同的请求码作出相应的处理,不慌乱 } public void showOriginal(View view){ // android:onClick="showOriginal" Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//打开相机 Uri uri = Uri.fromFile(new File(filePath)); //用这条路径生成一个Uri intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);//将设备产生的数据保存到这个设定的uri上 startActivityForResult(intent, REQ_2); } /** *因为用了startActivityForResult这个方法来请求返回的数据,所以要用下面这个回调 * 方法来获取并处理返回来的数据 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { //RESULT_OK代表请求结果返回成功 if (requestCode == REQ_1) { //判断请求码,以便作出相应处理 Bundle bundle = data.getExtras(); //从intent中取出Bundle类型数据 Bitmap bitmap = (Bitmap) bundle.get("data"); //通过图像处理类Bitmap来处理bundle数据 imageView.setImageBitmap(bitmap); } else if (requestCode ==REQ_2){ //根据请求码,做出获取原图的行为 FileInputStream fis=null; //FileInputStream 用于读取本地文件中的字节数据 try { fis = new FileInputStream(new File(filePath));//读取路径上文件流 Bitmap bitmap = BitmapFactory.decodeStream(fis);//解码文件流 imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); }finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } }
因为涉及到在SD上创建文件,所以要添加使用权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
最后附上xml代码
<?xml version="1.0" encoding="utf-8"?> <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" tools:context="com.hao.bond.mycamera.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:onClick="showCompressed" android:text="取缩略图" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:onClick="showOriginal" android:text="取原图" /> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" /> </LinearLayout>
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories