1,得到保存截图文件的地址

private static final String IMAGE_FILE_LOCATION = Environment.getExternalStorageDirectory()+"/temp.jpg";

private Uri imageUri;

imageUri = Uri.fromFile(new File(IMAGE_FILE_LOCATION));

2。相冊和拍照button的点击事件

                // 相冊
imageViewLocalPhoto.setOnClickListener(new OnClickListener() { public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,//content://media/external/images/media
IMAGE_UNSPECIFIED);
startActivityForResult(intent, PHOTOZOOM);
}
}); // 拍照
imageViewTakePhoto.setOnClickListener(new OnClickListener() { public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
Environment.getExternalStorageDirectory(), "temp.jpg")));
System.out.println("============="
+ Environment.getExternalStorageDirectory());
startActivityForResult(intent, PHOTOHRAPH);
}
});

3。在onActivityResult回调方法中

拍照和本地图片传入的uri不同

 // 拍照 显示图片页面
if (requestCode == PHOTOHRAPH) { startPhotoZoom(imageUri);
} // 读取相冊缩放图片 显示图片页面
if (requestCode == PHOTOZOOM) { startPhotoZoom(data.getData());
}

4,截图方法

public void startPhotoZoom(Uri uri, int flag) {

			Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//图像输出
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", false);//回调方法data.getExtras().getParcelable("data")返回数据为空
startActivityForResult(intent, PHOTORESOULT); }

5,回调方法返回截图结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 处理结果 处理缩放过后的图片
if (requestCode == PHOTORESOULT) {
flag_layout = "layout2";
Bundle extras = data.getExtras();
if (extras != null) {
photo = extras.getParcelable("data");
}
if(photo==null)//载入本地截图
{
Bitmap bm = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/temp.jpg");
imageView.setImageBitmap(bm);
}
else//载入接收的图片数据
{
imageView.setImageBitmap(photo);
} } super.onActivityResult(requestCode, resultCode, data);
}

传统的截图方法为:1,不加这句intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//图像输出,,

2,这句改为返回数据为true:intent.putExtra("return-data", true);

3。也就没有剪切后的输出图片,通过data.getExtras().getParcelable("data")接收返回的图像数据

说明:经试验,传统的截图方法常常死机,报绑定数据过大的错误,所以改用本例的方法比較好用了,就是截好图片后,直接载入本地图片就好了

bug:假设删除temp.jpg文件后。拍照截图时会一直截删掉的temp.jpg文件。本地图片没问题,再换回拍照截图也没问题了

android项目中的拍照和本地图片截图的更多相关文章

  1. 在Android项目中启用Java 8的部分特性--Lambda & Method References

    Android N发布时同时发布了一个新的编译工具Jack(AS2.1+支持),基于Jack我们可以使用Java 8 的部分特性,在低版本机器上能使用的更少,同时Jack也有诸多不完善,工具链的改变难 ...

  2. 拍照、本地图片工具类(兼容至Android7.0)

    拍照.本地图片工具类:解决了4.4以上剪裁会提示"找不到文件"和6.0动态授予权限,及7.0报FileUriExposedException异常问题. package com.hb ...

  3. Android 项目中文件夹的说明与作用(转)

    (转自:http://blog.csdn.net/goodshot/article/details/11529731) Android 项目中文件夹的作用 1. src:存放所有的*.java源程序. ...

  4. 对Android项目中的文件夹进行解释

    对Android项目中的文件夹进行解释: · src:里面存放的是Activity程序,或者是以后的其他组件,在此文件夹之中建立类的时候一定要注意,包名称不能是一级. · gen:此文件夹中的内容是自 ...

  5. Android项目中如何用好构建神器Gradle?(转)

    最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...

  6. Android项目中JNI技术生成并调用.so动态库实现详解

    生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配 ...

  7. android项目中配置NDK自动编译生成so文件

    1 下载ndk开发包   2 在android 项目中配置编译器(以HelloJni项目为例)  2.1 创建builer  (a)Project->Properties->Builder ...

  8. android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

    简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...

  9. android项目中如何加载已有so库 <转>

    1,在项目根目录下建立文件夹libs/armeabi文件夹 2,将so库放入 libs/armeabi文件夹 注意事项: 1,如果采用静态注册的方式请注意C文件中严格按照命名规则 Java_packa ...

随机推荐

  1. 关于TcpClient,Socket连接超时的几种处理方法

    用TcpClient做通信的时候,经常发现网络连接不通的时候,代码就卡死在那里,TcpClient竟然没有超时的设定 泪奔啊 看来微软不是把所有工具准备得妥妥当当的啊 没办法 现在用线程来包装一下这个 ...

  2. vim-snipmate编写snippet的语法

    vim-snipmate真的很好用,以前好多编写代码的问题得到完美的解决.还附带提升我对vim的理解和信心,在这里感谢一下作者.thank you. 1.现说一下我浓缩的重要语法. 1.定义是下面这样 ...

  3. jquery 可拖拽的窗体控件实现代码

    引入JQUERY框架.把这个控件代码放到一个js文件里面直接引入就可以了控件代码 $.fn.myDrag = function() { var self = $(this); self.css(&qu ...

  4. 同一个界面内取微信的OPENID和调用微信的分享接口

    步骤如下,1:判断URL是否有CODE参数传入,没有则拼接那个微信跳转连接,然后redirect2:有CODE传入,调用微信接口,根据code获取openid和access_token,注意这一步取到 ...

  5. [svc]运维知识体系及职业

    知识点: 1,运维命令基础 100个命令 三剑客 正则 2,运维基础知识 linux启动 目录结构 常见配置路径 文件属性 链接知识 权限 用户管理 磁盘管理 网络基础(配置ip路由等) 3,基础核心 ...

  6. [sql]MySQL数据备份小结

    一 MySQL备份恢复总结: 1,备份所有库 2,分库备份 3,备份某库中的某表 4,备份某库中的多个表 5,分表备份 6,只备份表结构 7,只备份数据 二 MySQL备份恢复参数总结: -A 备份所 ...

  7. (Python mysql驱动的解决)_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':问题的解决

    在win7下安装了Python后,想安装python-MySQL,使用pip安装出现如下问题: >pip install MySQL-python _mysql.c(42) : fatal er ...

  8. JSP 中的 Request 和 Response 对象

    客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例:response对象包含了响应客户请求的有关信息,但在JSP中 ...

  9. TOMCAT8源码分析——SESSION管理分析(上)

    前言 对于广大java开发者而已,对于J2EE规范中的Session应该并不陌生,我们可以使用Session管理用户的会话信息,最常见的就是拿Session用来存放用户登录.身份.权限及状态等信息.对 ...

  10. Curator入门教程1

     简介 Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理 ...